Transformers documentation

Accelerate

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Accelerate

Accelerateは、FSDPやDeepSpeedなどの分散学習バックエンド向けの統一インターフェースを提供します。環境(GPUの台数、分散バックエンド、混合精度など)を検出し、1 GPUでDDPを使用する場合でも、8 GPUでFSDPを使用する場合でも、学習を自動的に設定します。

Accelerate は、モデルを適切な分散ラッパーでラップし、正しいデバイスに移動させ、互換性のあるオプティマイザーを作成します。トレーニング中、Accelerate は独自の backward メソッドを使用して、混合精度の勾配スケーリングを処理します。Trainer は適切な Accelerate API を呼び出し、すべての分散メカニクスを Accelerate に委譲します。

Accelerateは、Accelerate設定ファイルまたはTrainingArgumentsのいずれかを使用して、Trainerに設定できます。

Accelerate設定ファイル

accelerate config コマンドを実行し、ハードウェアや学習環境に関する質問に答えてください。これにより、キャッシュにdefault_config.yamlファイルが作成されます。以下の例はFSDP用です。

compute_environment: LOCAL_MACHINE
distributed_type: FSDP
fsdp_config:
  fsdp_version: 2
  fsdp_reshard_after_forward: true
  fsdp_cpu_offload: false
  fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP
  fsdp_cpu_ram_efficient_loading: true
  fsdp_activation_checkpointing: false
  fsdp_state_dict_type: SHARDED_STATE_DICT
  fsdp_transformer_layer_cls_to_wrap: LlamaDecoderLayer
mixed_precision: bf16
num_machines: 1
num_processes: 4

accelerate launch を Trainer ベースのスクリプトで実行すると、Accelerate は設定ファイルを読み取ってトレーニングを設定します。fsdp_config と deepspeed の引数は、Accelerate の設定ファイルが同じ設定をカバーするため不要です。

accelerate launch train.py

accelerator_config は、専用のトップレベル引数を持たない設定を受け入れます。例えば、non_blocking=True を dataloader_pin_memory() と一緒に設定することで、データ転送と計算をオーバーラップさせ、GPUのスループットを向上させることができます。

from transformers import TrainingArguments

TrainingArguments(
    ...,
    dataloader_pin_memory=True,
    accelerator_config={
        "non_blocking": True,
    },
)

TrainingArguments

バックエンド固有の設定をTrainingArgumentsに渡します。create_accelerator_and_postprocess()メソッドは設定を読み取り、トレーニングを設定します。

FSDP
DeepSpeed
DDP

~TrainingArguments.fsdp_config に JSON 設定ファイルまたは dict を渡します。完全なガイドと設定の参照については、FSDP をご覧ください。

from transformers import TrainingArguments

TrainingArguments(
    ...,
    fsdp=True,
    fsdp_config="path/to/fsdp.json",
)

次のステップ

  • モデルが1つのGPUに収まる場合のデータ並列学習については、DDPを参照してください。
  • パラメータ、勾配、オプティマイザ状態をGPU間でシャーディングする方法については、FSDPを参照してください。
  • ZeROの最適化とオフロードについては、DeepSpeedを参照してください。
Update on GitHub