30. Weights & Biasesで実験追跡!LLMファインチューニングを体系的に管理しよう

スポンサーリンク

30. Weights & Biasesで実験追跡!LLMファインチューニングを体系的に管理しよう

モデルをファインチューニングしました。素晴らしい成果です!

でも、ここで疑問があります。使用したハイパーパラメーターは何でしたか?LoRAランクは8でしたか、それとも16でしたか?学習率は1e-4でしたか、それとも1e-5でしたか?

来週、同じ改善を再現できますか?どの設定が最良の結果をもたらしたか覚えていますか?

追跡がないと、実験は混沌となります。無限のフォルダ、暗号的なファイル名、失われたメトリクス。これでは効率的に前進できませんよね。

ここで実験追跡が登場します!このレッスンでは、Weights & Biases(W&B)をファインチューニングパイプラインに統合して、実験に構造をもたらします。

ハイパーパラメーターのログ記録、リアルタイムでのメトリクスの可視化、複数の実行の整理方法を学び、情報に基づいたデータ駆動型の決定を下せるようになります。

最後には、反復可能で追跡可能なファインチューニングワークフローができます。RunPodで複数の実験を実行し、W&Bダッシュボードを通じて結果を分析し、タスクに最適なモデルを提供する設定を特定する準備が整いますよ!

実験追跡が重要な理由

複数のファインチューニング実験を実行し始めると、異なるLoRAランク、学習率、設定をテストします。試したこと、うまくいったこと、その理由を追跡するシステムが必要になるんです。

追跡がない世界

  • 情報の散乱:無限のフォルダ、暗号的なファイル名
  • メトリクスの喪失:どの実験が良かったか忘れる
  • 再現不可能:同じ結果を再び得られない
  • 非効率:何度も同じ失敗を繰り返す

W&Bを使用すれば

  • 自動ログ記録:すべてが自動的にログ記録され、クラウドに保存
  • 永続性:ノートブックを閉じ、GPUをシャットダウンしても、後ですべての実行を再訪できる
  • 比較可能:パラメーター、損失曲線、システム統計を簡単に比較
  • 再現可能:同じ設定で簡単に再実行

これがプロフェッショナルが効率的に反復し、作業を再現可能に保つ方法です!

W&Bの開始

Weights & Biases(W&B)は、機械学習のために構築された実験追跡プラットフォームです。研究と本番の両方で広く使用されています。個人の実践者からOpenAI、Hugging Face、主要なAIラボのチームまで!

W&Bの機能

1. 自動ログ記録
人気のあるトレーニングフレームワーク(Hugging Face Transformersなど)と統合して、手動作業なしでメトリクス、ハイパーパラメーター、システム情報をログ記録します。

2. ビジュアルダッシュボード
すべての実行がインタラクティブなダッシュボードに表示され、メトリクスを比較し、ハイパーパラメーターでフィルタリングし、パターンを発見できます。

3. アーティファクト追跡
メトリクスを超えて、モデルチェックポイント、データセット、評価結果をログ記録できます。すべてを特定の実験に結び付けます。

4. コラボレーション
ワークスペースをチームメイトと共有したり、ポートフォリオプロジェクトの公開レポートを生成したりできます。

W&Bは唯一の選択肢ではありません(TensorBoardやMLflowは代替案です)。でも、使いやすさと実行比較のための豊富な機能セットにより、LLM作業の標準となっています!

W&Bのセットアップ

ステップ1:アカウント作成

wandb.aiで無料アカウントを作成してください。APIキーが取得できます。手元に保管してください。

ステップ2:ライブラリをインストール

pip install -q wandb

ステップ3:ノートブックからログイン

import wandb
wandb.login()

プロンプトが表示されたらAPIキーを貼り付けてください。認証が完了し、実験を追跡する準備が整いました!

最小限の例:最初の実行をログ記録

Hugging Faceと統合する前に、W&Bが単独でどのように機能するか見てみましょう。

import wandb

wandb.init(
    project="llm-finetuning-demo",
    name="baseline-run",
    config={
        "learning_rate": 0.001,
        "lora_rank": 8,
        "epochs": 3
    }
)

for epoch in range(3):
    train_loss = 2.5 - (epoch * 0.4)
    val_loss = 2.7 - (epoch * 0.35)
    accuracy = 0.3 + (epoch * 0.12)
    wandb.log({"train_loss": train_loss, "val_loss": val_loss, "accuracy": accuracy})

wandb.finish()

実験をシミュレートしただけです。でも、ダッシュボードにはすべてのメトリクスと設定が自動的に表示されます!

次に、これを実際のトレーニングに接続しましょう。

パイプラインへのW&Bの統合

前回のレッスンのLlama 3.2ファインチューニングコードに戻ります。W&Bの追加は数行だけです!

ステップ1:W&Bを初期化

ノートブックの最初でW&Bを初期化します:

import wandb

wandb.init(
    project="samsum-fine-tuning",
    name="llama-1b-lora-r16-baseline",
    config={
        "model": "meta-llama/Llama-3.2-1B-Instruct",
        "lora_r": 16,
        "lora_alpha": 32,
        "learning_rate": 1e-4,
        "epochs": 2
    }
)

ステップ2:TrainingArgumentsに追加

TrainingArgumentsに1つのパラメーターを追加します:

from transformers import TrainingArguments

args = TrainingArguments(
    output_dir="./llama3_samsum_lora",
    num_train_epochs=2,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    learning_rate=1e-4,
    logging_steps=50,
    evaluation_strategy="epoch",
    save_strategy="epoch",
    bf16=True,
    optim="paged_adamw_8bit",
    report_to="wandb"  # 👈 これでW&Bログ記録が有効になります!
)

これだけです!trainer.train()を実行すると、W&Bはトレーニング損失、評価メトリクス、学習率スケジュール、システム情報を自動的にログ記録します。

ログ記録されるもの

W&Bを有効にしてトレーニングを実行すると、ダッシュボードに以下が表示されます:

1. ハイパーパラメーター
config dictのすべて
– すべてのTrainingArguments

2. トレーニングメトリクス
– 損失、学習率、エポック、ステップカウント
– リアルタイムで更新!

3. 評価メトリクス
– eval関数が計算するもの(精度、ROUGEスコアなど)

4. システム情報
– GPUタイプ、メモリ使用量
– Pythonバージョン、ライブラリバージョン

5. コード
– W&Bはノートブックまたはスクリプトを保存できる
– 各実行を生成したコードを正確に把握

ダッシュボードの使い方

W&Bダッシュボードは実験の司令部です。

実行の比較

複数の実験を実行したら、ダッシュボードで比較します:

  1. プロジェクトを開く:”samsum-fine-tuning”プロジェクトを選択
  2. 実行を選択:比較したい実行にチェック
  3. メトリクスを表示:損失曲線、精度グラフが並んで表示
  4. ハイパーパラメーターを比較:どの設定が良かったか一目瞭然

フィルタリングとソート

  • LoRAランクが8の実行だけ表示
  • ROUGEスコアが高い順にソート
  • 学習率が1e-4の実行をハイライト

可視化

  • 損失曲線:トレーニングがどう進んだか
  • 学習率スケジュール:どう変化したか
  • GPUメモリ使用量:リソースの効率性

すべてインタラクティブで、クリック一つで深掘りできます!

実践例:複数の実験を実行

実際の使用例を見てみましょう。

実験1:ベースライン(LoRAランク8)

wandb.init(
    project="samsum-fine-tuning",
    name="llama-1b-lora-r8",
    config={"lora_r": 8, "lora_alpha": 16, "learning_rate": 2e-4}
)
# ... トレーニングコード ...

実験2:ランクを増やす(LoRAランク16)

wandb.init(
    project="samsum-fine-tuning",
    name="llama-1b-lora-r16",
    config={"lora_r": 16, "lora_alpha": 32, "learning_rate": 2e-4}
)
# ... トレーニングコード ...

実験3:学習率を変える

wandb.init(
    project="samsum-fine-tuning",
    name="llama-1b-lora-r8-lr1e-4",
    config={"lora_r": 8, "lora_alpha": 16, "learning_rate": 1e-4}
)
# ... トレーニングコード ...

すべての実験がダッシュボードに並び、簡単に比較できます!

結果の分析

ダッシュボードで比較すると、こんなことがわかります:

  • 実験2(ランク16)が最高のROUGEスコアを達成
  • でも実験1(ランク8)はトレーニングが2倍速い
  • 実験3は損失が最も安定している

これらの洞察から、次の実験の方向性を決められます!

ベストプラクティス

1. 一貫した命名規則

# 良い例
name="llama-1b-lora-r8-lr2e-4-epoch3"

# 悪い例
name="test1"

後で見返したときにわかりやすい名前を付けましょう。

2. 詳細な設定

config={
    "model": "meta-llama/Llama-3.2-1B-Instruct",
    "dataset": "samsum",
    "lora_r": 8,
    "lora_alpha": 16,
    "learning_rate": 2e-4,
    "batch_size": 4,
    "gradient_accumulation_steps": 4,
    "epochs": 2,
    "optimizer": "paged_adamw_8bit",
    "note": "Baseline experiment"
}

後で感謝するはずです!

3. タグを使用

wandb.init(
    project="samsum-fine-tuning",
    name="llama-1b-lora-r8",
    tags=["baseline", "lora-r8", "production-candidate"]
)

タグで整理すると、後で探しやすくなります。

4. ノートを追加

実験中に気づいたことをメモ:

wandb.log({"note": "Training was unstable in the last 10% of steps"})

5. 定期的にレビュー

週に一度、ダッシュボードをレビューして:
– どの実験が良かったか
– 何が学べたか
– 次に試すべきこと

まとめ

今回は、Weights & Biasesで実験追跡システムを構築しました!

重要なポイントを振り返りましょう:

1. 実験追跡の重要性
– 再現可能性、効率性、体系的な改善
– プロフェッショナルな開発に不可欠

2. W&Bのセットアップ
– 無料アカウント作成とAPIキー取得
– 数行のコードで統合完了

3. 自動ログ記録
– ハイパーパラメーター、メトリクス、システム情報
– すべて自動的にクラウドに保存

4. ダッシュボードの活用
– 実行の比較、フィルタリング、可視化
– インタラクティブで直感的

5. ベストプラクティス
– 一貫した命名規則
– 詳細な設定記録
– 定期的なレビュー

これで、あなたは体系的に実験を管理できるプロフェッショナルなMLエンジニアです!

次のレッスンでは、このシステムを使ってLoRAハイパーパラメーターのチューニングを行い、最適な設定を見つけます。データ駆動型の最適化、楽しみですね!

コメント

タイトルとURLをコピーしました