WandbLogger を通じて W&B が直接組み込まれています。
このページでは、WandbLogger を使用して、メトリクスのトラッキング、ハイパーパラメーターのログ、モデル チェックポイントの アーティファクト としての保存、メディアのログ、PyTorch Lightning と W&B を使用したマルチ GPU トレーニングの実行を行う方法を説明します。
Lightningと統合する
wandb ライブラリをインストールして、Lightning の Trainer または Fabric インスタンスに WandbLogger を設定する方法を説明します。
- 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 ライブラリをローカル環境にインストールしてログインするには、次の手順を実行します。
- コマンドライン
- Python
- Python notebook
-
WANDB_API_KEY環境変数に APIキー を設定します。<>で囲まれた値はご自身の値に置き換えてください。 -
wandbライブラリをインストールし、ログインします。
PyTorch Lightning の WandbLogger を使用する
WandbLogger クラスが複数あります。トレーニングのセットアップに合ったクラスを選択してください。
Lightning と統合するには、WandbLogger をインスタンス化して、Lightning の Trainer または Fabric に渡します。
- PyTorch Logger
- Fabric Logger
よく使われるロガー引数
WandbLogger の一般的なパラメーターを示しています。ロガー引数の詳細については、PyTorch Lightning のドキュメントを参照してください。
ハイパーパラメーターをログする
- PyTorch Logger
- Fabric Logger
追加の設定パラメーターをログする
勾配、パラメーターのヒストグラム、モデルトポロジーをログする
wandb_logger.watch() にモデルオブジェクトを渡します。詳しくは、PyTorch Lightning の WandbLogger ドキュメントを参照してください。
メトリクスをログする
- PyTorch Logger
- Fabric Logger
WandbLogger を使用して W&B にメトリクスをログするには、LightningModule の training_step メソッドや validation_step メソッド内で self.log('my_metric_name', metric_value) を呼び出します。以下のコードスニペットは、メトリクスと LightningModule のハイパーパラメーターをログするように LightningModule を定義する方法を示しています。この例では、メトリクスの計算に torchmetrics ライブラリを使用します。メトリクスの最小値/最大値をログする
define_metric 関数を使用すると、W&B summary メトリクスにそのメトリクスの最小値、最大値、平均値、または最良値のどれを表示するかを定義できます。define_metric を使用しない場合は、最後にログされた値が summary メトリクスに表示されます。詳細は、logging 軸のカスタマイズ ガイドを参照してください。
W&B summary メトリクスで検証 accuracy の最大値をトラッキングするには、トレーニングの開始時に wandb.define_metric() を一度だけ呼び出します。
- PyTorch Logger
- Fabric Logger
モデルのチェックポイントを保存する
ModelCheckpoint コールバックを使用し、WandbLogger で log_model 引数を設定します。
- PyTorch Logger
- Fabric Logger
latest と best のエイリアスは自動的に設定されるため、W&B アーティファクト からモデル チェックポイントを簡単に取得できます。
- Logger 経由
- wandb 経由
- PyTorch Logger
- Fabric Logger
画像、テキストなどをログする
WandbLogger には、メディアをログするための log_image、log_text、log_table メソッドがあります。
wandb.log() または trainer.logger.experiment.log() を直接呼び出して、オーディオ、分子、ポイントクラウド、3D オブジェクトなど、ほかのメディアタイプをログすることもできます。
- 画像をログする
- テキストをログする
- Tables をログする
WandbLogger を介して W&B にいつログするかを制御できます。次の例では、検証画像と予測のサンプルをログします。
Lightning と W&B で複数の GPU を使用する
wandb.run をどのように参照するかによって、トレーニングが正常に進むか、デッドロックになるかが左右されることがあります。このセクションでは、要件を説明し、推奨されるパターンを示します。
PyTorch Lightning は、DDP インターフェースを通じてマルチ GPU をサポートしています。ただし、PyTorch Lightning の設計上、各 GPU をどのようにインスタンス化するかに注意が必要です。
Lightning では、トレーニングループ内の各 GPU (または rank) を、同じ初期条件でまったく同じようにインスタンス化することが前提となっています。一方で、wandb.run オブジェクトにアクセスできるのは rank 0 のプロセスだけで、0 以外の rank のプロセスでは wandb.run = None になります。これにより、0 以外のプロセスが失敗する可能性があります。このような状況では、rank 0 のプロセスは、すでにクラッシュした 0 以外の rank のプロセスが合流するのを待ち続けるため、デッドロックに陥るおそれがあります。
そのため、トレーニングコードの設定方法には注意してください。推奨されるのは、コードを wandb.run オブジェクトに依存しないようにすることです。
例
よくある質問
W&B は Lightning とどのように統合されていますか?
loggers API に基づいており、そのおかげでロギングコードの大部分をフレームワーク非依存の形で記述できます。Logger インスタンスは Lightning Trainer に渡され、この API の充実した hook-and-callback system によってトリガーされます。これにより、研究用コードをエンジニアリングやロギングのコードから明確に分離できます。
追加のコードを書かなくても、このインテグレーションは何をログしますか?
トレーニング設定で wandb.run を使用する必要がある場合はどうすればよいですか?
os.environ["WANDB_DIR"] を使用してモデル チェックポイントのディレクトリを設定できます。これにより、ランクが 0 以外の任意のプロセスから wandb.run.dir にアクセスできます。