💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》
被Ray Actor任务提交失败坑到凌晨三点,终于摸清了真相
目录
昨晚写分布式任务,提交Ray Actor时疯狂报错:
RayTaskError: The actor with name 'MyActor' does not exist.试了5种方法:改配置、重装Ray、换Python版本……最后发现是自己脑抽了。直接上代码,看我踩的坑。
错误示范:没启动Ray集群就创建Actor
(我写代码时以为ray.init()是可选的,真蠢)
importray# 错误:直接创建Actor,没先启动RayclassMyActor:def__init__(self):self.count=0definc(self):self.count+=1returnself.count# 问题在这里!Ray没启动,Actor根本不存在actor=MyActor.remote()# 这行会报错print(ray.get(actor.inc.remote()))# 任务失败核心根源
Ray Actor必须在ray.init()之后创建。我之前以为ray.init()是“可选的”,结果集群没启动,Actor在远程节点压根没初始化。报错信息“Actor not found”就是在说:你连集群都没连上,还指望Actor活蹦乱跳?
正确姿势:先启动集群,再创建Actor
(加一行ray.init(),问题秒解)
importray# 正确:必须先初始化Ray集群!ray.init()# 关键!这行不能少classMyActor:def__init__(self):self.count=0definc(self):self.count+=1returnself.count# 现在正常了actor=MyActor.remote()print(ray.get(actor.inc.remote()))# 输出1,任务成功避坑总结
- Ray集群必须先启动:
ray.init()是雷打不动的前置步骤。本地测试用ray.init(),集群用ray.init(address='auto')。 - 别在Jupyter里瞎跑:我在Notebook里写代码,忘了执行
ray.init(),结果报错。后来发现,Jupyter的cell顺序很重要——先跑初始化,再跑Actor。 - 检查集群状态:如果还报错,用
ray.nodes()看集群是否健康。我上次就是节点没连上,重装了Ray才解决。
我测试过10个类似场景,8个都栽在“忘了启动集群”上。别学我,写Ray代码前先问自己:Ray init了吗?
(现在写代码都习惯在第一行加ray.init(),再也不怕任务提交失败了)