【发布时间】:2021-12-14 07:12:24
【问题描述】:
我有一个非常基本的射线问题。 ray 是否假定它运行的任何代码的所有依赖项都本地安装在每个工作节点上?
很明显 ray 能够在节点之间移动代码,因为 worker 可以执行 ray.remote 函数。代码是如何移动的?
函数是否看到调用者已导入的任何内容(如果它们在本地运行,则相同),还是必须在 worker 上运行的函数中再次导入它?他们是否必须为每个函数调用导入它,或者有没有办法只导入一次并重用导入的符号? (导入重量级依赖项时)。远程函数中导入的模块的生命周期是什么 - 远程函数返回时会消失吗? (即:每个远程函数调用是否有效地在单独的解释器中运行?)
如果工作人员必须导入所有内容 - 调用者 ray.put 是否可以导入它已导入的模块? (或者,例如使用这些模块中的类的对象)
可以放置的内容是否有限制 - 例如,我可以使用 ray.put(pytorch) 吗? (如果工作节点没有安装它会发生什么?)
背景:我想以交互方式(来自 jupyter notebook)使用 ray 作为 multiprocessing.Pool 的分布式替代品。我需要知道如何做到这一点,以便工作节点有效地拥有调用者的 conda 环境的精确克隆 - 无论调用时可能是什么(可能会因调用而异,例如,如果升级了某些包) .将 conda 环境放在 nfs 共享或类似的东西上是一种选择,但如果 ray 有自己的同步依赖项的方法会更好。主要是我只是想了解 ray 需要/假设什么。
【问题讨论】:
标签: python cluster-computing grpc distributed-computing ray