メインコンテンツへスキップ
W&B Report および Workspace API は Public Preview です。
App UI を使って対話的に、または W&B SDK を使ってプログラムでレポートを編集します。 レポートは ブロック で構成されます。ブロックはレポート本文を構成する要素です。これらのブロック内には、テキスト、画像、埋め込みビジュアライゼーション、Experiments や run からのプロット、パネルグリッドを追加できます。 パネルグリッド は、パネルと run セット を保持する特定のタイプのブロックです。run セットは、W&B のプロジェクトに記録された run の集合です。パネルは run セット データの可視化です。
保存済みワークスペースビューを作成およびカスタマイズする手順付きの例については、Programmatic workspaces notebook を参照してください。
レポートをプログラムから編集する場合は、W&B Python SDK に加えて W&B Report および Workspace API wandb-workspaces がインストールされていることを確認してください:
pip install wandb wandb-workspaces

プロットを追加する

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

run セットを追加する

App UI か W&B SDK を使って、対話的にプロジェクトから run セットを追加します。
レポート内でスラッシュ(/)を入力するとドロップダウンメニューが表示されます。ドロップダウンから Panel Grid を選択します。これにより、そのレポートが作成されたプロジェクトから run セットが自動的にインポートされます。パネルをレポートにインポートすると、run 名はプロジェクトから継承されます。レポート内で、読者により多くのコンテキストを与えるために、任意でrun の名前を変更できます。run の名前が変更されるのは、その個々のパネル内だけです。同じレポート内でパネルをクローンした場合、クローンしたパネル内でも run の名前は変更されます。
  1. レポート内で、鉛筆アイコンをクリックしてレポートエディタを開きます。
  2. run セット内で、名前を変更する run を探します。その run 名にカーソルを合わせ、縦の三点リーダーをクリックします。次のいずれかを選択し、フォームを送信します。
    • Rename run for project: プロジェクト全体で run の名前を変更します。新しいランダム名を生成するには、フィールドを空のままにします。
    • Rename run for panel grid: 他のコンテキストでの既存の名前を保持したまま、レポート内でのみ run の名前を変更します。新しいランダム名の生成はサポートされていません。
  3. Publish report をクリックします。

run セットを固定する

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

runセットをプログラムでグループ化する

Workspace and Reports API を使って、runセット内のrunをプログラムでグループ化できます。 runセット内のrunは、config の値、runメタデータ、またはサマリーメトリクスでグループ化できます。次の表は、利用可能なグループ化方法と、その方法で使用できるキーを示します:
グループ化方法説明利用可能なキー
Config valuesconfig の値でrunをグループ化するwandb.init(config=) の config パラメータで指定した値
Run metadatarunメタデータでrunをグループ化するStateNameJobType
Summary metricsサマリーメトリクスでrunをグループ化するwandb.Run.log() を使って run にログした値

config 値で run をグループ化する

同様の設定を持つ run を比較するために、config 値で run をグループ化します。config 値は、run の設定 (wandb.init(config=)) で指定するパラメータです。run を config 値でグループ化するには、config.<key> 構文を使用します。ここで <key> は、グループ化に使用したい config 値の名前です。 たとえば、次のコードスニペットでは、まず group 用の config 値を持つ run を初期化し、その後、group の config 値に基づいてレポート内の 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" config値でグループ化
)
前の例の続きで、グループ化した run セットを使ってレポートを作成できます。
report = wr.Report(
  entity=entity,
  project=project,
  title="Grouped Runs Example",
)

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

report.save()

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

run の名前(Name)、状態(State)、またはジョブタイプ(JobType)ごとに runs をグループ化できます。 前の例に続き、次のコードスニペットで runs を名前ごとにグループ化できます。
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 というサマリーメトリクスで run をグループ化できます。
runset = wr.Runset(
  project=project,
  entity=entity,
  groupby=["summary.acc"]  # サマリー値でグループ化 
)

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

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

Config フィルタ

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

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

with wandb.init(project="<project>", entity="<entity>", config=config) as run:
    # 学習コードをここに記述
    pass
Python スクリプトまたはノートブック内で、学習率が 0.01 より大きい run をプログラムから絞り込むことができます。
import wandb_workspaces.reports.v2 as wr

runset = wr.Runset(
  entity="<entity>",
  project="<project>",
  filters="Config('learning_rate') > 0.01"
)
and 演算子を使うと、複数の config 値を指定してフィルタリングすることもできます。
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()

Metric フィルター

run のタグ (tags)、run の状態 (state)、run 名 (displayName)、またはジョブタイプ (jobType) に基づいて run セットをフィルタリングします。
Metric フィルターは異なる構文を使用します。値はリストとして渡してください。
Metric('key') operation [<value>]
例として、3 つの run を作成し、それぞれに名前を割り当てる次の Python スニペットを例に考えます。
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 の状態(finishedcrashedrunning)で 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 フィルター

以下の例では、サマリーメトリクスで run セットをフィルタリングする方法を示します。サマリーメトリクスは、wandb.Run.log() を使って run にログする値です。run をログした後は、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"
)

タグフィルター

次のコードスニペットは、タグで run セットをフィルタリングする方法を示します。タグは、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 から選択できます。

マークダウンを追加する

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

HTML 要素を追加する

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

Twitter

ツイートのリンク URL をレポートにコピーして貼り付けると、レポート内でそのツイートを表示できます。
Twitter コンテンツの埋め込み

Youtube

YouTube 動画の URL リンクをコピーして貼り付けると、レポート内に動画を埋め込めます。
YouTube 動画の埋め込み

SoundCloud

SoundCloud のリンクをコピーして貼り付けると、レポートに音声ファイルを埋め込めます。
SoundCloud 音声の埋め込み

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

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

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

レポート内のテキストブロックでは、ヘッダーを折りたたんで、その配下のコンテンツを非表示にできます。レポートが読み込まれたときには、展開されているヘッダーのコンテンツのみが表示されます。レポートでヘッダーを折りたたむと、コンテンツを整理し、不要なデータの読み込みを防ぐのに役立ちます。以下の GIF はこの手順を示しています。
レポート内のヘッダーを折りたたむ様子。

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

複数の次元にまたがる関係を効果的に可視化するには、変数の1つを色のグラデーションで表現します。これにより視認性が高まり、パターンを解釈しやすくなります。
  1. 色のグラデーションで表現する変数を1つ選択します(例: ペナルティスコア、学習率など)。これにより、学習時間(x軸)に対して、ペナルティ(色)が報酬/副作用(y軸)とどのように相互作用するかを、より明確に理解できます。
  2. 重要なトレンドを強調します。特定の run グループにカーソルを合わせると、そのグループが可視化内でハイライト表示されます。