【问题标题】:Dask Worker can't find module on AWSDask Worker 在 AWS 上找不到模块
【发布时间】:2021-02-09 08:36:19
【问题描述】:

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

我希望工作人员可以使用 python 文件。到目前为止,我还不想将它作为依赖项直接安装到工作人员,但想手动将此文件复制到工作人员,以便它在工作人员使用的 python 环境中可用。为此,我将其添加到 DOCKERFILE:

# syntax=docker/dockerfile:experimental
FROM daskdev/dask:2020.12.0

WORKDIR /src/
COPY ./python_file.py /src/python_file.py

基本上我希望 dask worker 能够在 python_file.py 中运行一个方法。所以我提交的方法如下:

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

这在我的本地 dask 设置上运行良好,并且工作人员能够反序列化此调用并运行该方法。不知何故,这在 AWS 设置中不起作用。工人一直在抱怨:

ModuleNotFoundError: No module named 'python_file'

调试:

  • 我登录到 EC2 机器,我看到容器是活动的。
  • 我进入了容器,我看到该文件也存在于我想要的位置(与我的本地完全一样)。
  • 我运行了 python 并尝试导入模块,这也有效。
  • 我运行了 `pickle.loads(b'\x80\x04\x95#\x00\x00\x00\x00\x00\x00\x00\x8c\python_file\x94\x8c\x0esome_method\x94\x93\x94. ') 并返回所需的方法。

如果所有这些都有效,那么工人仍然抱怨模块不存在的其他原因是什么?有没有其他人遇到过类似的情况?

【问题讨论】:

    标签: python amazon-web-services docker amazon-ec2 dask


    【解决方案1】:

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

    【讨论】:

    • 如果是 PYTHONPATH 问题,当我尝试在容器内的 python 中导入模块时它会如何工作?
    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 2023-02-08
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多