Optimum 文档
多节点训练
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
多节点训练
使用多个 Gaudi 服务器进行多节点训练可以轻松完成。本指南将展示如何
- 设置多个 Gaudi 实例
- 设置您的计算环境
- 启动多节点运行
设置多个 Gaudi 实例
有两种可能的配置
- 使用 Gaudi NIC 或主机 NIC 进行横向扩展 (本地部署)
- 使用 Intel® Tiber™ AI Cloud 实例进行横向扩展
本地部署
要在本地设置服务器,请查看 Intel® Gaudi® AI 加速器文档中的安装和分布式训练页面。
Intel Tiber AI Cloud 实例
请按照 Intel® Gaudi® AI 加速器文档中创建账户和获取实例页面上的步骤操作。
启动多节点运行
一旦您的 Intel Gaudi 实例准备就绪,请按照 Intel® Gaudi® AI 加速器文档中设置多服务器环境页面上的步骤操作。
最后,有两种方法可以在多个节点上运行您的训练脚本
- 使用
gaudi_spawn.py脚本,您可以运行以下命令
python gaudi_spawn.py \
--hostfile path_to_my_hostfile --use_deepspeed \
path_to_my_script.py --args1 --args2 ... --argsN \
--deepspeed path_to_my_deepspeed_config其中 --argX 是要运行脚本的参数。
- 使用
DistributedRunner,您可以将此代码片段添加到脚本中
from optimum.habana.distributed import DistributedRunner
distributed_runner = DistributedRunner(
command_list=["path_to_my_script.py --args1 --args2 ... --argsN"],
hostfile=path_to_my_hostfile,
use_deepspeed=True,
)环境变量
如果您需要为所有节点设置环境变量,可以在 .deepspeed_env 文件中指定它们。该文件应位于您执行命令的本地路径或您的主目录中。格式如下
env_variable_1_name=value
env_variable_2_name=value
...建议
- 强烈建议在多节点运行时使用梯度检查点(gradient checkpointing)以获得最高的加速比。您可以在这些示例中使用
--gradient_checkpointing或在您的GaudiTrainingArguments中设置gradient_checkpointing=True来启用它。 - 更大的批处理大小应能带来更高的加速比。
- 不建议进行多节点推理,因为它可能产生不一致的结果。
- 在 Intel Tiber AI Cloud 实例上,请使用
--privileged标志运行您的 Docker 容器,以确保 EFA 设备可见。
示例
在本示例中,我们将在 WikiText 数据集上微调一个预训练的 GPT2-XL 模型。我们将使用 Github 仓库中提供的因果语言建模示例。
第一步是使用此命令在多个节点上训练模型
PT_HPU_LAZY_MODE=1 python ../gaudi_spawn.py \
--hostfile path_to_hostfile --use_deepspeed run_clm.py \
--model_name_or_path gpt2-xl \
--gaudi_config_name Habana/gpt2 \
--dataset_name wikitext \
--dataset_config_name wikitext-2-raw-v1 \
--do_train \
--output_dir /tmp/gpt2_xl_multi_node \
--learning_rate 4e-04 \
--per_device_train_batch_size 16 \
--gradient_checkpointing \
--num_train_epochs 1 \
--use_habana \
--use_lazy_mode \
--throughput_warmup_steps 3 \
--deepspeed path_to_deepspeed_config评估未在同一命令中执行,因为我们目前不建议执行多节点推理。
模型训练完成后,我们可以使用以下命令对其进行评估。参数 --model_name_or_path 应等于前一个命令的 --output_dir 参数。
PT_HPU_LAZY_MODE=1 python run_clm.py \
--model_name_or_path /tmp/gpt2_xl_multi_node \
--gaudi_config_name Habana/gpt2 \
--dataset_name wikitext \
--dataset_config_name wikitext-2-raw-v1 \
--do_eval \
--output_dir /tmp/gpt2_xl_multi_node \
--per_device_eval_batch_size 8 \
--use_habana \
--use_lazy_mode