0Pricing
Learn AI with Python · レッスン

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.py

Accelerateを使う理由

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. DataParallelによるマルチGPU学習
  2. DistributedDataParallel(DDP)
  3. AMPによる混合精度学習
  4. Hugging Face Accelerateによる効率的な学習
← Learn AI with Pythonに戻る