Acceleratorによるモデル評価

PyTorch による効率的な AI モデルトレーニング

Dennis Lee

Data Engineer, Amazon

評価モードにする理由

  • 訓練モード
    • ドロップアウト:ニューロンをゼロに設定する
    • バッチ正規化

ドロップアウトとバッチ正規化 入力層・隠れ層・出力層を持つニューラルネットワークの図。隠れ層にドロップアウトが適用され過学習を防ぐ。各層の活性化前にバッチ正規化が行われる。

PyTorch による効率的な AI モデルトレーニング

評価モードにする理由

  • 訓練モード
    • ドロップアウト:ニューロンをゼロに設定する
    • バッチ正規化
  • 評価モードではこれらのレイヤーが無効になる
  • model.eval() で評価モードに切り替える

ドロップアウトとバッチ正規化 入力層・隠れ層・出力層を持つニューラルネットワークの図。隠れ層にドロップアウトが適用され過学習を防ぐ。各層の活性化前にバッチ正規化が行われる。

PyTorch による効率的な AI モデルトレーニング

torch.no_grad()による勾配の無効化

  • 訓練には勾配の計算が必要である
  • torch.no_grad() で勾配を無効にする
  • model.evaltorch.no_grad を両方呼び出す:
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

誤差逆伝播における勾配計算 各層で勾配を計算して重みを更新する誤差逆伝播のニューラルネットワーク図。出力層から隠れ層へ誤差が逆伝播し、勾配降下法で重みが更新される様子を示す。

PyTorch による効率的な AI モデルトレーニング

検証データセットの準備

  • MRPCデータセットの検証分割を読み込む
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • 検証データセットをトークナイズする
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
PyTorch による効率的な AI モデルトレーニング

エポックの構造:訓練ループと評価ループ

  • エポックごとに訓練・検証データセットを反復処理する
  • まず訓練モードでモデルを実行する
  • 次に評価モードで実行し、評価後にメトリクスを記録する
for epoch in range(num_epochs):

model.train() for step, batch in enumerate(train_dataloader): # Perform training step
model.eval() for step, batch in enumerate(eval_dataloader): # Perform evaluation step
# Log evaluation metrics
PyTorch による効率的な AI モデルトレーニング

評価ループの内部

metric = evaluate.load("glue", "mrpc")
model.eval()
for step, batch in enumerate(eval_dataloader):

with torch.no_grad(): outputs = model(**batch) predictions = outputs.logits.argmax(dim=-1)
predictions, references = accelerator.gather_for_metrics((predictions, batch["labels"]))
metric.add_batch(predictions=predictions, references=references)
eval_metric = metric.compute() print(f"Eval metrics: \n{eval_metric}")
Eval metrics: 
{'accuracy': 0.81, 'f1': 0.77}
PyTorch による効率的な AI モデルトレーニング

評価後のメトリクス記録

  • トラッキングツール:メトリクスを記録するノートブック(例:TensorBoard、MLflow)
  • log_with:すべての実験トラッキングツールを使用する
  • .init_trackers():トラッキングツールを初期化する
  • .log()accuracyf1epoch を追跡する
  • .end_training():トラッキングを終了する
accelerator = Accelerator(project_dir=".",
                          log_with="all")

accelerator.init_trackers("my_project")
for epoch in range(num_epochs): # Training loop is here # Evaluation loop is here accelerator.log({
"accuracy": eval_metric["accuracy"], "f1": eval_metric["f1"],
}, step=epoch)
accelerator.end_training()
PyTorch による効率的な AI モデルトレーニング

さあ、練習しましょう!

PyTorch による効率的な AI モデルトレーニング

Preparing Video For Download...