メインコンテンツへスキップ
W&B Report and Workspace API はパブリックプレビューです。
アプリの UI でインタラクティブに、または W&B SDK を使ってプログラムからレポートを編集します。 Reports は ブロック で構成されています。ブロックはレポートの本文を構成します。これらのブロックには、テキスト、画像、埋め込み可視化、Experiments や run のプロット、パネルグリッドを追加できます。 パネルグリッド は、パネルと run set を保持する特定の種類のブロックです。Run set は、W&B のプロジェクトにログされた runs のコレクションです。パネルは run set データを可視化したものです。
保存済みの Workspace view を作成してカスタマイズする方法を step ごとに示した例については、Programmatic workspaces notebook を参照してください。
レポートをプログラムから編集する場合は、W&B Python SDK に加えて W&B Report and Workspace API wandb-workspaces もインストールされていることを確認してください。
pip install wandb wandb-workspaces

プロットを追加

各パネルグリッドには、一連の run セットと一連のパネルがあります。セクションの下部にある run セットは、グリッド内の各パネルに表示されるデータを制御します。別の run セットからデータを取得するグラフを追加したい場合は、新しいパネルグリッドを作成します。
レポート内でスラッシュ (/) を入力すると、ドロップダウンメニューが表示されます。Add panel を選択してパネルを追加します。折れ線グラフ、散布図、平行座標プロットなど、W&B でサポートされている任意のパネルを追加できます。
レポートにグラフを追加

run set を追加する

App UI または W&B SDK を使用して、プロジェクトからインタラクティブに run set を追加します。
レポートでスラッシュ (/) を入力すると、ドロップダウンメニューが表示されます。ドロップダウンから Panel Grid を選択します。これにより、レポートの作成元のプロジェクトから run set が自動的に import されます。パネルをレポートに import すると、run 名はプロジェクトから引き継がれます。レポートでは、必要に応じて run の名前を変更 し、閲覧者により多くのコンテキストを提供できます。run 名が変更されるのは、その個別のパネル内だけです。同じレポート内でそのパネルを複製した場合、複製先のパネルでも run 名が変更されます。
  1. レポートで鉛筆アイコンをクリックして、レポートエディタを開きます。
  2. run set で、名前を変更する run を検索します。レポート名にカーソルを合わせ、action () メニューをクリックします。次のいずれかを選択し、フォームを送信します。
    • プロジェクトの run 名を変更: プロジェクト全体で run 名を変更します。新しいランダム名を生成するには、このフィールドを空欄のままにします。
    • Panel Grid の run 名を変更: run 名をレポート内でのみ変更し、他のコンテキストでは既存の名前を保持します。新しいランダム名の生成はサポートされていません。
  3. レポートを公開 をクリックします。

run set を固定する

レポートでは、プロジェクトの最新データが表示されるよう、run set が自動的に更新されます。run set を固定すると、レポート内のその run set を保持できます。run set を固定すると、レポート内の run set の状態がその時点のものとして保持されます。 レポートの表示中に run set を固定するには、パネルグリッド内の Filter ボタンの近くにある雪の結晶アイコンをクリックします。
run set を固定するボタン

プログラムで run set をグループ化する

Workspace and Reports API を使用して、run set 内の runs をプログラムでグループ化できます。 run set 内の runs は、設定値、run メタデータ、または summary メトリクスでグループ化できます。次の表は、利用可能なグループ化 method と、その method で利用可能なキーを示しています。
グループ化 method説明利用可能なキー
設定値設定値で runs をグループ化するwandb.init(config=) の config パラメーターで指定した値
Run メタデータrun メタデータで runs をグループ化するState, Name, JobType
Summary メトリクスsummary メトリクスで runs をグループ化するwandb.Run.log() で run にログした値

設定値で run をグループ化する

類似した設定の run を比較するには、設定値で run をグループ化します。設定値は、run の設定 (wandb.init(config=)) で指定するパラメーターです。設定値で run をグループ化するには、config.<key> 構文を使用します。ここで、<key> はグループ化に使う設定値の名です。 たとえば、次のコードスニペットでは、まず group の設定値を指定して run を初期化し、その後 group 設定値に基づいて report 内の run をグループ化します。<entity><project> の値は、ご使用の W&B entity 名およびプロジェクト名に置き換えてください。
import wandb
import wandb_workspaces.reports.v2 as wr

entity = "<entity>"
project = "<project>"

for group in ["control", "experiment_a", "experiment_b"]:
    for i in range(3):
        with wandb.init(entity=entity, project=project, group=group, config={"group": group, "run": i}, name=f"{group}_run_{i}") as run:
            # トレーニングのシミュレーション
            for step in range(100):
                run.log({
                    "acc": 0.5 + (step / 100) * 0.3 + (i * 0.05),
                    "loss": 1.0 - (step / 100) * 0.5
                })
その後、Pythonスクリプトまたはノートブック内で、config.group の値で run をグループ化できます。
runset = wr.Runset(
  project=project,
  entity=entity,
  groupby=["config.group"]  # "group" 設定値でグループ化
)
前の例に続き、グループ化した run set を使ってレポートを作成できます。
report = wr.Report(
  entity=entity,
  project=project,
  title="Grouped Runs Example",
)

report.blocks = [
  wr.PanelGrid(
      runsets=[runset],
          )
      ]

report.save()

run のメタデータで run をグループ化する

run は、run の名 (Name)、状態 (State)、またはジョブタイプ (JobType) でグループ化できます。 前の例に続いて、以下のコードを使うと、名で run をグループ化できます:
runset = wr.Runset(
  project=project,
  entity=entity,
  groupby=["Name"]  # run 名でグループ化
)
run の名前は、wandb.init(name=) パラメーターで指定した名前です。名前を指定しない場合、W&B が run にランダムな名前を生成します。run の名前は、W&B App の run の Overview ページ、または Api.runs().run.name を使ってプログラムから確認できます。

サマリーメトリクスで run をグループ化する

以下の例では、サマリーメトリクスで run をグループ化する方法を示します。サマリーメトリクスとは、wandb.Run.log() を使って run にログする値です。run をログした後、サマリーメトリクスの名は、W&B App の run の Overview ページにある Summary セクションで確認できます。 サマリーメトリクスで run をグループ化する構文は summary.<key> です。ここで <key> は、グループ化に使用するサマリーメトリクスの名です。 たとえば、acc というサマリーメトリクスをログするとします。
import wandb
import wandb_workspaces.reports.v2 as wr

entity = "<entity>"
project = "<project>"

for group in ["control", "experiment_a", "experiment_b"]:
    for i in range(3):
        with wandb.init(entity=entity, project=project, group=group, config={"group": group, "run": i}, name=f"{group}_run_{i}") as run:
            # トレーニングをシミュレートする
            for step in range(100):
                run.log({
                    "acc": 0.5 + (step / 100) * 0.3 + (i * 0.05),
                    "loss": 1.0 - (step / 100) * 0.5
                })

次に、summary.acc の summary メトリクスで run をグループ化できます:
runset = wr.Runset(
  project=project,
  entity=entity,
  groupby=["summary.acc"]  # summaryの値でグループ化 
)

run セットをプログラムでフィルタリングする

Workspace と Reports API を使用して、run セットをプログラムでフィルタリングし、レポートに追加できます。 フィルター式の一般的な構文は次のとおりです。
Filter('key') operation <value>
ここで、key はフィルター名、operation は比較演算子 (例: >, <, ==, in, not in, or, and) 、<value> は比較対象の値です。Filter は、適用したいフィルターのタイプを表すプレースホルダーです。次の表は、使用可能なフィルターとその説明を示しています。
FilterDescriptionAvailable keys
Config('key')設定値でフィルターするwandb.init(config=)config パラメーターで指定した値。
SummaryMetric('key')サマリー メトリクスでフィルターするwandb.Run.log() を使って run にログした値。
Tags('key')タグでフィルターするrun に追加したタグの値 (プログラムから、または W&B App から追加) 。
Metric('key')run のプロパティでフィルターするtags, state, displayName, jobType
フィルターを定義したら、レポートを作成し、フィルターした run set を wr.PanelGrid(runsets=) に渡せます。さまざまな要素をプログラムでレポートに追加する方法について詳しくは、このページ内にある Report and Workspace API タブを参照してください。 次の例では、レポート内で run set をフィルターする方法を示します。<> で囲まれた値は、ご自身の値に置き換えてください。

設定フィルター

1 つ以上の設定値を使って runset をフィルターします。設定値は、run の設定 (wandb.init(config=)) で指定するパラメーターです。 たとえば、次のコード例では、まず learning_ratebatch_size の設定値を指定して run を初期化し、その後 learning_rate の設定値に基づいてレポート内の run をフィルターします。
import wandb

config = {
    "learning_rate": 0.01,
    "batch_size": 32,
}

with wandb.init(project="<project>", entity="<entity>", config=config) as run:
    # トレーニングコードをここに記述
    pass
Python script または notebook 内で、学習率が 0.01 を超える run をプログラムからフィルターできます。
import wandb_workspaces.reports.v2 as wr

runset = wr.Runset(
  entity="<entity>",
  project="<project>",
  filters="Config('learning_rate') > 0.01"
)
and 演算子を使用して、複数の設定値で絞り込むこともできます:
runset = wr.Runset(
  entity="<entity>",
  project="<project>",
  filters="Config('learning_rate') > 0.01 and Config('batch_size') == 32"
)
前の例に引き続き、フィルタリングしたrunsetを使用して、次のようにレポートを作成できます。
report = wr.Report(
  entity="<entity>",
  project="<project>",
  title="My Report"
)

report.blocks = [
  wr.PanelGrid(
      runsets=[runset],
      panels=[
          wr.LinePlot(
              x="Step",
              y=["accuracy"],
          )
      ]
  )
]

report.save()

メトリクスフィルター

run セットを、run のタグ (tags)、run の状態 (state)、run 名 (displayName)、またはジョブ タイプ (jobType) に基づいてフィルターします。
Metric フィルターでは構文が異なります。値のリストは、そのままリストとして渡します。
Metric('key') operation [<value>]
たとえば、次の Python スニペットでは 3 つの run を作成し、それぞれに名前を付けます。
import wandb

with wandb.init(project="<project>", entity="<entity>") as run:
    for i in range(3):
        run.name = f"run{i+1}"
        # トレーニングコードをここに記述
        pass
レポートの作成時に、表示名で run をフィルタリングできます。たとえば、表示名が run1run2run3 の run をフィルタリングするには、次のコードを使用できます。
runset = wr.Runset(
  entity="<entity>",
  project="<project>",
  filters="Metric('displayName') in ['run1', 'run2', 'run3']"
)
run の名前は、W&B App の run の Overview ページ、または Api.runs().run.name を使ってプログラムから取得できます。
次の例では、run の状態 (finishedcrashed、または running) で runset をフィルターする方法を示します:
runset = wr.Runset(
  entity="<entity>",
  project="<project>",
  filters="Metric('state') in ['finished']"
)
runset = wr.Runset(
  entity="<entity>",
  project="<project>",
  filters="Metric('state') not in ['crashed']"
)

SummaryMetric フィルター

以下の例では、Summary メトリクスで run set をフィルターする方法を示します。Summary メトリクスは、wandb.Run.log() を使って run にログする値です。run をログした後、Summary メトリクスの名は、W&B App の run の Overview ページにある Summary セクションで確認できます。
runset = wr.Runset(
  entity="<entity>",
  project="<project>",
  filters="SummaryMetric('accuracy') > 0.9"
)
runset = wr.Runset(
  entity="<entity>",
  project="<project>",
  filters="Metric('state') in ['finished'] and SummaryMetric('train/train_loss') < 0.5"
)

タグフィルター

次のコードスニペットは、runs の集合をタグでフィルタリングする方法を示しています。タグは、run に追加する値です (プログラムから、または W&B App を使って追加できます) 。
runset = wr.Runset(
  entity="<entity>",
  project="<project>",
  filters="Tags('training') == 'training'"
)

コードブロックを追加する

App UI または W&B SDK を使用して、レポートにインタラクティブにコードブロックを追加できます。
レポート内でスラッシュ (/) を入力すると、ドロップダウンメニューが表示されます。ドロップダウンから Code を選択します。コードブロックの右側にあるプログラミング言語名を選択します。するとドロップダウンが展開されます。ドロップダウンから使用するプログラミング言語の構文を選択します。Javascript、Python、CSS、JSON、HTML、Markdown、YAML から選択できます。

Markdown を追加する

App UI または W&B SDK を使用して、レポートにインタラクティブに Markdown を追加できます。
レポート内でスラッシュ (/) を入力すると、ドロップダウンメニューが表示されます。ドロップダウンから Markdown を選択します。

HTML 要素を追加する

App UI または W&B SDK を使用して、レポートに HTML 要素をインタラクティブに追加します。
レポート内でスラッシュ (/) を入力すると、ドロップダウンメニューが表示されます。ドロップダウンからテキストブロックのタイプを選択します。たとえば、H2 の見出しブロックを作成するには、Heading 2 オプションを選択します。
App UI または W&B SDK を使用して、レポート内にリッチメディアを埋め込みます。
URL を Reports にコピー&ペーストして、レポート内にリッチメディアを埋め込みます。以下のアニメーションは、Twitter、YouTube、SoundCloud から URL をコピー&ペーストする方法を示しています。

Twitter

Tweet のリンク URL をレポートにコピー&ペーストすると、その Tweet をレポート内に表示できます。
Twitter コンテンツの埋め込み

Youtube

YouTube の動画 URL リンクをコピー&ペーストして、レポートに動画を埋め込みます。
YouTube 動画の埋め込み

SoundCloud

SoundCloud のリンクをコピー&ペーストして、オーディオファイルをレポートに埋め込みます。
SoundCloud オーディオの埋め込み

パネルグリッドを複製・削除する

再利用したいLayoutがある場合は、パネルグリッドを選択してコピー&ペーストすることで、同じReports内で複製したり、別のReportsに貼り付けたりできます。 右上のドラッグハンドルを選択すると、パネルグリッドのセクション全体を選択できます。クリックしてドラッグすると、パネルグリッド、テキスト、見出しなど、Reports内の領域を選択できます。
パネルグリッドをコピーする
パネルグリッドを選択し、キーボードのdeleteキーを押すと、パネルグリッドを削除できます。
パネルグリッドを削除する

ヘッダーを折りたたんでReportsを整理する

レポートでは、ヘッダーを折りたたむことでテキストブロック内のコンテンツを非表示にできます。レポートの読み込み時には、展開されているヘッダーのコンテンツのみが表示されます。レポート内でヘッダーを折りたたむと、コンテンツを整理しやすくなり、不要なデータの読み込みを抑えられます。次のgifは、この手順を示しています。
レポート内でヘッダーを折りたたむ。

複数の次元間の関係を可視化する

複数の次元間の関係を効果的に可視化するには、色のグラデーションを使用して変数の1つを表します。これにより視認性が高まり、パターンをより簡単に読み取れるようになります。
  1. 色のグラデーションで表す変数を1つ選択します (例: penalty scores、learning rates など) 。これにより、トレーニング時間 (x-axis) に沿って、penalty (色) が reward/side effects (y-axis) とどのように関係するかを、より明確に把握できます。
  2. 主要な傾向を強調表示します。特定の run グループにカーソルを合わせると、可視化内でそのグループが強調表示されます。