web-dev-qa-db-ja.com

DaskでKilledWorkerの例外はどういう意味ですか?

Dask.distributedスケジューラーでDaskを使用すると、タスクがKilledWorker例外で返されます。これらのエラーはどういう意味ですか?

14
MRocklin

このエラーは、Daskスケジューラーがタスクを信頼しなくなったときに生成されます。これは、ワーカーが予期せず死亡したときに頻繁に発生したためです。これは、セグメンテーション違反やメモリエラーなどによってワーカーを強制終了するタスクからクラスターを保護するように設計されています。

ワーカーが予期せず死亡した場合は常に、スケジューラーは、ワーカーが死亡したときにそのワーカーで実行されていたタスクを記録します。他のワーカーに対してこれらのタスクを再試行しますが、疑わしいものとしてマークします。同じタスクが複数のワーカーの死亡時に存在する場合、最終的にスケジューラーはこのタスクの再試行をあきらめ、代わりにKilledWorkerを除いて失敗としてマークします。

多くの場合、これはタスクに他の問題があることを意味します。おそらく、セグメンテーション違反を引き起こしたり、メモリの割り当てが多すぎたりします。おそらく、スレッドセーフではないライブラリを使用しています。あるいは、それは非常に不運なことかもしれません。とにかく、ワーカーログを調べて、ワーカーが失敗している理由を特定する必要があります。これは、タスクが失敗するよりも大きな問題である可能性があります。

この動作は、~/.config/dask/distributed.yamlファイルの次のエントリを変更することで制御できます。

allowed-failures: 3     # number of retries before a task is considered bad
24
MRocklin