Ray Train 是 Ray 项目中的分布式训练编排组件,目标是把机器学习训练从单 GPU 扩展到多节点集群,并且尽量少改代码。它适合已有的 PyTorch、TensorFlow、HuggingFace 等训练流程。
安装方式:pip install -U "ray[train]"。
用途与主要能力
- 分布式训练编排:支持跨集群、多节点的训练任务调度。
- 框架支持:可扩展 PyTorch、TensorFlow、HuggingFace 等训练。
- 自动处理:分布式协调、GPU 分配、容错、检查点、指标聚合。
- 超参数调优:与 Ray Tune 集成,支持 ASHA 等调度器做超参数搜索与早停。
- 容错与检查点:训练失败后可自动从检查点恢复。
- 弹性伸缩:可在训练过程中增加或移除节点。
- 多节点部署:支持连接 Ray 集群,使用 ray start --head 和 ray start --address 启停集群。
使用方式
官方给出了几种典型工作流。基本 PyTorch 训练中,定义 train_func,在函数内使用 train.torch.prepare_model 准备模型,然后通过 TorchTrainer 和 ScalingConfig 设置 worker 数量与是否使用 GPU,最后调用 trainer.fit()。报告指标使用 train.report。
扩展到多 GPU 或多节点时,仍然使用同样的 train_func,只需调整 ScalingConfig 中的 num_workers、use_gpu 和 resources_per_worker。HuggingFace 集成可使用 TransformersTrainer,并在 train_func 中调用 HuggingFace Trainer。超参数调优使用 ray.tune.Tuner 配合 TorchTrainer 和 ASHAScheduler。检查点与容错通过 train.get_checkpoint 和 Checkpoint 实现。多节点训练可使用 ray.init(address="auto") 连接集群,并用 placement_strategy="SPREAD" 分散到节点。
适用场景
- 需要跨多台机器训练。
- 需要大规模超参数调优。
- 需要容错,失败 worker 可自动重启。
- 需要弹性伸缩,在训练中增加或移除节点。
- 希望用统一代码支持 PyTorch、TensorFlow、HuggingFace 等框架。
硬件要求与限制
- 单节点:1 个及以上 GPU,或 CPU。
- 多节点:2 台及以上可联网机器。
- 云环境:AWS、GCP、Azure,支持 Ray 自动扩缩。
- 本地部署:Kubernetes、SLURM 集群。
- 支持加速器:NVIDIA GPU(CUDA)、AMD GPU(ROCm)、TPU(Google Cloud)、CPU。
- 若只是单节点多 GPU 且希望更简单,可考虑 Accelerate;需要高层抽象可选 PyTorch Lightning;追求极致性能且能接受复杂配置可选 DeepSpeed;需要最大控制与最小开销可选原生 DDP。
常见问题包括 Ray 集群连接失败、内存不足、训练缓慢。处理方式分别是检查 ray status、减少 worker 或使用梯度累积、检查数据加载瓶颈并增加 DataLoader 的 num_workers。
其他信息
版本 2.40.0+,GitHub 仓库为 https://github.com/ray-project/ray,文档为 https://docs.ray.io/en/latest/train/train.html。使用方包括 OpenAI、Uber、Spotify、Shopify、Instacart。