Transformers documentation

Accelerate

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
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