Skip to main content
wandb.init() を使用して W&B Run を初期化します。 デフォルトでは、W&B は Python プロセスごとに 1 つのアクティブな run をサポートします。アクティブな run がある状態で wandb.init() を呼び出すと、W&B はアクティブな run を返すか、新しい run を作成する前にその run を終了します。この動作は、環境と reinit 設定によって異なります。 1 つのプロセス内で複数のアクティブな run を管理するには、1 つのプロセス内での複数の run を参照してください。
W&B では、wandb.init() を呼び出す際にコンテキストマネージャー (with ブロック) を使用することを推奨しています。これにより、ブロックの終了時に W&B が run を終了し、そのデータをアップロードします。

プロセスごとに 1 つの run

次の例では、run を初期化します。
basic.py
このコマンドを実行すると、次のような出力が表示されます。
この例では、W&B は nico entity の awesome-project project に run exalted-darkness-6 をログします。W&B はこの run に一意の ID pgbn9y21 を割り当てます。

1 つのプロセス内で複数の run を扱う

wandb.init() または wandb.Settingsreinit パラメーターを使用して、1 つの Python プロセス内で複数の run を管理します。たとえば、プライマリ run をアクティブなまま維持しながら、ほかのタスク用に短時間で終了するセカンダリ run を作成できます。 一般的なユースケースには、次のようなものがあります。
  • プライマリ run をアクティブなまま維持しながら、評価やサブタスク用のセカンダリ run を作成する。
  • 1 つのスクリプトから複数のサブ実験を実行する。
  • 1 つのプロセスから、異なるタスクや期間を別々の run にログする。
要件1 つの Python プロセス内で複数の run を管理するには、W&B Python SDK バージョン v0.19.10 以降が必要です。

reinit オプション

reinit パラメーターを使用すると、別の run がアクティブな状態で wandb.init() を呼び出したときの動作を制御できます。次の表では、利用可能なオプションと一般的なユースケースを比較します。パラメーターの完全な定義については、wandb.init() のリファレンスドキュメントを参照してください。
W&B は、Hugging Face Trainer、Keras コールバック、PyTorch Lightning など、単一のグローバル run を前提とするW&B インテグレーションでは 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 を設定する方法の概要を示しています。

例: 並行プロセス

スクリプトの実行中ずっと開いたままのプライマリプロセスを維持しつつ、そのプライマリプロセスを終了せずに、短命なセカンダリプロセスを定期的に生成したいとします。たとえばこのパターンは、プライマリ run でモデルをトレーニングしながら、評価の計算やその他の処理を別の run で行いたい場合に役立ちます。 これを実現するには、reinit="create_new" を使用して複数の run を初期化します。この例では、“Run A” はスクリプト全体を通して開いたままのプライマリプロセスであり、“Run B1” と “Run B2” は評価などのタスク用の短命なセカンダリ run です。 大まかなワークフローは次のようになります。
  1. wandb.init() でプライマリプロセス Run A を初期化し、トレーニングのメトリクスをログします。
  2. Run B1 を (wandb.init() で) 初期化し、データをログしてから終了します。
  3. Run A にさらにデータをログします。
  4. Run B2 を初期化し、データをログしてから終了します。
  5. Run A へのログを続けます。
  6. 最後に、最後に Run A を終了します。
次の Python コード例は、このワークフローを示しています。
前の例では、次の重要な点に注意してください。
  1. reinit="create_new" を指定すると、wandb.init() を呼び出すたびに新しい run が作成されます。
  2. 各 run への参照は自分で保持します。wandb.run は、reinit="create_new" で作成された新しい run を自動では参照しません。新しい run は run_arun_b1 などの変数に保存し、必要に応じてそれらのオブジェクトに対して .log().finish() を呼び出してください。
  3. メインの run は開いたままにしておきつつ、サブ run は必要なタイミングでいつでも終了できます。
  4. run へのログが完了したら、run.finish() を呼び出して終了してください。これにより、すべてのデータがアップロードされ、run が正しくクローズされます。