问题描述
我正在尝试使用Ray在EMR群集上分发功能。任务数量(5,000)远远大于可用cpu(512)的数量。我的问题是,Ray没有将任务公平地分配到所有节点(PFA是Ganglia的服务器负载分配)。我确实从命令行打印中看到它实际上在其他节点中启动任务(在下面的分布中的某些节点中也可以通过浅绿色看到),但是它的方式更多地集中在主节点上(下面的分布中的红色节点) 。这并不是很有帮助,因为在一个大型96核实例中使用multiprocessing
库的并行化可以提高速度。
任何有关可能出问题的建议以及如何使Ray公平地在所有节点和内核上分配任务的建议都将非常有帮助。谢谢!
解决方法
Ray总是首先尝试在本地进行调度,以优化性能(这就是您的主节点负载最高的原因,因为您的驱动程序在此处正常运行)。有许多方法可以在整个群集中负载均衡工作负载。例如,您可以指定资源(例如num_cpus,以便当其他任务在头节点上没有足够的资源时,ray可以在其他节点上调度任务)或使用称为放置组的API。 https://docs.ray.io/en/master/placement-group.html
我还建议您将此内容发布在Github讨论中,以便您可以从其他用户那里获得更多技术:)! https://github.com/ray-project/ray/discussions