TRL 文档

分布式训练

Hugging Face's logo
加入 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 共享梯度更新

有效批次大小计算为Batch Size=per_device_train_batch_size×num_devices×gradient_accumulation_steps \text{Batch Size} = \text{per\_device\_train\_batch\_size} \times \text{num\_devices} \times \text{gradient\_accumulation\_steps}

为了在扩展到多个 GPU 时保持一致的批次大小,请确保相应地更新 per_device_train_batch_sizegradient_accumulation_steps

例如,以下配置是等效的,并且应该产生相同的结果

GPU 数量 每设备批次大小 梯度累积步数 注释
1 32 1 可能较高的内存使用率,但更快的训练速度
1 4 8 较低的内存使用率,较慢的训练速度
8 4 1 多 GPU 以获得两全其美的效果

每个 GPU 有一个模型可能会导致高内存使用率,这对于大型模型或低内存 GPU 来说可能不可行。在这种情况下,您可以利用 DeepSpeed,它提供了诸如模型分片、零冗余优化器、混合精度训练以及卸载到 CPU 或 NVMe 等优化。请查看我们的 DeepSpeed 集成指南以获取更多详细信息。

多节点训练

我们正在编写多节点训练指南。敬请期待!🚀

< > 在 GitHub 上更新