You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ray后端Modin向多目录写入数据集时出现无原因暂停问题

问题根因分析
  • 直接阻塞原因:你通过ray.get(loc.get_dataset.remote())将存储在Actor内的分布式Modin DataFrame全量拉取到主进程,Modin DataFrame本质是分片存储在多个Ray worker节点上的,这个拉取操作需要将所有分片数据序列化、跨进程传输再在主进程合并为单进程DataFrame,数据量较大时会直接阻塞调度,你日志中卡在LR数据集写入,就和该数据集拉取合并的开销直接相关。
  • 资源浪费问题:你在objs_refs列表中重复提交了两次r.generate_dataset.remote()任务,额外占用了Ray集群的CPU、内存资源,进一步加剧了调度阻塞的概率。
  • 锁逻辑无效:你用的threading.Lock是进程内线程锁,如果你把cache_dataset改为@remote装饰的分布式任务,该锁对跨进程的Ray worker完全无效,不过该问题不是本次阻塞的直接诱因。
  • 权限风险:如果你的写入路径是本地路径而非集群共享路径,Modin执行分布式to_csv时部分worker可能因为无路径访问权限卡住,无报错直接静默阻塞。
修复方案
  1. 取消跨进程拉取大数据的逻辑:不要在主进程调用to_csv,直接把写入逻辑放到DatasetHelper Actor的内部方法里,直接在Actor进程内调用Modin的to_csv方法,避免全量数据跨进程传输的开销。
  2. 删除重复任务:删掉objs_refs.append(r.generate_dataset.remote())的重复条目,避免不必要的资源占用。
  3. 配置Actor资源配额:给DatasetHelper Actor加上资源限制,例如@ray.remote(num_cpus=4),避免Modin内部启动的Ray任务和Actor本身争抢CPU资源导致死锁。
  4. 验证路径权限:提前创建所有输出目录,确认运行用户对所有写入路径有读写权限,如果是多节点集群要使用共享存储作为输出路径。
  5. 排查验证:卡住时可以访问你配置的8265端口Ray dashboard,查看待调度任务列表、worker运行状态、对象存储占用情况,可直接确认是否是Ray任务调度阻塞导致的问题。

内容的提问来源于stack exchange,提问作者AvidJoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:27:03