メインコンテンツへスキップ

モデルトレーニングの Runs 中に Traces をログ記録する

Workspaces内でのWeave Trace
モデルトレーニングの Runs 中に Weave の Traces をログ記録し、個人の Workspace で表示できるようになりました。 個人の Workspace は、UI 上でカスタマイズ可能なダッシュボードであり、モデルトレーニングの Runs に関する詳細な分析やデータ可視化を表示できます。 Workspace に Weave パネルを追加することで、モデルの Runs 中にログ記録されたトレースデータにアクセスして表示でき、トレーニング中のモデルのパフォーマンスについてより深い洞察を得るのに役立ちます。 例えば、LLM モデルをファインチューニングしており、W&B の Workspace でステップ 500 で精度が低下していることが示された場合、統合された Weave Traces を確認することで、モデルが評価基準に満たない冗長な回答を生成し始めたなど、何が起きたのかを正確に把握できます。

Weave パネルの使用

機械学習パイプライン内の 関数を @weave.op でデコレートする ことで、その実行情報を自動的にキャプチャし、個人の Workspace でアクセスできるようになります。 以下のスクリプトは、Weave Traces を W&B のトレーニング Runs と統合する方法の例です。各トレーニングステップでメトリクスを W&B にログ記録すると同時に、詳細な Weave Traces を作成する機械学習トレーニングループをシミュレートしています。関数に付けられた @weave.op デコレータは、入力、出力、および実行の詳細を自動的にキャプチャします。トレーニングループが wandb.log() でメトリクスをログ記録すると、Weave のトレース情報もプロジェクトにログ記録されます。
import wandb
import weave
import random

# W&BとWeaveの両方を同じプロジェクト名で初期化
project = "my-workspace-project"
weave.init(project)

@weave.op
def evaluate_model(model_state, epoch):
    # 評価メトリクスのシミュレーション
    accuracy = 0.7 + epoch * 0.02 + random.uniform(-0.05, 0.05)
    
    # 特定のモデルの振る舞いを追跡
    test_responses = {
        "conciseness_check": "Model generated 500 words for simple question",
        "accuracy_check": "Model answered 8/10 questions correctly",
        "hallucination_check": "No factual errors detected"
    }
    
    return {
        "accuracy": accuracy,
        "diagnostic_results": test_responses
    }

@weave.op
def training_step(epoch, lr):
    # トレーニングロジックのシミュレーション
    loss = 1.0 / (epoch + 1) + random.uniform(-0.1, 0.1)
    
    # トレース付きの評価
    eval_results = evaluate_model(f"checkpoint_{epoch}", epoch)
    
    return {
        "loss": loss,
        "accuracy": eval_results["accuracy"],
        "diagnostics": eval_results["diagnostic_results"]
    }

# トレーニングループ
with wandb.init(project=project, config={"lr": 0.01}) as run:
    for epoch in range(5):
        # Weaveトレーシングを実行しながらトレーニング
        results = training_step(epoch, run.config.lr)
        
        # W&Bへのログ記録 - これが統合ポイントとなります
        run.log({
            "epoch": epoch,
            "loss": results["loss"],
            "accuracy": results["accuracy"]
        })
このサンプルスクリプトを実行して、他の Run 情報とともにトレースがどのようにログ記録されるかを確認してください。 Run の実行中または終了後に Workspace でトレース情報を表示するには、Run の開始時にターミナルに表示されるリンク(例:wandb: 🚀 View run at https://wandb.ai/wandb/my-project/runs/<run-ID>)を開くか、UI から Workspace に移動します。 UI から Workspace に移動する方法:
  1. W&B UI を開き、 Projects タブをクリックします。プロジェクトの一覧が表示されます。
  2. リストから Run をログ記録したプロジェクトをクリックします。これにより Workspaces ページが開きます。
  3. Workspace を自動 Workspace として設定している場合、Run に関するデータ可視化と情報が自動的に表示されます。Run のトレースデータは、Workspace の Weave セクションにあります。手動 Workspace の場合は、 Add panels をクリックし、Add Panels メニューの Weave セクションから新しいパネルを選択して Weave パネルを追加できます。
Workspace の詳細については、 実験結果の表示 を参照してください。

Weave トレース内での W&B Artifacts の参照

Weave トレース内で W&B Artifacts (モデル、データセット、チェックポイントなど)を参照できます。これにより、Weave UI 上に Artifact の詳細ページへ直接移動できるクリック可能なリンクが作成され、特定のオペレーションでどのバージョンの Artifact が使用されたかを追跡するのに役立ちます。 例えば、モデルの 2 つのバージョン( v1v2 )をトレーニングした場合、そのモデルをクエリする際に v1 の Artifact 参照をトレースの属性として追加できます。これにより、どの Artifact バージョンが特定の出力を生成したかを正確にトレースできます。 Artifact をトレースに関連付けるには、 wandb-artifact:/// プレフィックスと Artifact のフルネームを連結して、 Artifact の URL を次の構文で構築します: wandb-artifact:///<full-name-of-artifact> 。その後、以下の 2 つの方法のいずれかで Weave に渡します。
  • 任意の属性(attribute)として渡す
  • Model の属性として渡す
Artifact のフルネームは、W&B UI の Artifact 詳細ページで確認できます。形式は <entity>/<project>/<artifact_name>:<version> です。W&B UI の Artifact 詳細ページからフルネームをコピーできます。

トレースの属性として追加する

Artifact をトレースの属性として追加するには、 weave.attributes() コンテキストマネージャーにキーと値のペアとして渡します。
import weave

weave.init("your-team-name/your-project-name")

@weave.op
def my_function(name: str):
    return f"Hello, {name}!"

# 任意のキー名と、値としてArtifactのURLを追加します
with weave.attributes({'artifact_id': 'wandb-artifact:///team-name/project-name/run-38m4t5ja-history:v0'}):
    result = my_function("World")

Model の属性として Artifact を追加する

Artifact を Model の属性として追加するには、モデルをインスタンス化する際に Artifact の URL を渡します。
Model クラスは現在、Weave Python SDK でのみサポートされています。
import weave

weave.init("your-team-name/your-project-name")

class MyModel(weave.Model):
    # Artifactの参照をモデルの属性として保存
    artifact_id: str
    temperature: float = 0.7
    
    @weave.op
    def predict(self, query: str) -> str:
        # ここにモデルの推論ロジックを記述
        return f"Response to: {query}"

# ArtifactのURLをモデルの属性として渡す
model = MyModel(
    artifact_id="wandb-artifact:///team-name/project-name/run-38m4t5ja-history:v0"
)

result = model.predict("Hello, World!")