wandb.init() を使用して W&B Run を初期化します。
デフォルトでは、wandb.init() を呼び出すと、W&B は各 Python プロセスに一度に 1 つのアクティブな run だけがあることを前提とします。wandb.init() を再度呼び出すと、W&B は同じ run を返すか、新しい run を開始する前に前の run を終了します。同じプロセス内で wandb.init() を複数回呼び出した場合の W&B の処理は、環境 (ノートブックか非ノートブックか) と reinit 設定によって異なります。
同じプロセス内で複数のアクティブな run を管理するには、1 つのプロセス内での複数の run を参照してください。
W&B では、
wandb.init() を呼び出す際に with ブロックを使用することを推奨しています。これにより、ブロックの終了時に W&B が run を適切に終了し、すべてのデータをアップロードできるようになります。プロセスごとに1つのrun
basic.py
exalted-darkness-6 を entity nico 配下のプロジェクト awesome-project にログしたことが示されます。pgbn9y21 は、W&B がこの run に対して生成する一意の run ID です。
1 つのプロセス内で複数の run を扱う
- スクリプト全体を通して 1 つの「プライマリ」run をアクティブに保ちながら、評価やサブタスクのために短時間だけ実行される「セカンダリ」run を立ち上げる。
- 1 つのファイル内でサブ実験をオーケストレーションする。
- 1 つの「メイン」プロセスから、異なるタスクや期間を表す複数の run にログする。
wandb.init() を呼び出すと、各 Python プロセスには同時に 1 つのアクティブな run しかないものとして扱います。wandb.init() を再度呼び出すと、W&B は設定に応じて同じ run を返すか、新しい run を開始する前に既存の run を終了します。
このガイドでは、reinit を使用して wandb.init() の動作を変更し、1 つの Python プロセス内で複数の run を有効にする方法を説明します。
要件1 つの 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 を扱う例を参照してください。 | はい | 並行するプロセスの作成と管理に適しています。たとえば、「primary」の run をアクティブなまま維持しつつ、「secondary」の run を開始または終了する場合です。 |
finish_previous | 新しい run を wandb.init() で作成する前に、すべてのアクティブな run を run.finish() で終了します。ノートブック以外の環境でのデフォルトの動作です。 | はい | 順次実行されるサブプロセスを、それぞれ個別の run に分けたい場合に適しています。 |
return_previous | 直近の未終了の run を返します。ノートブック環境でのデフォルトの動作です。 | いいえ |
W&B は、Hugging Face Trainer、Keras コールバック、PyTorch Lightning など、単一のグローバル run を前提とする W&B Integrations では
create_new モードをサポートしていません。これらのインテグレーションを使用する場合は、各サブ実験を別々のプロセスで実行してください。reinit を指定する
-
reinit引数を指定して、wandb.init()を直接使用します。 -
wandb.init()を使用し、wandb.Settingsオブジェクトをsettingsパラメーターに渡します。Settingsオブジェクト内でreinitを指定します。 -
wandb.setup()を使用して、現在のプロセス内のすべての run に対するreinitオプションをグローバルに設定します。これは、動作を一度だけ設定し、そのプロセス内で後続のすべてのwandb.init()call に適用したい場合に便利です。 -
環境変数
WANDB_REINITで、reinitに設定する値を指定します。環境変数を定義すると、reinitオプションがwandb.init()call に適用されます。
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 A にさらにデータをログします。
- 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 が正しくクローズされます。