メインコンテンツへスキップ
W&B Report and Workspace API は Public Preview です。
このページでは、App UI を使用してインタラクティブに、または W&B SDK を使用してプログラムで report を編集する方法を説明します。プロット、run set、コードブロック、Markdown、HTML 要素、リッチメディアの追加を扱います。また、run set のフィルタリングやグループ化、report レイアウトの整理、多次元の関係の可視化についても取り上げます。 report の本文は ブロック で構成されています。ブロックには、テキスト、画像、埋め込みビジュアライゼーション、Experiments と Runs のプロット、パネルグリッドを含めることができます。 パネルグリッド は、パネルと run set を保持する特定の種類のブロックです。run set は、W&B の project にログされた Runs のコレクションです。パネルは、run set データを可視化したものです。
カスタマイズした保存済み Workspace ビューを作成するエンドツーエンドのチュートリアルについては、Programmatic workspaces notebook を実行してください。
プログラムで report を編集するには、W&B Python SDK に加えて、W&B Report and Workspace API (wandb-workspaces) をインストールしておく必要があります。
pip install wandb wandb-workspaces

プロットを追加

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

run set を追加する

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

run set を固定する

レポートでは、プロジェクトの最新データが表示されるよう、run set が自動的に更新されます。後から追加された run によってレポートの表示内容が変わらないよう、特定の時点におけるレポート内の run set の状態を保持するには、run set を固定します。 レポートの表示中に run set を固定するには、パネルグリッド内の Filter ボタンの近くにある雪の結晶アイコンをクリックします。
run set を固定するボタン

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

Workspace and Reports API を使用して、run set 内の runs をプログラムでグループ化できます。グループ化により、関連する runs がパネル内でまとめて整理されるため、設定と結果を比較しやすくなります。 run set 内の runs は、設定値、run メタデータ、または サマリー メトリクスでグループ化できます。次の表は、利用可能なグループ化 method と、各 method で利用可能なキーを示しています。
グループ化 method説明利用可能なキー
設定値設定値で runs をグループ化するwandb.init(config=) の config パラメーターで指定した値
Run メタデータrun メタデータで runs をグループ化するState, Name, JobType
サマリー メトリクスサマリー メトリクスで 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 に固有のプロパティに基づいて整理するために、メタデータでグループ化できます。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 というサマリー メトリクスをログするとします。[ENTITY] と [PROJECT] は、ご使用の W&B entity 名および project 名に置き換えてください:
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 set をプログラムでフィルタリングする

Workspace and Reports API を使用すると、run set をプログラムでフィルタリングして report に追加できます。フィルタリングを行うと、設定値、メトリクス、tags、または run のプロパティに基づいて、表示したい特定の Runs のみに run set を絞り込めます。 フィルター式の一般的な構文は次のとおりです。
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
フィルターを定義したら、report を作成し、フィルターされた run set を wr.PanelGrid(runsets=) に渡せます。report に異なる要素をプログラムで追加する方法の詳細については、このページ内の Report and Workspace API タブを参照してください。 以下の例では、report 内で run set をフィルターする方法を示します。角かっこで囲まれた値 (たとえば [ENTITY][PROJECT]) は、ご自身の値に置き換えてください。

設定フィルター

1 つ以上の設定値を使って run set をフィルターします。設定値は、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"
)
前の例に引き続き、フィルタリングしたrun setを使用して、次のようにレポートを作成できます。
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 setを、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) で run set をフィルターする方法を示します:
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 set をフィルターすると、accuracy や loss の値など、特定の結果のしきい値を満たす 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 set をフィルタリングすると、特定のタグを付けた 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 を追加する

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

HTML 要素を追加する

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

Twitter

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

YouTube

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

SoundCloud

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

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

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

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

report内でレイアウトや内容が不要になった場合は、パネルグリッドを削除します。パネルグリッドを選択し、キーボードのdeleteキーを押すと、パネルグリッドを削除できます。
パネルグリッドを削除する

ヘッダーを折りたたんでレポートを整理する

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

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

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