如何在驱动程序死亡时终止ray任务



我正在研究ray来分配许多可以并行运行的计算任务。射线代码看起来像:

ray.init(f"ray://{head_ip}:10001")
@ray.remote
def compute(compute_params):
# do some long computation
return some_result
# ==== driver part
ray_res = [compute.remote(cp) for cp in many_computations]
remote_res=ray.get(ray_res)

停止这种计算的正确方法是什么?

假设每个计算可能需要几个小时,并且由于某种原因,驱动程序代码被杀死/停止/崩溃,如何可能停止工作机器上的任务?也许对工人有一些特殊的配置,可以理解司机已经死了…?

查看RAY文档

远程函数可以通过调用ray取消。远程参与者函数可以通过使用ray.kill接口杀死参与者来停止。

在你的例子中,它应该是这样的:

ray.init(f"ray://{head_ip}:10001")
@ray.remote
def compute(compute_params):
# do some long computation
return some_result

# ==== driver part
ray_res = [compute.remote(cp) for cp in many_computations]
for x in ray_res:
try:
remote_res=ray.get(x)
except TaskCancelledError:
....

在Ray中,当驱动程序退出时,任务将自动终止。例如,试着

使用ray start --head启动射线

import ray    
import time
ray.init("auto")
@ray.remote
def f():
time.sleep(300)
a = f.remote()
# At this point, task should be visible from `ray list tasks` or `ps aux | grep ray::f`
time.sleep(10)

并在驱动退出后搜索ps aux | grep ray::(所有Ray worker都是)

最新更新