メインコンテンツへスキップ
W&B Report および Workspace API はパブリックプレビュー中です。
App UI を使用してインタラクティブに、または W&B SDK を使用してプログラムで Reports を編集できます。 Reports は ブロック で構成されています。ブロックはレポートの本体を形成します。これらのブロック内には、テキスト、画像、埋め込み可視化、実験や run からのプロット、およびパネルグリッドを追加できます。 パネルグリッド は、パネルと run sets を保持する特定のタイプのブロックです。Run sets は、W&B のプロジェクトにログ記録された run のコレクションです。パネルは、run set データの可視化です。
保存された Workspace ビューを作成およびカスタマイズする方法のステップバイステップの例については、プログラムによるワークスペースのチュートリアル を確認してください。
プログラムでレポートを編集する場合は、W&B Python SDK に加えて、W&B Report および Workspace API である wandb-workspaces がインストールされていることを確認してください。
pip install wandb wandb-workspaces

プロットの追加

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

run sets の追加

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

run set の固定 (Freeze)

レポートは、プロジェクトからの最新データを表示するために run sets を自動的に更新します。レポート内の run set を 固定 (freezing) することで、その状態を保存できます。run set を固定すると、特定の時点におけるレポート内の run set の状態が保持されます。 レポートの閲覧中に run set を固定するには、パネルグリッド内の Filter ボタンの近くにある雪の結晶アイコンをクリックします。
Freeze runset button

プログラムによる run set のグループ化

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

config 値による run のグループ化

同様の設定を持つ run を比較するために、config 値で run をグループ化します。config 値は、run 設定 (wandb.init(config=)) で指定するパラメータです。config 値で run をグループ化するには、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 set を含むレポートを作成できます。
report = wr.Report(
  entity=entity,
  project=project,
  title="Grouped Runs Example",
)

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

report.save()

run メタデータによる run のグループ化

run の名前 (Name)、状態 (State)、またはジョブタイプ (JobType) で run をグループ化します。 前の例に続き、次のコードスニペットを使用して 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 で確認できます。

summary メトリクスによる run のグループ化

次の例では、summary メトリクスによって run をグループ化する方法を示します。summary メトリクスは、wandb.Run.log() で run にログ記録する値です。run をログ記録した後、W&B App の run の Overview ページの Summary セクションで summary メトリクスの名前を確認できます。 summary メトリクスで run をグループ化するための構文は summary.<key> です。ここで、<key> はグループ化に使用したい summary メトリクスの名前です。 例えば、acc という summary メトリクスをログ記録したとします。
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 set のフィルタリング

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

config フィルター

1つ以上の config 値で runset をフィルタリングします。config 値は、run 設定 (wandb.init(config=)) で指定するパラメータです。 例えば、次のコードスニペットは、まず learning_ratebatch_size の config 値を使用して run を初期化し、次に learning_rate config 値に基づいてレポート内の run をフィルタリングします。
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 sets をフィルタリングします。
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 の状態 (finished, crashed, または 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 をログ記録した後、W&B App の run の Overview ページの Summary セクションで 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"
)

Tags フィルター

次のコードスニペットは、タグによって run set をフィルタリングする方法を示しています。タグは、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 をコピーしてレポートに貼り付けることで、レポート内にリッチメディアを埋め込むことができます。次のアニメーションは、Twitter、YouTube、SoundCloud から URL をコピーして貼り付ける方法を示しています。

Twitter

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

YouTube

YouTube 動画の URL リンクをコピーして貼り付けると、レポートに動画を埋め込むことができます。
Embedding YouTube videos

SoundCloud

SoundCloud のリンクをコピーして貼り付けると、レポートにオーディオファイルを埋め込むことができます。
Embedding SoundCloud audio

パネルグリッドの複製と削除

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

ヘッダーの折りたたみによる Reports の整理

レポート内のヘッダーを折りたたんで、テキストブロック内のコンテンツを非表示にできます。レポートが読み込まれるとき、展開されているヘッダーのみがコンテンツを表示します。レポート内のヘッダーを折りたたむことで、コンテンツを整理し、過剰なデータ読み込みを防ぐことができます。次の GIF はそのプロセスを示しています。
Collapsing headers in a report.

多次元にわたる関係の可視化

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