TRL 文档

分布式训练

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

有效批量大小计算如下批量大小=per_device_train_batch_size×num_devices×gradient_accumulation_steps \text{批量大小} = \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 上更新