wandb.init() を使って W&B Run を初期化します。
デフォルトでは、wandb.init() を呼び出したとき、各 Python プロセスには同時にアクティブな run が 1 つだけ存在するものと W&B は想定します。もう一度 wandb.init() を呼び出すと、W&B は同じ run を返すか、古い run を終了してから新しい run を開始します。同一プロセス内で wandb.init() を複数回呼び出した場合の挙動は、実行環境(notebook か非 notebook か)と reinit 設定によって変わります。
同一プロセス内で複数のアクティブな run を管理する場合は、Multiple runs in one process を参照してください。
wandb.init() を呼び出すときは with ブロックを使うことを W&B は推奨します。これにより、ブロックの終了時に W&B が run を正しく終了し、すべてのデータをアップロードできるようになります。1プロセスにつき1つの run
basic.py
nico 配下のプロジェクト awesome-project に run exalted-darkness-6 をログしたことを示しています。pgbn9y21 は、この run に対して W&B が生成した一意の run ID です。
1 つのプロセス内で複数の run を扱う
- スクリプト全体を通して 1 つの「プライマリ」run をアクティブに保ちながら、評価やサブタスク用に短期間の「セカンダリ」run を立ち上げる。
- 1 つのファイルの中でサブ実験をまとめて実行・管理する。
- 1 つの「メイン」プロセスから、異なるタスクや期間を表す複数の run に対してログを記録する。
wandb.init() を呼び出したとき、各 Python プロセスには同時に 1 つのアクティブな run だけが存在すると W&B は想定します。もう一度 wandb.init() を呼び出すと、W&B は同じ run を返すか、あるいは新しい run を開始する前に古い run を終了します。どちらになるかは設定によって異なります。
このガイドでは、reinit を使って wandb.init() の動作を変更し、1 つの Python プロセス内で複数の run を有効にする方法を説明します。
Requirements1 つの Python プロセス内で複数の run を管理するには、W&B Python SDK のバージョン
v0.19.10 以降が必要です。reinit オプション
reinit パラメータを使って、同一プロセス内で複数回 wandb.init() を呼び出したときの W&B の動作を設定します。次の表は、有効な引数とその挙動を示します。
| 説明 | run を作成するか? | ユースケースの例 | |
|---|---|---|---|
create_new | 既存のアクティブな run を終了せずに、wandb.init() で新しい run を作成します。W&B はグローバルな wandb.Run を新しい run に自動的には切り替えません。各 run オブジェクトは自分で保持する必要があります。詳細は下記の 1 プロセス内で複数 run を扱う例 を参照してください。 | Yes | 並行プロセスを作成・管理する場合に最適です。例えば、常にアクティブな「メイン」の run を維持しつつ、「サブ」の run を開始・終了する場合などです。 |
finish_previous | 新しい run を wandb.init() で作成する前に、すべてのアクティブな run を run.finish() で終了します。ノートブック以外の環境でのデフォルト動作です。 | Yes | 連続するサブプロセスを、それぞれ個別の run に分割したい場合に最適です。 |
return_previous | 最新の、未完了の run を返します。ノートブック環境でのデフォルト動作です。 | No |
Hugging Face Trainer、Keras callbacks、PyTorch Lightning など、単一のグローバル run を前提とする W&B Integrations では、
create_new モードはサポートされていません。これらのインテグレーションを使用する場合は、各サブ実験を個別のプロセスで実行する必要があります。reinit の指定方法
-
reinit引数を直接指定してwandb.init()を使用します: -
wandb.init()を使用し、settingsパラメータにwandb.Settingsオブジェクトを渡します。Settingsオブジェクト内でreinitを指定します: -
現在のプロセス内のすべての run に対して
reinitオプションをグローバルに設定するには、wandb.setup()を使用します。これは、一度だけ動作を設定し、そのプロセス内の後続のすべてのwandb.init()呼び出しに適用したい場合に便利です。 -
環境変数
WANDB_REINITに、reinitの必要な値を指定します。環境変数を定義すると、そのreinitオプションがwandb.init()の呼び出しに適用されます。
wandb.init() を呼び出すたびに新しい run を作成するように W&B をセットアップする方法の概要を示しています:
例: 並行プロセス
reinit="create_new" を使用して複数の run を初期化します。この例では、スクリプト全体の間開いたままのメインプロセスを「Run A」とし、「Run B1」「Run B2」を評価などのタスク用に短時間だけ動作するセカンダリ run とします。
全体的なワークフローは次のようになります:
wandb.init()でメインプロセスの Run A を初期化し、学習メトリクスをログする。- Run B1 を (
wandb.init()で) 初期化し、データをログしたら Run B1 を終了する。 - Run A にさらにデータをログする。
- Run B2 を初期化し、データをログしたら Run B2 を終了する。
- Run A へのログを継続する。
- 最後に、スクリプトの終了時に Run A を終了する。
reinit="create_new"は、wandb.init()を呼び出すたびに新しい run を作成します。- 各 run への参照を保持する必要があります。
wandb.runは、reinit="create_new"によって作成された新しい run を自動的には指しません。新しい run はrun_a、run_b1などの変数に保存し、必要に応じてそれらのオブジェクトに対して.log()や.finish()を呼び出してください。 - メインの run を開いたままにしつつ、サブ run は好きなタイミングで終了できます。
- それらの run へのロギングが完了したら、
run.finish()で run を終了してください。これにより、すべてのデータが確実にアップロードされ、run が正しくクローズされます。