Weights & Biases Tutorial: Tracking LLM Fine-Tuning Experiments

スポンサーリンク

Weights & Biases Tutorial: Tracking LLM Fine-Tuning Experiments

  • Experiment Tracking
  • Fine-Tuning LLMs
  • Hyperparameter Tuning
  • Learning Rate
  • LoRA Configuration
  • MLOps
  • Model Comparison
  • Model Optimization
  • Reproducibility
  • Training Metrics
  • W&B Integration
  • Weights & Biases

🏠
Home – All Lessons

⬅️
Previous – Fine-Tuning LLMs on RunPod

➡️
Next – LoRA Hyperparameter Tuning

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

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

このレッスンでは、Weights & Biases (W&B)をファインチューニングパイプラインに統合して、実験に構造をもたらします。
ハイパーパラメーターのログ記録、リアルタイムでのメトリクスの可視化、複数の実行の整理方法を学び、情報に基づいたデータ駆動型の決定を下せるようになります。

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

実験追跡が重要な理由

モデルをファインチューニングしました。素晴らしい。
しかし、来週同じ改善を再現できますか? どの学習率やLoRAランクが最良の結果をもたらしたか覚えていますか?

追跡がないと、実験は混沌となります — 無限のフォルダ、暗号的なファイル名、失われたメトリクス。
W&Bを使用すれば、すべてが自動的にログ記録され、クラウドに保存されます。

ノートブックを閉じ、GPUをシャットダウンしても、後ですべての実行を再訪できます — パラメーター、損失曲線、システム統計さえも。

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

W&Bの開始

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

その機能は以下の通りです:

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

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

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

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

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

W&Bのセットアップ

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

ライブラリをインストール:

!pip install -q wandb

ノートブックからログインします:

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の追加は数行だけです。

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

import wandb

wandb.init(
    project="gsm8k-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
    }
)

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

TrainingArguments

args = TrainingArguments(
    output_dir="./llama3_gsm8k_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はトレーニング損失、評価メトリクス、学習率スケジュール、システム情報を自動的にログ記録します。

trainer.train()

ログ記録されるもの

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

ハイパーパラメーター: config dictのすべて、加えてすべてのTrainingArguments。
トレーニングメトリクス: 損失、学習率、エポック、ステップカウント — リアルタイムで更新。
評価メトリクス: eval関数が計算するもの(精度、パープレキシティなど)。
システム情報: GPUタイプ、メモリ使用量、Pythonバージョン、ライブラリバージョン。
コード: W&Bはノートブックまたはスクリプトを保存できるため、各実行を生成したコードを正確に把握できます。

これらを手動でログ記録する必要はありません。report_to=”wandb”を設定すれば自動的に行われます。

report_to="wandb"

いくつかのターゲット実験の計画

W&Bの動作がわかったので、次の2つのレッスンでRunPodで実行する実験を計画しましょう。
Colabでは実行しません — 今はテストするものを定義するだけです。

ファインチューニングの結果に最も影響を与える3つの主要なハイパーパラメーターを探索します:

実験1: LoRAランク

他のパラメーターを一定に保ちながら、r = 4、8、16を試します。
これは、トレーニング可能なアダプターパラメーターの数が学習と汎化にどのように影響するかを探索します。

r = 4

目標: ランクを増やすと一貫して精度が向上するか、またはある時点で収穫逓減が現れるかを確認する。

実験2: 学習率

実験1から最良のLoRAランクを使用しながら、1e-4と1e-5を試します。
これは、学習率が収束速度と安定性をどのように制御するかを示します。

1e-5

目標: どの学習率がよりスムーズなトレーニングとより良い最終精度を提供するかを観察する。

実験3: ターゲットモジュール

target_modulesの2つの設定を比較します:

target_modules
– [“q_proj”, “v_proj”] — クエリと値の投影のみをトレーニング(ベースライン)。
["q_proj", "v_proj"]
– [“q_proj”, “k_proj”, “v_proj”, “o_proj”] — すべてのアテンションブロック投影をトレーニング。
["q_proj", "k_proj", "v_proj", "o_proj"]

目標: 完全なアテンションブロックのファインチューニングが、より軽いセットアップに比べて意味のある精度向上をもたらすかを判断する。

これらを合わせると、小規模で構造化された実験セットが作成されます — 合計6〜8回の実行で、RunPodで管理可能でありながら、明確なパフォーマンスパターンを明らかにします。

これらの実験をすぐに起動し、W&Bで並べて追跡します。

次のステップ

プロフェッショナルグレードの実験追跡ワークフローを構築しました — 構造化され、整理され、スケールの準備ができています。

次に、これをすべて実行に移します。
RunPodでファインチューニング実験を実行し、Weights & Biasesで監視し、結果を並べて分析して、どの設定が本当に最高のパフォーマンスを発揮するかを確認します。

これは、実験が洞察に変わるところです — そして、タスクに最適なモデルを特定します。

  • From One Run to Systematic Experimentation

コメント

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