Optimum 文件

面向HPU的DeepSpeed

您正在檢視的是需要從原始碼安裝。如果您想透過常規pip安裝,請檢視最新的穩定版本(v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

面向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 個步驟完成

  1. 必須定義DeepSpeed配置。
  2. `deepspeed` 訓練引數允許指定 DeepSpeed 配置的路徑。
  3. 必須使用 `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 配置。

啟動指令碼

最後,有兩種可能的方式來啟動您的指令碼:

  1. 使用 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 執行的指令碼的引數。

  1. 直接在程式碼中使用 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不相容。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.