Transformers documentation
Accelerate
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: 4accelerate launch を Trainer ベースのスクリプトで実行すると、Accelerate は設定ファイルを読み取ってトレーニングを設定します。fsdp_config と deepspeed の引数は、Accelerate の設定ファイルが同じ設定をカバーするため不要です。
accelerate launch train.pyaccelerator_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()メソッドは設定を読み取り、トレーニングを設定します。
~TrainingArguments.fsdp_config に JSON 設定ファイルまたは dict を渡します。完全なガイドと設定の参照については、FSDP をご覧ください。
from transformers import TrainingArguments
TrainingArguments(
...,
fsdp=True,
fsdp_config="path/to/fsdp.json",
)~TrainingArguments.deepspeed に JSON 設定ファイルまたは dict を渡します。完全なガイドと設定リファレンスは DeepSpeed を参照してください。
from transformers import TrainingArguments
TrainingArguments(
...,
deepspeed="path/to/ds_config.json",
)DDPはTrainingArgumentsのフィールドを介して直接設定されます。詳細はDDPを参照してください。
from transformers import TrainingArguments
TrainingArguments(
...,
ddp_backend="nccl",
ddp_find_unused_parameters=False,
ddp_bucket_cap_mb=25,
ddp_timeout=1800,
)次のステップ
- モデルが1つのGPUに収まる場合のデータ並列学習については、DDPを参照してください。
- パラメータ、勾配、オプティマイザ状態をGPU間でシャーディングする方法については、FSDPを参照してください。
- ZeROの最適化とオフロードについては、DeepSpeedを参照してください。