1 - ローンンチ ジョブを表示する

以下のページでは、キューに追加されたローンンチジョブの情報を表示する方法を説明します。

ジョブの表示

W&B アプリケーションを使用してキューに追加されたジョブを表示します。

  1. https://wandb.ai/home にある W&B アプリケーションにアクセスします。
  2. 左側のサイドバーにある Applications セクション内の Launch を選択します。
  3. All entities ドロップダウンを選択し、ローンンチジョブが所属するエンティティを選択します。
  4. Launch Application ページから折りたたみ可能なUIを展開し、その特定のキューに追加されたジョブのリストを表示します。

例えば、次の画像は、job-source-launch_demo-canonicalというジョブから作成された2つのrunを示しています。このジョブは Start queue というキューに追加されました。キューにリストされている最初のrunは resilient-snowball と呼ばれ、2番目のrunは earthy-energy-165 と呼ばれます。

W&B アプリケーションUI内で、ローンンチジョブから作成されたrunに関する次のような追加情報を見つけることができます:

  • Run: そのジョブに割り当てられた W&B run の名前。
  • Job ID: ジョブの名前。
  • Project: runが所属するプロジェクトの名前。
  • Status: キューに入れられたrunのステータス。
  • Author: run を作成した W&B エンティティ。
  • Creation date: キューが作成されたタイムスタンプ。
  • Start time: ジョブが開始されたタイムスタンプ。
  • Duration: ジョブのrunを完了するのにかかった時間(秒単位)。

ジョブのリスト

プロジェクト内に存在するジョブのリストを W&B CLI を使用して表示します。W&B job list コマンドを使用し、--project および --entity フラグにローンンチジョブが所属するプロジェクト名とエンティティ名を指定します。

wandb job list --entity your-entity --project project-name

ジョブのステータスを確認する

次の表は、キューに入れられたrunが持つ可能性のあるステータスを定義しています:

ステータス 説明
Idle runはアクティブなエージェントのないキューにあります。
Queued runはエージェントが処理するのを待っているキューにあります。
Pending run はエージェントによって取得されましたが、まだ開始されていません。これはクラスターでリソースが利用できないことが原因である可能性があります。
Running run は現在実行中です。
Killed ジョブはユーザーによって終了されました。
Crashed run はデータの送信を停止したか、正常に開始しませんでした。
Failed run は非ゼロの終了コードで終了したか、run の開始に失敗しました。
Finished ジョブは正常に完了しました。

2 - ローンンチキューを監視する

Use the interactive キュー監視ダッシュボード を使用して、launch キューが混雑しているかアイドル状態かを表示し、実行中のワークロードを視覚化し、非効率なジョブを見つけます。launch キューのダッシュボードは、計算ハードウェアやクラウドリソースを効果的に使用しているかどうかを判断するのに特に役立ちます。

詳細な分析を行うには、ページから W&B の実験管理ワークスペースや Datadog、NVIDIA Base Command、クラウドコンソールなどの外部インフラストラクチャーモニタリングプロバイダーへのリンクを利用します。

ダッシュボードとプロット

Monitor タブを使用して、過去 7 日間に発生したキューの活動を表示します。左側のパネルを使用して、時間範囲、グループ化、およびフィルターを制御します。

ダッシュボードには、パフォーマンスと効率性に関するよくある質問に対する答えが表示されるいくつかのプロットが含まれています。以下のセクションでは、キューダッシュボードの UI 要素について説明します。

ジョブステータス

ジョブステータス プロットは、各時間間隔において何件のジョブが実行中、保留中、キュー中、または完了済みであるかを示します。この ジョブステータス プロットを使用して、キューのアイドル期間を特定します。

例えば、固定リソース (たとえば、DGX BasePod) を持っているとします。固定リソースを使用しているキューがアイドル状態であることを観察した場合、低優先度の先取可能 launch ジョブ (例えば Sweeps) を実行する機会があるかもしれません。

一方、クラウドリソースを使用しており、定期的な活動の急増を観察した場合、それは特定の時間帯にリソースを予約してお金を節約する機会を示すかもしれません。

プロットの右側には、launch ジョブのステータス を示す色が表示されるキーがあります。

キュー時間

キュー時間 プロットは、特定の日付または時間範囲で launch ジョブがキュー上にあった時間(秒数)を表示します。

x 軸は指定した時間枠を、y 軸は launch ジョブが launch キュー上にあった時間(秒数)を示します。例えば、ある日に 10 件の launch ジョブがキューに入っていると仮定します。それら 10 件の launch ジョブがそれぞれ平均 60 秒待機する場合、キュー時間 プロットは 600 秒を表示します。

左バーの Grouping コントロールを使用して、各ジョブの色をカスタマイズします。

特に、ユーザーとジョブが限られたキュー容量にどの程度影響を受けているかを特定するのに役立ちます。

ジョブ実行

このプロットは、指定した期間に実行されたジョブの開始と終了を、各 run ごとに異なる色で示しています。これにより、指定した時間にキューがどのワークロードを処理していたかを一目で確認できます。

パネルの右下にある Select ツールを使用して、ジョブをブラシオーバーして下のテーブルに詳細を表示します。

CPU と GPU の使用

ジョブによる GPU の使用ジョブによる CPU の使用ジョブによる GPU メモリジョブによるシステムメモリ を使用して、launch ジョブの効率性を確認します。

例えば、ジョブによる GPU メモリ を使用して、W&B run が完了するのに長い時間を要し、CPU コアの使用率が低かったかどうかを確認できます。

各プロットの x 軸は W&B run (launch ジョブによって作成された) の期間を秒単位で示しています。データポイントにマウスを重ねて、W&B run の情報(run ID、run の属するプロジェクト、W&B run を作成した launch ジョブなど)を確認します。

エラー

エラーパネル は、特定の launch キューで発生したエラーを表示します。より具体的には、エラーパネルはエラーが発生したタイムスタンプ、エラーが発生した launch ジョブの名前、および作成されたエラーメッセージを示します。デフォルトでは、エラーは最新のものから古いものの順に並べられます。

エラーパネル を使用してユーザーを特定し、ブロックを解除します。

外部リンク

キューの可観測性ダッシュボードのビューはすべてのキュータイプで一貫していますが、多くの場合、環境固有のモニタに直接ジャンプすることが有用です。これを達成するために、コンソールからキューの可観測性ダッシュボードに直接リンクを追加します。

ページの下部で Manage Links をクリックしてパネルを開きます。必要なページの完全な URL を追加します。次にラベルを追加します。追加したリンクは External Links セクションに表示されます。

3 - ローンンチジョブを作成する

Launch ジョブは、W&B Runs を再現するための設計図です。ジョブは、ワークロードを実行するために必要なソースコード、依存関係、および入力をキャプチャする W&B Artifacts です。

wandb launch コマンドでジョブを作成して実行します。

Git ジョブ

W&B Launch を使って、ソースコードや他の追跡されたアセットをリモート git リポジトリの特定のコミット、ブランチ、またはタグからクローンする Git ベースのジョブを作成できます。--uri または -u フラグを使用して、コードを含む URI を指定し、オプションとして --build-context フラグを使用してサブディレクトリーを指定します。

次のコマンドを使用して git リポジトリから “hello world” ジョブを実行します:

wandb launch --uri "https://github.com/wandb/launch-jobs.git" --build-context jobs/hello_world --dockerfile Dockerfile.wandb --project "hello-world" --job-name "hello-world" --entry-point "python job.py"

このコマンドは次のことを行います:

  1. W&B Launch ジョブリポジトリ を一時ディレクトリーにクローンします。
  2. hello プロジェクト内に hello-world-git という名前のジョブを作成します。このジョブはリポジトリのデフォルトブランチのトップにあるコミットに関連付けられています。
  3. jobs/hello_world ディレクトリーと Dockerfile.wandb からコンテナイメージをビルドします。
  4. コンテナを開始し、python job.py を実行します。

特定のブランチまたはコミットハッシュからジョブをビルドするには、-g--git-hash 引数を追加します。引数の完全なリストについては、wandb launch --help を実行してください。

リモート URL 形式

Launch ジョブに関連付けられた git リモートは、HTTPS または SSH URL のいずれかを使用できます。URL タイプは、ジョブのソースコードを取得するために使用されるプロトコルを決定します。

リモート URL タイプ URL 形式 アクセスと認証の要件
https https://github.com/organization/repository.git git リモートでの認証用のユーザー名とパスワード
ssh git@github.com:organization/repository.git git リモートでの認証用の SSH キー

正確な URL 形式はホスティングプロバイダーによって異なることに注意してください。wandb launch --uri で作成されたジョブは、指定された --uri で指定された転送プロトコルを使用します。

コードアーティファクトジョブ

ジョブは、任意のソースコードから W&B Artifact に保存して作成できます。ローカルディレクトリーを --uri または -u 引数で使用して、新しいコードアーティファクトとジョブを作成します。

まず、空のディレクトリーを作成し、次の内容を持つ Python スクリプト main.py を追加します:

import wandb

with wandb.init() as run:
    run.log({"metric": 0.5})

次の内容を持つファイル requirements.txt を追加します:

wandb>=0.17.1

ディレクトリーをコードアーティファクトとして記録し、次のコマンドでジョブを起動します:

wandb launch --uri . --job-name hello-world-code --project launch-quickstart --entry-point "python main.py"

前のコマンドは次のことを行います:

  1. 現在のディレクトリーを hello-world-code という名前のコードアーティファクトとして記録します。
  2. launch-quickstart プロジェクト内に hello-world-code という名前のジョブを作成します。
  3. 現在のディレクトリーと Launch のデフォルトの Dockerfile からコンテナイメージをビルドします。デフォルトの Dockerfile は requirements.txt ファイルをインストールし、エントリーポイントを python main.py に設定します。

イメージジョブ

別の方法として、事前に作成された Docker イメージからジョブを構築することもできます。これは、すでに ML コード用の確立されたビルドシステムを持っている場合や、ジョブのコードや要件を調整することはほとんどなく、ハイパーパラメーターや異なるインフラストラクチャー規模で実験したい場合に役立ちます。

イメージは Docker レジストリから取得され、指定されたエントリーポイントまたは指定されていない場合はデフォルトのエントリーポイントで実行されます。Docker イメージからジョブを作成して実行するには、--docker-image オプションに完全なイメージタグを渡します。

事前に作成されたイメージからシンプルなジョブを実行するには、次のコマンドを使用します:

wandb launch --docker-image "wandb/job_hello_world:main" --project "hello-world"           

自動ジョブ作成

W&B は、追跡されたソースコードを持つ任意の Run に対してジョブを自動的に作成して追跡します。この Run が Launch で作成されていなくてもです。Run が追跡されたソースコードを持つと見なされる条件は次の3つのうちのいずれかを満たした場合です:

  • Run に関連付けられた git リモートとコミットハッシュがある
  • Run がコードアーティファクトを記録した (詳細については Run.log_code を参照)
  • Run が WANDB_DOCKER 環境変数をイメージタグに設定した Docker コンテナで実行された

Git リモート URL は、W&B Run によって自動的に作成された Launch ジョブの場合、ローカルの git リポジトリから推測されます。

Launch ジョブ名

デフォルトでは、W&B はジョブ名を自動的に生成します。名前は、ジョブの作成方法 (GitHub、コードアーティファクト、Docker イメージ) によって生成されます。別の方法として、環境変数または W&B Python SDK で Launch ジョブの名前を定義できます。

次の表は、ジョブソースに基づくデフォルトのジョブの命名規則について説明しています:

ソース 命名規則
GitHub job-<git-remote-url>-<path-to-script>
Code artifact job-<code-artifact-name>
Docker image job-<image-name>

W&B 環境変数または W&B Python SDK でジョブに名前を付けます

WANDB_JOB_NAME 環境変数を希望のジョブ名に設定します。例:

WANDB_JOB_NAME=awesome-job-name

wandb.Settings でジョブの名前を定義します。そして、このオブジェクトを使用して W&B を wandb.init で初期化する際に渡します。例:

settings = wandb.Settings(job_name="my-job-name")
wandb.init(settings=settings)

コンテナ化

ジョブはコンテナ内で実行されます。イメージジョブは事前構築された Docker イメージを使用し、Git およびコードアーティファクトジョブはコンテナビルドステップが必要です。

ジョブのコンテナ化は、wandb launch の引数やジョブソースコード内のファイルでカスタマイズできます。

ビルドコンテキスト

ビルドコンテキストとは、コンテナイメージをビルドするために Docker デーモンに送信されるファイルとディレクトリーのツリーを指します。デフォルトでは、Launch はジョブソースコードのルートをビルドコンテキストとして使用します。サブディレクトリーをビルドコンテキストとして指定するには、ジョブを作成して起動する際に wandb launch--build-context 引数を使用します。

Dockerfile

Dockerfile は、Docker イメージをビルドするための命令を含むテキストファイルです。デフォルトでは、Launch は requirements.txt ファイルをインストールするデフォルトの Dockerfile を使用します。カスタム Dockerfile を使用するには、wandb launch--dockerfile 引数でファイルのパスを指定します。

Dockerfile のパスはビルドコンテキストに相対的に指定されます。たとえば、ビルドコンテキストが jobs/hello_world で、Dockerfile が jobs/hello_world ディレクトリーにある場合、--dockerfile 引数は Dockerfile.wandb に設定されるべきです。この引数を公式の W&B Launch ジョブリポジトリで使用する方法については、上記の例をご覧ください。

要件ファイル

カスタム Dockerfile が提供されていない場合、Launch は Python の依存関係をインストールするためにビルドコンテキストを調べます。ビルドコンテキストのルートに requirements.txt ファイルが見つかった場合、Launch はファイルにリストされた依存関係をインストールします。それ以外の場合、pyproject.toml ファイルが見つかれば、project.dependencies セクションから依存関係をインストールします。

4 - キューにジョブを追加

次のページでは、ローンチキューにローンチジョブを追加する方法について説明しています。

キューにジョブを追加する

W&B Appを使用してインタラクティブに、またはW&B CLIを使用してプログラム的にキューにジョブを追加します。

W&B Appを使用してプログラム的にキューにジョブを追加します。

  1. W&B Project Pageに移動します。
  2. 左のパネルで Jobs アイコンを選択します:
  3. Jobs ページには、以前に実行されたW&B runsから作成されたW&Bローンチジョブのリストが表示されます。
  4. ジョブ名の横にある Launch ボタンを選択します。ページの右側にモーダルが表示されます。
  5. Job version ドロップダウンから使用するローンチジョブのバージョンを選択します。ローンチジョブは他の W&B Artifact と同様にバージョン管理されます。ソフトウェアの依存関係やジョブを実行するために使用されるソースコードに変更を加えると、同じローンチジョブの異なるバージョンが作成されます。
  6. Overrides セクションで、ローンチジョブに設定された入力の新しい値を提供します。一般的なオーバーライドには、新しいエントリーポイントコマンド、引数、または新しいW&B runの wandb.config 内の値が含まれます。
    Paste from… ボタンをクリックして、ローンチジョブで使用された他のW&B runsから値をコピーして貼り付けることができます。
  7. Queue ドロップダウンから、ローンチジョブを追加するローンチキューの名前を選択します。
  8. Job Priority ドロップダウンを使用して、ローンチジョブの優先度を指定します。ローンチキューが優先度をサポートしていない場合は、ローンチジョブの優先度は「Medium」に設定されます。
  9. (オプション) この手順は、キュー設定テンプレートがチーム管理者によって作成されている場合にのみ従ってください
    Queue Configurations フィールド内で、チームの管理者によって作成された設定オプションに対する値を提供します。
    例えば、次の例では、チーム管理者がチームが使用できるAWSインスタンスタイプを設定しました。この場合、チームメンバーは ml.m4.xlarge または ml.p3.xlarge のいずれかのコンピュートインスタンスタイプを選択してモデルをトレーニングできます。
  10. Destination project を選択して、結果として生成されるrunが表示されるプロジェクトを指定します。このプロジェクトは、キューと同じエンティティに属している必要があります。
  11. Launch now ボタンを選択します。

wandb launch コマンドを使用して、キューにジョブを追加します。ハイパーパラメーターオーバーライドを含むJSON設定を作成します。例えば、クイックスタート ガイドのスクリプトを使用して、以下のオーバーライドを含むJSONファイルを作成します。

{
  "overrides": {
      "args": [],
      "run_config": {
          "learning_rate": 0,
          "epochs": 0
      },   
      "entry_point": []
  }
}

キューの設定をオーバーライドする場合、またはローンチキューに設定リソースが定義されていない場合、config.json ファイルで resource_args キーを指定できます。例えば、上記の例を続けると、config.json ファイルは次のようになります。

{
  "overrides": {
      "args": [],
      "run_config": {
          "learning_rate": 0,
          "epochs": 0
      },
      "entry_point": []
  },
  "resource_args": {
        "<resource-type>" : {
            "<key>": "<value>"
        }
  }
}

<> 内の値を独自の値に置き換えてください。

queue-q)フラグにはキューの名前を、job-j)フラグにはジョブの名前を、config-c)フラグには設定ファイルのパスを指定してください。

wandb launch -j <job> -q <queue-name> \ 
-e <entity-name> -c path/to/config.json

W&B Team内で作業する場合は、entity フラグ(-e)を指定して、キューが使用するエンティティを示すことをお勧めします。

5 - ジョブ入力を管理する

Launch のコア体験は、ハイパーパラメーターやデータセットのような異なるジョブの入力を簡単に実験し、それらのジョブを適切なハードウェアにルーティングすることです。一度ジョブが作成されると、元の作成者以外のユーザーも W&B GUI または CLI を介してこれらの入力を調整できます。CLI または UI からジョブ入力を設定する方法については、Enqueue jobs ガイドを参照してください。

このセクションでは、プログラム的にジョブの調整可能な入力を制御する方法を説明します。

デフォルトでは、W&B ジョブは Run.config 全体をジョブの入力としてキャプチャしますが、Launch SDK は run config の選択したキーを制御したり、JSON または YAML ファイルを入力として指定するための機能を提供します。

Run オブジェクトの再設定

ジョブ内の wandb.init によって返される Run オブジェクトは、デフォルトで再設定可能です。Launch SDK は、ジョブの Launch 時に Run.config オブジェクトのどの部分が再設定可能かをカスタマイズする方法を提供します。

import wandb
from wandb.sdk import launch

# Launch SDK の使用に必要
wandb.require("core")

config = {
    "trainer": {
        "learning_rate": 0.01,
        "batch_size": 32,
        "model": "resnet",
        "dataset": "cifar10",
        "private": {
            "key": "value",
        },
    },
    "seed": 42,
}

with wandb.init(config=config):
    launch.manage_wandb_config(
        include=["trainer"], 
        exclude=["trainer.private"],
    )
    # 等

関数 launch.manage_wandb_config は、Run.config オブジェクトに対する入力値をジョブに受け入れるように設定します。オプションの include および exclude オプションは、ネストされた config オブジェクト内のパスプレフィクスを取ります。例えば、ジョブがエンドユーザーに公開したくないオプションを持つライブラリを使用している場合に役立ちます。

include プレフィクスが提供されている場合、config 内で include プレフィクスと一致するパスのみが入力値を受け入れます。exclude プレフィクスが提供されている場合、exclude リストと一致するパスは入力値からフィルタリングされません。あるパスが include および exclude プレフィクスの両方に一致する場合、exclude プレフィクスが優先されます。

前述の例では、パス ["trainer.private"]trainer オブジェクトから private キーをフィルタリングし、パス ["trainer"]trainer オブジェクト下のすべてのキー以外をフィルタリングします。

上記のコードがパッケージ化され、ジョブとして実行される場合、ジョブの入力タイプは次のようになります:

{
    "trainer": {
        "learning_rate": "float",
        "batch_size": "int",
        "model": "str",
        "dataset": "str",
    },
}

W&B CLI または UI からジョブをローンチする際、ユーザーは 4 つの trainer パラメーターのみを上書きできます。

run config の入力へのアクセス

run config の入力でローンチされたジョブは、Run.config を通じて入力値にアクセスできます。ジョブ コード内で wandb.init によって返された Run は、入力値を自動的に設定します。ジョブ コードのどこでも run config の入力値をロードするには、次を使用します:

from wandb.sdk import launch

run_config_overrides = launch.load_wandb_config()

ファイルの再設定

Launch SDK はまた、ジョブ コードで設定ファイルに格納された入力値を管理する方法も提供します。これは、多くのディープラーニングや大規模な言語モデルのユースケースで一般的なパターンであり、例えばこの torchtune の例やこの Axolotl config などがあります。

launch.manage_config_file 関数を使用して、設定ファイルを Launch ジョブの入力として追加し、ジョブをローンチする際に設定ファイル内の値の編集アクセスを提供します。

デフォルトでは、launch.manage_config_file が使用されると run config 入力はキャプチャされません。launch.manage_wandb_config を呼び出すことで、この振る舞いを上書きします。

以下の例を考えてみましょう:

import yaml
import wandb
from wandb.sdk import launch

# Launch SDK の使用に必要
wandb.require("core")

launch.manage_config_file("config.yaml")

with open("config.yaml", "r") as f:
    config = yaml.safe_load(f)

with wandb.init(config=config):
    # 等
    pass

コードが隣接するファイル config.yaml と一緒に実行されていると想像してください:

learning_rate: 0.01
batch_size: 32
model: resnet
dataset: cifar10

launch.manage_config_file の呼び出しは、config.yaml ファイルをジョブの入力として追加し、W&B CLI または UI からローンチする際に再設定可能にします。

launch.manage_wandb_config と同じようにして、設定ファイルに対する許容入力キーをフィルタリングするために includeexclude のキーワード引数を使用できます。

設定ファイルの入力へのアクセス

Launch によって作成された run で launch.manage_config_file が呼び出されると、launch は設定ファイルの内容を入力値でパッチします。修正された設定ファイルはジョブ 環境で利用可能です。

ジョブの launch ドロワー UI のカスタマイズ

ジョブの入力スキーマを定義することで、ジョブをローンチするためのカスタム UI を作成できます。ジョブのスキーマを定義するには、launch.manage_wandb_config または launch.manage_config_file の呼び出しにそれを含めます。スキーマは、JSON Schema の形での Python 辞書または Pydantic モデル クラスのいずれかです。

次の例は、以下のプロパティを持つスキーマを示しています:

  • seed, 整数
  • trainer, いくつかのキーが指定された辞書:
    • trainer.learning_rate, ゼロより大きくなければならない浮動小数点数
    • trainer.batch_size, 16, 64, 256 のいずれかでなければならない整数
    • trainer.dataset, cifar10 または cifar100 のいずれかでなければならない文字列
schema = {
    "type": "object",
    "properties": {
        "seed": {
          "type": "integer"
        },
        "trainer": {
            "type": "object",
            "properties": {
                "learning_rate": {
                    "type": "number",
                    "description": "モデルの学習率",
                    "exclusiveMinimum": 0,
                },
                "batch_size": {
                    "type": "integer",
                    "description": "バッチごとのサンプル数",
                    "enum": [16, 64, 256]
                },
                "dataset": {
                    "type": "string",
                    "description": "使用するデータセットの名前",
                    "enum": ["cifar10", "cifar100"]
                }
            }
        }
    }
}

launch.manage_wandb_config(
    include=["seed", "trainer"], 
    exclude=["trainer.private"],
    schema=schema,
)

一般的に、以下の JSON Schema 属性がサポートされています:

属性 必須 注釈
type Yes number, integer, string, object のいずれかでなければなりません
title No プロパティの表示名を上書きします
description No プロパティのヘルプテキストを提供します
enum No フリーフォームのテキスト入力の代わりにドロップダウン選択を作成します
minimum No typenumber または integer のときのみ許可されます
maximum No typenumber または integer のときのみ許可されます
exclusiveMinimum No typenumber または integer のときのみ許可されます
exclusiveMaximum No typenumber または integer のときのみ許可されます
properties No typeobject のとき、ネストされた設定を定義するために使用します

次の例は、以下のプロパティを持つスキーマを示しています:

  • seed, 整数
  • trainer, いくつかのサブ属性が指定されたスキーマ:
    • trainer.learning_rate, ゼロより大きくなければならない浮動小数点数
    • trainer.batch_size, 1 から 256 までの範囲でなければならない整数
    • trainer.dataset, cifar10 または cifar100 のいずれかでなければならない文字列
class DatasetEnum(str, Enum):
    cifar10 = "cifar10"
    cifar100 = "cifar100"

class Trainer(BaseModel):
    learning_rate: float = Field(gt=0, description="モデルの学習率")
    batch_size: int = Field(ge=1, le=256, description="バッチごとのサンプル数")
    dataset: DatasetEnum = Field(title="Dataset", description="使用するデータセットの名前")

class Schema(BaseModel):
    seed: int
    trainer: Trainer

launch.manage_wandb_config(
    include=["seed", "trainer"],
    exclude=["trainer.private"],
    schema=Schema,
)

クラスのインスタンスを使用することもできます:

t = Trainer(learning_rate=0.01, batch_size=32, dataset=DatasetEnum.cifar10)
s = Schema(seed=42, trainer=t)
launch.manage_wandb_config(
    include=["seed", "trainer"],
    exclude=["trainer.private"],
    input_schema=s,
)

ジョブ入力スキーマを追加すると、launch ドロワーに構造化されたフォームが作成され、ジョブのローンチが容易になります。