wandb.init() を使用して W&B Run を初期化します。
デフォルトでは、W&B は wandb.init() を呼び出す際、各 Python プロセスにアクティブな Run が一度に 1 つだけ存在することを想定しています。再度 wandb.init() を呼び出すと、W&B は同じ Run を返すか、あるいは古い Run を終了させてから新しい Run を開始します。同じプロセス内での複数の wandb.init() 呼び出しを W&B がどのように処理するかは、環境(ノートブックかそれ以外か)および reinit 設定によって異なります。
同一プロセス内で複数のアクティブな Run を管理する方法については、1つのプロセス内での複数の Run を参照してください。
W&B では、
wandb.init() を呼び出す際に with ブロックを使用することを推奨しています。これにより、ブロックが終了したときに W&B が Run を適切に完了させ、すべてのデータをアップロードすることが保証されます。プロセスごとに単一の Run
以下のコードスニペットの例は、W&B Python SDK をインポートして Run を初期化する方法を示しています。basic.py
nico の下の Project awesome-project に Run exalted-darkness-6 をログ記録していることが示されています。pgbn9y21 は、W&B がこの Run に対して生成した一意の Run ID です。
1つのプロセス内での複数の Run
単一の Python プロセス内で複数の Run を管理します。これは、メインのプロセスをアクティブに保ちながら、サブタスクのために短時間のセカンダリプロセスを作成したいワークフローで役立ちます。主なユースケースは以下の通りです。- スクリプト全体で 1 つの「プライマリ」Run をアクティブに保ちつつ、評価やサブタスクのために短時間の「セカンダリ」Run を立ち上げる。
- 単一のファイル内でサブ実験(sub-experiments)をオーケストレーションする。
- 1 つの「メイン」プロセスから、異なるタスクや期間を表す複数の Run に対してログを記録する。
wandb.init() を呼び出す際、各 Python プロセスにアクティブな Run が一度に 1 つだけ存在することを想定しています。再度 wandb.init() を呼び出すと、設定に応じて、W&B は同じ Run を返すか、あるいは古い Run を終了させてから新しい Run を開始します。
このガイドでは、reinit を使用して wandb.init() の振る舞いを変更し、単一の Python プロセスで複数の Run を有効にする方法について説明します。
要件単一の Python プロセス内で複数の Run を管理するには、W&B Python SDK バージョン
v0.19.10 以降が必要です。reinit オプション
reinit パラメータを使用して、W&B が複数の wandb.init() 呼び出しをどのように処理するかを設定します。次の表は、有効な引数とその効果を説明しています。
| 説明 | Run を作成するか? | ユースケースの例 | |
|---|---|---|---|
create_new | 既存のアクティブな Run を終了させずに、wandb.init() で新しい Run を作成します。W&B はグローバルな wandb.Run を新しい Run に自動的に切り替えません。各 Run オブジェクトを自身で保持する必要があります。詳細は、以下の 1つのプロセス内での複数 Run の例 を参照してください。 | はい | 並行プロセスの作成と管理に最適です。例えば、「セカンダリ」Run を開始または終了させる間、アクティブなまま維持する「プライマリ」Run などです。 |
finish_previous | wandb.init() で新しい Run を作成する前に、すべてのアクティブな Run を run.finish() で終了させます。ノートブック以外の環境でのデフォルトの振る舞いです。 | はい | 連続するサブプロセスを個別の Run に分割したい場合に最適です。 |
return_previous | 終了していない最新の Run を返します。ノートブック環境でのデフォルトの振る舞いです。 | いいえ |
W&B は、Hugging Face Trainer、Keras コールバック、PyTorch Lightning など、単一のグローバル Run を想定している W&B Integrations における
create_new モードをサポートしていません。これらのインテグレーションを使用する場合は、各サブ実験を別々のプロセスで実行する必要があります。reinit の指定方法
-
wandb.init()でreinit引数を直接使用する: -
wandb.init()を使用し、settingsパラメータにwandb.Settingsオブジェクトを渡す。Settingsオブジェクト内でreinitを指定します: -
wandb.setup()を使用して、現在のプロセス内のすべての Run に対してreinitオプションをグローバルに設定する。これは、一度振る舞いを設定し、そのプロセスにおける以降のすべてのwandb.init()呼び出しに適用したい場合に便利です。 -
環境変数
WANDB_REINITでreinitの目的の値を指定する。環境変数を定義すると、wandb.init()の呼び出しにreinitオプションが適用されます。
wandb.init() を呼び出すたびに新しい Run を作成するように W&B をセットアップする方法の概要を示しています。
例:並行プロセス
スクリプトの生存期間全体を通じて開いたままにするプライマリプロセスを作成し、プライマリプロセスを終了させることなく、定期的に短時間のセカンダリプロセスを生成したい場合を考えます。例えば、プライマリ Run でモデルをトレーニングし、別の Run で評価の計算や他の作業を行う場合にこのパターンが役立ちます。 これを実現するには、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.finish()で Run を終了させてください。これにより、すべてのデータがアップロードされ、Run が適切に閉じられます。