Dask Worker 在 AWS 上找不到模块



所以我有一个分布式的任务设置,调度程序在一个容器上运行,工作程序在另一个容器上运行。我在AWS上有一个类似的设置,其中调度程序运行在EC2实例上,工作程序运行在另一台EC2机器的docker容器上。

我想要一个python文件对worker可用。我还不想把它作为一个依赖直接安装到worker上,但我想手动将这个文件复制到worker上,这样它就可以在worker使用的python环境中使用。为了实现这一点,我将此添加到DOCKERFILE:

# syntax=docker/dockerfile:experimental
FROM daskdev/dask:2020.12.0
WORKDIR /src/
COPY ./python_file.py /src/python_file.py

基本上,我希望任务工作者能够在python_file.py中运行方法。所以我像这样提交方法:

client.submit(python_file.some_method, arg1, arg2)

这在我的本地设置的任务上工作得很好,并且工作线程能够反序列化此调用并运行该方法。不知何故,这在AWS设置上不起作用。工人不停地抱怨:

ModuleNotFoundError: No module named 'python_file'

调试:

  • 我登录到EC2机器,我看到容器是活的。
  • 我进入容器,我看到文件也存在于我想要的地方(完全像我的本地)。
  • 我运行python并尝试导入模块,它也工作。
  • 我运行' pickle.loads(b'x80x04x95#x00x00x00x00x00x00x00 x00x00x00x8cpython_filex94x8cx0esome_methodx94x93x94.'),返回所需的方法。

如果这一切都工作正常,还有什么原因导致worker仍然抱怨模块不存在?有人遇到过类似的情况吗?

这个听起来像是PYTHONPATH问题——在你的本地机器上,python文件可能存在于当前工作目录中(在你的PYTHONPATH上)。你能确认src在你的PYTHONPATH上吗?如果没有,我会将其作为ENV添加到您的docker映像中。

最新更新