huggingface-accelerate について
huggingface-accelerateは、少ないコード変更でPyTorchの分散学習を行う開発者向けのリファレンススキルです。複数のバックエンド、混合精度、勾配累積を扱います。
主な機能
- 01PyTorch分散学習の簡素化
- 02DDP、DeepSpeed、FSDPの設定
- 03混合精度の有効化
- 04勾配累積
- 05コマンドラインから学習を起動
活用シーン
- 01単一GPU用スクリプトを複数GPUで実行
- 02マルチノード学習の設定
- 03学習時のメモリー要件を削減
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ orchestra-research/ ai-research-skills --skill huggingface-accelerateインストール後、Claude Code で/huggingface-accelerateを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/custom-plugins.mdmegatron-integration.mdperformance.md詳細
HuggingFace Accelerate - 統合分散学習
クイックスタート
Accelerate を使うと、分散学習を 4 行のコードで実現できます。
インストール:
pip install accelerate
PyTorch スクリプトの変換(4 行):
import torch
+ from accelerate import Accelerator
+ accelerator = Accelerator()
model = torch.nn.Transformer()
optimizer = torch.optim.Adam(model.parameters())
dataloader = torch.utils.data.DataLoader(dataset)
+ model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
for batch in dataloader:
optimizer.zero_grad()
loss = model(batch)
- loss.backward()
+ accelerator.backward(loss)
optimizer.step()
実行(単一コマンド):
accelerate launch train.py
よくあるワークフロー
ワークフロー 1: 単一 GPU からマルチ GPU へ
元のスクリプト:
# train.py
import torch
model = torch.nn.Linear(10, 2).to('cuda')
optimizer = torch.optim.Adam(model.parameters())
dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)
for epoch in range(10):
for batch in dataloader:
batch = batch.to('cuda')
optimizer.zero_grad()
loss = model(batch).mean()
loss.backward()
optimizer.step()
Accelerate を使用(4 行追加):
# train.py
import torch
from accelerate import Accelerator # +1
accelerator = Accelerator() # +2
model = torch.nn.Linear(10, 2)
optimizer = torch.optim.Adam(model.parameters())
dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader) # +3
for epoch in range(10):
for batch in dataloader:
# No .to('cuda') needed - automatic!
optimizer.zero_grad()
loss = model(batch).mean()
accelerator.backward(loss) # +4
optimizer.step()
設定(対話形式):
accelerate config
質問項目:
- どのマシンですか?(単一 GPU/マルチ GPU/TPU/CPU)
- マシンは何台ですか?(1)
- 混合精度ですか?(no/fp16/bf16/fp8)
- DeepSpeed を使用しますか?(no/yes)
起動(どの環境でも動作):
# Single GPU
accelerate launch train.py
# Multi-GPU (8 GPUs)
accelerate launch --multi_gpu --num_processes 8 train.py
# Multi-node
accelerate launch --multi_gpu --num_processes 16 \
--num_machines 2 --machine_rank 0 \
--main_process_ip $MASTER_ADDR \
train.py
ワークフロー 2: 混合精度学習
FP16/BF16 を有効化:
from accelerate import Accelerator
# FP16 (with gradient scaling)
accelerator = Accelerator(mixed_precision='fp16')
# BF16 (no scaling, more stable)
accelerator = Accelerator(mixed_precision='bf16')
# FP8 (H100+)
accelerator = Accelerator(mixed_precision='fp8')
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
# Everything else is automatic!
for batch in dataloader:
with accelerator.autocast(): # Optional, done automatically
loss = model(batch)
accelerator.backward(loss)
ワークフロー 3: DeepSpeed ZeRO 連携
DeepSpeed ZeRO-2 を有効化:
from accelerate import Accelerator
accelerator = Accelerator(
mixed_precision='bf16',
deepspeed_plugin={
"zero_stage": 2, # ZeRO-2
"offload_optimizer": False,
"gradient_accumulation_steps": 4
}
)
# Same code as before!
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
または設定ファイルで指定:
accelerate config
# Select: DeepSpeed → ZeRO-2
deepspeed_config.json:
{
"fp16": {"enabled": false},
"bf16": {"enabled": true},
"zero_optimization": {
"stage": 2,
"offload_optimizer": {"device": "cpu"},
"allgather_bucket_size": 5e8,
"reduce_bucket_size": 5e8
}
}
起動:
accelerate launch --config_file deepspeed_config.json train.py
ワークフロー 4: FSDP(Fully Sharded Data Parallel)
FSDP を有効化:
from accelerate import Accelerator, FullyShardedDataParallelPlugin
fsdp_plugin = FullyShardedDataParallelPlugin(
sharding_strategy="FULL_SHARD", # ZeRO-3 equivalent
auto_wrap_policy="TRANSFORMER_AUTO_WRAP",
cpu_offload=False
)
accelerator = Accelerator(
mixed_precision='bf16',
fsdp_plugin=fsdp_plugin
)
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
または設定ファイルで指定:
accelerate config
# Select: FSDP → Full Shard → No CPU Offload
ワークフロー 5: 勾配累積
勾配を累積:
from accelerate import Accelerator
accelerator = Accelerator(gradient_accumulation_steps=4)
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
for batch in dataloader:
with accelerator.accumulate(model): # Handles accumulation
optimizer.zero_grad()
loss = model(batch)
accelerator.backward(loss)
optimizer.step()
実効バッチサイズ: batch_size * num_gpus * gradient_accumulation_steps
使い分けと代替手段
Accelerate を使うべき場合:
- 最もシンプルな分散学習を行いたい
- どのハードウェアでも単一のスクリプトを使いたい
- HuggingFace エコシステムを利用している
- 柔軟性を求めている(DDP/DeepSpeed/FSDP/Megatron)
- 素早いプロトタイピングが必要
主な利点:
- 4 行: 最小限のコード変更
- 統一 API: DDP、DeepSpeed、FSDP、Megatron で同じコード
- 自動化: デバイス配置、混合精度、シャーディング
- 対話型設定: 手動でのランチャー設定が不要
- 単一の起動方法: どこでも動作
代わりに使うべきもの:
- PyTorch Lightning: コールバックや高レベルの抽象化が必要な場合
- Ray Train: マルチノードのオーケストレーションやハイパーパラメータチューニングが必要な場合
- DeepSpeed: API を直接制御したい場合や高度な機能が必要な場合
- Raw DDP: 最大限の制御と最小限の抽象化が必要な場合
よくある問題
問題: デバイス配置が誤っている
手動でデバイスへ移動しないでください:
# WRONG
batch = batch.to('cuda')
# CORRECT
# Accelerate handles it automatically after prepare()
問題: 勾配累積が機能しない
コンテキストマネージャーを使用してください:
# CORRECT
with accelerator.accumulate(model):
optimizer.zero_grad()
accelerator.backward(loss)
optimizer.step()
問題: 分散環境でのチェックポイント保存
Accelerator のメソッドを使用してください:
# Save only on main process
if accelerator.is_main_process:
accelerator.save_state('checkpoint/')
# Load on all processes
accelerator.load_state('checkpoint/')
問題: FSDP で結果が異なる
同じ乱数シードを設定してください:
from accelerate.utils import set_seed
set_seed(42)
応用トピック
Megatron 連携: テンソル並列、パイプライン並列、シーケンス並列の設定については references/megatron-integration.md を参照してください。
カスタムプラグイン: カスタム分散プラグインの作成と高度な設定については references/custom-plugins.md を参照してください。
パフォーマンスチューニング: プロファイリング、メモリ最適化、ベストプラクティスについては references/performance.md を参照してください。
ハードウェア要件
- CPU: 動作します(低速)
- 単一 GPU: 動作します
- マルチ GPU: DDP(デフォルト)、DeepSpeed、または FSDP
- マルチノード: DDP、DeepSpeed、FSDP、Megatron
- TPU: サポート
- Apple MPS: サポート
ランチャーの要件:
- DDP:
torch.distributed.run(組み込み) - DeepSpeed:
deepspeed(pip install deepspeed) - FSDP: PyTorch 1.12 以降(組み込み)
- Megatron: カスタムセットアップ
リソース
- ドキュメント: https://huggingface.co/docs/accelerate
- GitHub: https://github.com/huggingface/accelerate
- バージョン: 1.11.0 以降
- チュートリアル: "Accelerate your scripts"
- サンプル: https://github.com/huggingface/accelerate/tree/main/examples
- 利用プロジェクト: HuggingFace Transformers、TRL、PEFT、その他すべての HF ライブラリ