Optimum 文档
面向HPU的DeepSpeed
并获得增强的文档体验
开始使用
面向HPU的DeepSpeed
DeepSpeed 通过 ZeRO 论文 中描述的各种优化,让您能够在 HPU 上适应并训练更大的模型。特别是,您可以使用以下两种经过验证与 Gaudi 完全兼容的 ZeRO 配置:
- ZeRO-1:在进程之间划分优化器状态。
- ZeRO-2:在进程之间划分优化器状态 + 梯度。
- ZeRO-3:ZeRO-2 + 完整的模型状态在进程之间划分。
这些配置与Intel Gaudi混合精度完全兼容,因此可用于以 *bf16* 精度训练您的模型。
您可以在此处找到有关DeepSpeed Gaudi集成的更多信息。
设置
要在Gaudi上使用DeepSpeed,您需要安装用于Intel Gaudi的Optimum和用于Intel Gaudi的DeepSpeed分支,通过
pip install optimum[habana] pip install git+https://github.com/HabanaAI/DeepSpeed.git@1.21.0
将DeepSpeed与Intel Gaudi的Optimum结合使用
GaudiTrainer 允许像 Transformers Trainer 一样轻松使用 DeepSpeed。这可以通过 3 个步骤完成
- 必须定义DeepSpeed配置。
- `deepspeed` 训练参数允许指定 DeepSpeed 配置的路径。
- 必须使用 `deepspeed` 启动器来运行您的脚本。
这些步骤将在下文详细说明。关于如何将 DeepSpeed 与 Transformers Trainer 结合使用的全面指南也在此处提供:此处。
DeepSpeed 配置
要使用的DeepSpeed配置通过JSON文件传递,使您能够选择要应用的优化。这是一个应用ZeRO-2优化和 *bf16* 精度的示例
{
"steps_per_print": 64,
"train_batch_size": "auto",
"train_micro_batch_size_per_gpu": "auto",
"gradient_accumulation_steps": "auto",
"bf16": {
"enabled": true
},
"gradient_clipping": 1.0,
"zero_optimization": {
"stage": 2,
"overlap_comm": false,
"reduce_scatter": false,
"contiguous_gradients": false
}
}
特殊值 "auto"
允许自动获取正确或最有效的值。您也可以自行指定值,但如果这样做,应注意不要与训练参数冲突。强烈建议阅读 Transformers 文档中的 此部分,以完全理解其工作原理。
Intel 在此处 提供了其他 HPU 配置示例。
Transformers 文档 很好地解释了如何从头开始编写配置。关于所有配置可能性的更完整描述可在 此处 获得。
DeepSpeed 训练参数
要使用 DeepSpeed,您必须在 GaudiTrainingArguments
实例中指定 deepspeed=path_to_my_deepspeed_configuration
training_args = GaudiTrainingArguments(
# my usual training arguments...
use_habana=True,
use_lazy_mode=True,
gaudi_config_name=path_to_my_gaudi_config,
deepspeed=path_to_my_deepspeed_config,
)
此参数既表示应使用 DeepSpeed,又指向您的 DeepSpeed 配置。
启动脚本
最后,有两种可能的方式来启动您的脚本:
- 使用 gaudi_spawn.py 脚本
python gaudi_spawn.py \ --world_size number_of_hpu_you_have --use_deepspeed \ path_to_script.py --args1 --args2 ... --argsN \ --deepspeed path_to_deepspeed_config
其中 --argX
是要使用 DeepSpeed 运行的脚本的参数。
- 直接在代码中使用
DistributedRunner
from optimum.habana.distributed import DistributedRunner
from optimum.utils import logging
world_size=8 # Number of HPUs to use (1 or 8)
# define distributed runner
distributed_runner = DistributedRunner(
command_list=["scripts/train.py --args1 --args2 ... --argsN --deepspeed path_to_deepspeed_config"],
world_size=world_size,
use_deepspeed=True,
)
# start job
ret_code = distributed_runner.run()
您应该在Gaudi配置中设置 "use_fused_adam": false
,因为它目前与DeepSpeed不兼容。