Hugging Face Accelerateによる効率的な学習
accelerate.Accelerator、デバイスに依存しない学習、勾配蓄積、DeepSpeedとの統合について学習します。
「Hugging Face Accelerateによる効率的な学習」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
定型コードの問題
デバイスの配置、DDPの設定、混合精度の処理を手作業で記述すると、コードが冗長になり、エラーも発生しやすくなります。Hugging Face Accelerateはこの定型コードを取り除きます。同じスクリプトを、コードを変更せずにCPU、1つのGPU、複数のGPU、さらにはTPUでも実行できます。
Acceleratorオブジェクト
このライブラリの中心となるのがAcceleratorです。スクリプトの先頭で1つ作成すると、環境を検出し、デバイス、分散処理の設定、精度を自動的に管理します。
from accelerate import Accelerator
accelerator = Accelerator()
device = accelerator.deviceオブジェクトの準備
accelerator.prepareにモデル、オプティマイザ、データローダーを渡すと、現在の環境に合わせて設定されたオブジェクトが返されます。適切なデバイスへの移動、必要に応じたDDPによるラップ、プロセス間でのデータローダーの分割が行われます。
model, optimizer, dataloader = accelerator.prepare(
model, optimizer, dataloader
)prepareの処理内容
内部では、prepareが本来手動で行う処理を担当します。デバイスへの転送、DDPによるラップ、分散サンプリング、混合精度の組み込みなどです。1回の呼び出しで、何十行ものコードを置き換えられます。
手動の.to(device)が不要
準備済みのデータローダーは、すでに正しいデバイス上にあるバッチを返します。そのため、手動でx.to(device)を呼び出す必要がなくなります。同じループをどの環境でも使用できます。
for batch in dataloader:
inputs, labels = batch # already on device
outputs = model(inputs)
loss = loss_fn(outputs, labels)accelerator.backward
loss.backward()の代わりに、accelerator.backward(loss)を呼び出します。これにより、勾配スケーリングを含め、分散学習や混合精度学習に適した処理が自動的に選択されます。
optimizer.zero_grad()
accelerator.backward(loss)
optimizer.step()完全な学習ループ
Accelerateを使った完全なループは、驚くほど簡潔で、デバイスに依存しません。
accelerator = Accelerator()
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
for epoch in range(epochs):
for batch in dataloader:
inputs, labels = batch
outputs = model(inputs)
loss = loss_fn(outputs, labels)
optimizer.zero_grad()
accelerator.backward(loss)
optimizer.step()設定による混合精度
コードを変更せず、Acceleratorの構築時またはCLI設定でFP16/BF16を有効にできます。するとAccelerateがautocastと勾配スケーリングを自動的に管理します。
accelerator = Accelerator(mixed_precision="fp16")保存時のunwrap_model
prepareの後、モデルはDDPでラップされている場合があります。保存する前にaccelerator.unwrap_model(model)を呼び出すと、基盤となる通常のモデルを取得できます。これにより、チェックポイントをクリーンで移植しやすい形で保存できます。
unwrapped = accelerator.unwrap_model(model)
accelerator.save(unwrapped.state_dict(), "model.pt")デバイス間での起動
accelerate launchコマンドで同じスクリプトを実行すると、設定(プロセス数、マシン数、精度)が読み込まれ、プロセスが起動します。単一GPU、マルチGPU、マルチノードのケースが透過的に処理されます。
accelerate config # one-time interactive setup
accelerate launch train.pyAccelerateを使う理由
Accelerateは透過的なマルチデバイス処理を提供します。すっきりした1つのループを書くだけで、コードを書き直さずにノートパソコンのCPUからマルチノードGPUクラスタまで拡張できます。すでに学んだDDPとAMPの概念を基盤としながら、必要な処理を内部に隠してくれます。
クイックチェック
Accelerateの知識を確認しましょう。
まとめ
Hugging Face Accelerateを使った効率的なトレーニングについて学びました。
Accelerator()が環境を検出して管理しますacc.prepare(model, optimizer, dataloader)が現在のデバイス向けにすべてを接続しますacc.backward(loss)が分散バックプロパゲーションと混合精度バックプロパゲーションを処理しますacc.unwrap_modelで保存用のクリーンなモデルを取得できます- 1つのスクリプトをCPUからマルチノードGPUまで透過的に拡張できます
よくある質問
「Hugging Face Accelerateによる効率的な学習」レッスンは無料ですか?
はい。「Hugging Face Accelerateによる効率的な学習」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「Hugging Face Accelerateによる効率的な学習」で何を学びますか?
accelerate.Accelerator、デバイスに依存しない学習、勾配蓄積、DeepSpeedとの統合について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Hugging Face Accelerateによる効率的な学習」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DataParallelによるマルチGPU学習
- DistributedDataParallel(DDP)
- AMPによる混合精度学習
- Hugging Face Accelerateによる効率的な学習