Dask.distributedスケジューラーでDaskを使用すると、タスクがKilledWorker
例外で返されます。これらのエラーはどういう意味ですか?
このエラーは、Daskスケジューラーがタスクを信頼しなくなったときに生成されます。これは、ワーカーが予期せず死亡したときに頻繁に発生したためです。これは、セグメンテーション違反やメモリエラーなどによってワーカーを強制終了するタスクからクラスターを保護するように設計されています。
ワーカーが予期せず死亡した場合は常に、スケジューラーは、ワーカーが死亡したときにそのワーカーで実行されていたタスクを記録します。他のワーカーに対してこれらのタスクを再試行しますが、疑わしいものとしてマークします。同じタスクが複数のワーカーの死亡時に存在する場合、最終的にスケジューラーはこのタスクの再試行をあきらめ、代わりにKilledWorker
を除いて失敗としてマークします。
多くの場合、これはタスクに他の問題があることを意味します。おそらく、セグメンテーション違反を引き起こしたり、メモリの割り当てが多すぎたりします。おそらく、スレッドセーフではないライブラリを使用しています。あるいは、それは非常に不運なことかもしれません。とにかく、ワーカーログを調べて、ワーカーが失敗している理由を特定する必要があります。これは、タスクが失敗するよりも大きな問題である可能性があります。
この動作は、~/.config/dask/distributed.yaml
ファイルの次のエントリを変更することで制御できます。
allowed-failures: 3 # number of retries before a task is considered bad