【问题标题】:How does ray handle package dependencies?ray 如何处理包依赖关系?
【发布时间】: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


    【解决方案1】:

    您可以查看运行时环境以让您的 Ray 工作人员在指定的 conda 环境中运行:https://docs.ray.io/en/latest/advanced.html。为了让它始终匹配调用者的环境,您可以调用 conda env export 从调用者的环境中生成一个 environment.yml 文件,然后再将其传递到运行时环境。

    回答您的第一个问题,是的,不使用运行时环境 Ray 假设所有依赖项都安装在集群上。通常(有或没有运行时环境),代码是使用 cloudpickle 移动的。每个 Ray worker 都有一个长时间运行的 Python 进程来运行任务,所以如果多个任务重用同一个模块,它仍然只会在开始时导入一次。

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2019-03-17
      • 2021-08-10
      相关资源
      最近更新 更多