ray cluster 启动时候head node 如何不作为计算节点

【Ray使用环境】生产环境
【Ray版本和类库】1.12.1
【使用现场】
【问题复现】
ray cluster启动的时候指定了head node的 --num-cpus=0,但是head 节点还是作为了计算节点,head 节点启动命令如下:


,是不是RAY_OVERRIDE_RESOURCES 这个被环境变量覆盖了,所以导致了head node 作为了计算节点?

你好,你的问题可能是以下两个原因导致的:

  1. 设置了override resources
  2. 你给要执行的task设置了cpu=0

所以,如果需要head节点不被执行的话,那么head节点在保证设置了num-cpus=0的同时,也需要保证override resources里不能有cpu,并且要执行的task,不能设置cpu=0。 只有这些条件满足的时候,task才不会在head上执行。

另外,这个地方也许是ray需要做一点小改进,例如–num-cpus=0是不是应该覆盖掉override resources,也是有争议的。

ray有一个API让你可以看到集群的资源视图ray.state.cluster_resources(),你可以清晰的看到当前哪些资源生效的值是什么。

1 Like

好的,感谢回复,我试试看

hi 你好,我也遇到了类似的问题,我在方法上加了 @ray.remote, 但是方法还是在head节点执行。我要如何才能使方法一定在worker上执行呢。

Ray 版本: 2.0.0

代码如下:

import ray

@ray.remote
def test_cpu3():
    import time
    time.sleep(150)
    return "done"

my_task = test_cpu3.remote()
ray.get(my_task)

你好,想要方法在worker节点上执行的方法可以有多种:

  1. 如前面回答,可以关掉head节点的CPU资源,这样任务就调度不到head节点了。这里就不再赘述了,您可以查看上一个回答。
  2. 你还可以通过自定义资源(或者标签)的方式指定任务在某些节点上执行。
    (1) 在worker节点启动的时候指定特定资源:
ray start --resources={"A":10}

(2) 指定你的任务需要该资源:

@ray.remote(resources={"A": 1})
def f():
    pass
2 Likes