TRL 文档
分布式训练
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
分布式训练
建设中章节。欢迎贡献!
使用 TRL 进行多 GPU 训练
TRL 中的训练器使用 🤗 Accelerate 来实现跨多个 GPU 或节点的分布式训练。为此,首先通过运行以下命令创建 🤗 Accelerate 配置文件
accelerate config
并根据您的多 GPU / 多节点设置回答问题。然后,您可以通过运行以下命令启动分布式训练
accelerate launch train.py
我们还在 examples 文件夹中提供了配置文件,可以将其用作模板。要使用这些模板,只需在启动作业时传递配置文件的路径,例如
accelerate launch --config_file examples/accelerate_configs/multi_gpu.yaml train.py <SCRIPT_ARGS>
这会自动将工作负载分配到所有可用的 GPU 上。
在底层,🤗 Accelerate 为每个 GPU 创建一个模型。每个进程
- 处理其自身批次的数据
- 计算该批次的损失和梯度
- 跨所有 GPU 共享梯度更新
有效批次大小计算为
为了在扩展到多个 GPU 时保持一致的批次大小,请确保相应地更新 per_device_train_batch_size
和 gradient_accumulation_steps
。
例如,以下配置是等效的,并且应该产生相同的结果
GPU 数量 | 每设备批次大小 | 梯度累积步数 | 注释 |
---|---|---|---|
1 | 32 | 1 | 可能较高的内存使用率,但更快的训练速度 |
1 | 4 | 8 | 较低的内存使用率,较慢的训练速度 |
8 | 4 | 1 | 多 GPU 以获得两全其美的效果 |
每个 GPU 有一个模型可能会导致高内存使用率,这对于大型模型或低内存 GPU 来说可能不可行。在这种情况下,您可以利用 DeepSpeed,它提供了诸如模型分片、零冗余优化器、混合精度训练以及卸载到 CPU 或 NVMe 等优化。请查看我们的 DeepSpeed 集成指南以获取更多详细信息。
多节点训练
我们正在编写多节点训练指南。敬请期待!🚀
< > 在 GitHub 上更新