TRL 文档
分布式训练
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
分布式训练
此部分正在建设中。欢迎贡献!
使用 TRL 进行多 GPU 训练
TRL 中的训练器使用 🤗 Accelerate 来实现在多个 GPU 或节点上进行分布式训练。为此,首先通过运行以下命令创建一个 🤗 Accelerate 配置文件
accelerate config
并根据您的多 GPU / 多节点设置回答问题。然后,您可以通过运行以下命令来启动分布式训练
accelerate launch train.py
我们还在 示例文件夹 中提供了可用作模板的配置文件。要使用这些模板,只需在启动任务时传递配置文件的路径,例如
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 上更新