gpt4 book ai didi

python - 向 Dask 分布式集群提交任务时本地 python 文件导入问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:52 26 4
gpt4 key购买 nike

我有以下问题。如果我的代码被分成不同的文件,我不能简单地将函数导入并提交到集群,因为我的本地文件不存在于工作机器上。为了解决这个问题,我需要手动将文件合并为一个。对于小示例,它可以相对简单地完成,但是对于一个分成几个文件夹的大项目来说,这非常耗时。示例:

localfile.py 文件:

def custom():
print("Remote run")
return

现在让我们尝试将导入的函数提交到集群,cluster.py 文件:

import localfile

x = client.submit(localfile.custom)

x.result()
# Import error here, details below

-

# The protocol we write by default.  May be less than HIGHEST_PROTOCOL.
File "/usr/local/lib/python3.6/site-packages/cloudpickle/cloudpickle.py", line 944, in subimport
ModuleNotFoundError: No module named 'localfile'

如您所见,工作人员无法找到本地 Python 文件,因此任务失败。

有什么方法可以将我的 pickle 代码与导入的本地文件一起发送吗?我知道可能的解决方案只是将本地文件上传给工作人员,但是当代码经常修改并且您的集群是动态的时,这不是一个优雅的解决方案。如果能够自动将您的“client.py”代码与“localfile.py”合并,将其 pickle 并发送到调度程序,那就太好了。这有可能吗?你有任何其他想法如何解决这个问题吗?谢谢!

最佳答案

我想你会知道,客户端 API 提供了 upload_file ,它可以处理将您的模块送到工作人员可以导入的地方。

在 worker 来来去去的情况下,您将无法确保新 worker 将文件放在正确的位置。然而,pickle 就其本质而言,将对象/函数引用到源文件,大概是为了减少数据大小。

两种模糊的可能性:

  • 您可以仅对上传时处于事件状态的相同工作人员 (compute(workers=)) 执行计算操作,并在您执行的函数中执行重新加载或其他 importlib Hook 跑。
  • 如果您愿意,您实际上可以将函数源作为文本分发,并执行定义,或者再次使用 importlib 将其放入工作模块中。

无论哪种情况,您都需要修改或包装您的函数以处理额外的步骤。

关于python - 向 Dask 分布式集群提交任务时本地 python 文件导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53502083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com