WandbLogger を通じて、PyTorch Lightning ライブラリに直接組み込まれています。
Lightning と連携する
- PyTorch Logger
- Fabric Logger
wandb.log() を使う場合:
WandbLogger は Trainer の global_step を使って W&B にログを送信します。コード内で wandb.log を追加で直接呼び出す場合は、wandb.log() の step 引数は 指定しないでください。代わりに、他のメトリクスと同様に Trainer の global_step をログに記録してください:
サインアップしてAPIキーを作成する
よりシンプルに行うには、User Settings に直接アクセスしてAPIキーを作成してください。作成したばかりのAPIキーをすぐにコピーし、パスワードマネージャーなどの安全な場所に保管してください。
- 右上隅にあるユーザープロファイルアイコンをクリックします。
- User Settings を選択し、API Keys セクションまでスクロールします。
wandb ライブラリをインストールしてログインする
wandb ライブラリをインストールし、ログインするには次の手順を実行します。
- Command Line
- Python
- Python notebook
-
WANDB_API_KEY環境変数 を自身の APIキー に設定します。 -
wandbライブラリをインストールし、ログインします。
PyTorch Lightning の WandbLogger を使用する
WandbLogger クラスがあります。
Lightning と連携させるには、WandbLogger をインスタンス化して、Lightning の Trainer または Fabric に渡します。
- PyTorch Logger
- Fabric Logger
一般的な logger 引数
WandbLogger で最もよく使用されるパラメータです。すべての logger 引数の詳細については、PyTorch Lightning のドキュメントを参照してください。
| Parameter | Description |
|---|---|
project | ログを書き込む wandb のプロジェクトを指定します |
name | wandb の run に付ける名前を指定します |
log_model | log_model="all" の場合はすべてのモデルを、log_model=True の場合は学習終了時にモデルをログします |
save_dir | データの保存先パス |
ハイパーパラメータをログに記録する
- PyTorch ロガー
- Fabric ロガー
追加のコンフィグパラメータをログに記録する
勾配、パラメータヒストグラム、モデルのトポロジーを記録する
wandblogger.watch() にモデルオブジェクトを渡します。詳しくは、PyTorch Lightning の WandbLogger ドキュメントを参照してください。
メトリクスを記録する
- PyTorch Logger
- Fabric Logger
WandbLogger を使用している場合、LightningModule 内の training_step や validation_step メソッドなどで self.log('my_metric_name', metric_vale) を呼び出すことで、メトリクスを W&B に記録できます。以下のコードスニペットは、メトリクスおよび LightningModule のハイパーパラメータを記録するように LightningModule を定義する方法を示しています。この例では、メトリクスを計算するために torchmetrics ライブラリを使用しています。メトリクスの最小値/最大値をログする
define_metric 関数を使うと、W&B のサマリーメトリクスにそのメトリクスの最小値、最大値、平均値、またはベスト値のどれを表示するかを指定できます。define_metric が使われない場合は、最後にログされた値がサマリーメトリクスに表示されます。詳しくは define_metric のリファレンスドキュメントとこちらのガイドを参照してください。
W&B サマリーメトリクスで最大の検証精度を追跡するように W&B に指示するには、wandb.define_metric を学習の開始時に一度だけ呼び出します。
- PyTorch ロガー
- Fabric ロガー
モデルをチェックポイントとして保存する
ModelCheckpoint コールバックを使用し、WandbLogger の log_model 引数を設定します。
- PyTorch Logger
- Fabric Logger
- Logger 経由
- wandb 経由
- PyTorch Logger
- Fabric Logger
画像、テキストなどをログに記録する
WandbLogger には、メディアをログに記録するための log_image、log_text、log_table メソッドがあります。
Audio、Molecules、Point Clouds、3D Objects など、その他のメディアタイプをログに記録するには、wandb.log や trainer.logger.experiment.log を直接呼び出すこともできます。
- 画像をログに記録する
- テキストをログに記録する
- テーブルをログに記録する
WandbLogger 経由で W&B にいつログを記録するかを制御できます。この例では、検証用画像と予測結果のサンプルをログに記録しています。
Lightning と W&B で複数 GPU を使用する
wandb.run オブジェクトにアクセスできるのはランク 0 のプロセスだけであり、ランク 0 以外のプロセスでは wandb.run = None になります。これにより、ランク 0 以外のプロセスが失敗する可能性があります。このような状況では、ランク 0 のプロセスが、すでにクラッシュしているランク 0 以外のプロセスが合流するのを待ち続けるため、デッドロック に陥る可能性があります。
したがって、学習コードの構成方法には注意が必要です。推奨されるのは、コードが wandb.run オブジェクトに依存しないように構成することです。
例
よくある質問
W&B は Lightning とどのように連携しますか?
loggers API に基づいており、これにより多くのロギングコードをフレームワーク非依存な形で記述できます。複数の Logger は Lightning の Trainer に渡され、この API が提供する充実した フックおよびコールバックの仕組み に応じて呼び出されます。これにより、研究コードを実装やロギング用のコードから明確に分離して保つことができます。
追加のコードなしで、このインテグレーションは何を記録しますか?
学習セットアップで wandb.run を使う必要がある場合はどうすればよいですか?
os.environ["WANDB_DIR"] を使ってモデルチェックポイント用のディレクトリを設定できます。こうすることで、rank 0 以外のプロセスでも wandb.run.dir にアクセスできます。