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

YOLOv7基于Ray集群的分布式训练实现及数据集分布式共享问题求助

YOLOv7基于Ray集群的分布式训练实现及数据集分布式共享问题求助

我现在遇到了一个棘手的问题:想用Ray集群来训练YOLOv7,但没办法把数据集分发到各个节点上,想请教一下各位怎么解决这个问题。

我的操作流程和遇到的问题如下:

我使用的是rayproject/ray-ml的Docker镜像,具体步骤是:

  • 在头节点启动Docker容器:
docker run --rm --shm=5.01gb --gpus all -it --network host --name ray-head rayproject/ray-ml:latest-py39-gpu
  • 在头节点启动Ray集群:
ray start --head --port=6379
  • 在另一台工作节点机器上启动Docker容器:
docker run --rm --shm=5.01gb --gpus all -it --network host --name ray-worker rayproject/ray-ml:latest-py39-gpu
  • 让工作节点加入Ray集群:
ray start --address='<ip>:6379'

数据和代码的准备情况:
我把整个YOLOv7文件夹和数据集都复制到了头节点的容器中,只把YOLOv7文件夹复制到了工作节点的容器里。为了让数据集能通过Ray对象存储共享,我在train.py脚本里做了这些修改:

dataloader = ray.put(dataloader)
dataset = ray.put(dataset)

//...

testloader = ray.put(testloader)

但运行后我遇到了这个错误:

raise NotImplementedError("{} cannot be pickled", self.__class__.__name__)
NotImplementedError: ('{} cannot be pickled', '_MultiProcessingDataLoaderIter')

补充说明:

  • 如果只在单台机器(只有头节点)上运行,训练完全正常,因为数据集就在本地;
  • 如果手动把数据集复制到所有工作节点上,训练也能正常进行,但我不想这么做,希望能利用Ray对象存储来实现数据集的分布式共享,从而提升训练效率。

想请教各位:怎么正确实现Ray集群结构下的YOLOv7分布式训练,解决数据集的分布式共享问题?

备注:内容来源于stack exchange,提问作者Elif Betül BÜYÜKORHAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:49:51