Dask 中的 KilledWorker 异常是啥意思?
Posted
技术标签:
【中文标题】Dask 中的 KilledWorker 异常是啥意思?【英文标题】:What do KilledWorker exceptions mean in Dask?Dask 中的 KilledWorker 异常是什么意思? 【发布时间】:2018-03-23 07:59:10 【问题描述】:当使用带有 dask.distributed 调度程序的 Dask 时,我的任务返回 KilledWorker
异常。这些错误是什么意思?
【问题讨论】:
【参考方案1】:当 Dask 调度程序不再信任您的任务时会生成此错误,因为当工作人员意外死亡时它经常出现。它旨在保护集群免受杀死工作人员的任务的影响,例如由于段错误或内存错误。
每当一个工作人员意外死亡时,调度程序都会记录该工作人员死亡时正在运行哪些任务。它会在其他工作人员身上重试这些任务,但也会将它们标记为可疑。如果多个工作人员死亡时存在相同的任务,那么最终调度程序将放弃尝试重试此任务,而是将其标记为失败,并出现异常KilledWorker
。
这通常意味着您的任务存在其他问题。也许它会导致分段错误或分配过多的内存。也许它使用了一个不是线程安全的库。或者也许只是很不走运。无论如何,您应该检查您的工作人员日志以确定您的工作人员失败的原因。这可能是比您的任务失败更大的问题。
您可以通过修改 ~/.config/dask/distributed.yaml
文件中的以下条目来控制此行为。
allowed-failures: 3 # number of retries before a task is considered bad
【讨论】:
我通过跟踪 UI 看到的日志在我的案例中没有包含任何有用的详细信息,比如任务崩溃的原因。是否有其他日志要查找?转储文件以在某个文件系统路径中查看?! 作为标准做法,dask 工作人员默认登录到标准输出。您可以在设置工作人员时将此输出重定向到文件。 如果我没有~/.dask/config.yaml
文件,如何更改此参数
这已移至~/.config/dask/distributed.yaml
。我已经更新了答案
这非常有用@MRocklin!更容易理解的一件事是在客户端的堆栈跟踪中包含来自失败任务的堆栈跟踪。 KilledWorker
不清楚任务的问题是什么,甚至是任务的问题......以上是关于Dask 中的 KilledWorker 异常是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
将函数应用于 Dask 中的分组数据框:如何将分组的数据框指定为函数中的参数?
在dask.distributed群集中的计算机之间共享python模块