提交任务的Driver进程终止后,如何重新获取Ray任务?
问题
我遇到的场景和Stack Overflow上的《How to kill ray tasks when the driver is dead》类似,代码实现如下:
ray.init(f"ray://{head_ip}:10001") @ray.remote def compute(compute_params): # 执行长时间计算任务 return some_result # ==== 驱动进程部分 ray_res = [compute.remote(cp) for cp in many_computations]
我希望在提交任务的Driver进程终止后,仍能获取任务的执行状态。我知道命名Actor可以实现该需求——同一命名空间下的其他Driver连接到同一集群时,可通过名称获取Actor,但这套机制并不适用于普通任务。
我尝试给任务设置名称:
compute.options(name="foobar").remote(compute_params) >> ObjectRef(c8ef45ccd0112571ffffffffffffffffffffffff0100000001000000)
但目前Ray没有提供对应的API,能通过任务名称或ObjectRef ID重新获取任务对象。我期望的API形式类似:
ray.get_task_by_name('foobar')
或者:
ray.get_task_by_id("c8ef45ccd0112571ffffffffffffffffffffffff0100000001000000")
解答
截至2022年12月,Ray暂不支持直接通过任务名称或ObjectRef ID在其他Driver中重新获取任务对象的功能。要实现Driver进程终止后仍能追踪任务状态的需求,可采用以下两种替代方案:
- 使用命名Actor封装计算任务:将原本的计算逻辑放到命名Actor的方法中执行。由于命名Actor可被同一命名空间下的其他Driver通过名称获取,你可以在新的Driver中获取该Actor实例,进而查询任务的执行状态或结果。
- 使用Ray的Alpha阶段工具库:Ray社区提供了处于Alpha阶段的相关工具,可用于实现跨Driver的任务状态追踪,但这类库功能尚未稳定,使用时需注意版本兼容性问题。
内容的提问来源于stack exchange,提问作者Tarjintor
相关产品推荐
相关产品推荐

