メインコンテンツへスキップ
PyTorch Lightning は、PyTorch コードを整理し、分散トレーニングや 16 ビット精度などの高度な機能を簡単に追加できる軽量なラッパーを提供します。W&B は、ML 実験をログするための軽量なラッパーを提供します。しかし、この 2 つを自分で組み合わせる必要はありません。W&B は、WandbLogger を通じて PyTorch Lightning ライブラリに直接統合されています。

Lightningと統合する

wandb.log() の使用: WandbLogger は、Trainer の global_step を使って W&B にログします。コード内で wandb.log() を直接追加で呼び出す場合は、wandb.log()step 引数は使用しないでください代わりに、他のメトリクスと同様に Trainer の global_step をログしてください。
対話型ダッシュボード

サインアップしてAPIキーを発行する

APIキーを使うと、お使いのマシンをW&Bに対して認証できます。APIキーはプロフィールから発行できます。
より手早く行うには、User Settings にアクセスしてAPIキーを作成してください。APIキーはすぐにコピーし、パスワードマネージャーなどの安全な場所に保存してください。
  1. 右上にあるプロフィールアイコンをクリックします。
  2. User Settings を選択し、API Keys セクションまでスクロールします。

wandb ライブラリをインストールしてログインする

wandb ライブラリをローカル環境にインストールしてログインするには、次の手順を実行します。
  1. WANDB_API_KEY 環境変数に APIキー を設定します。
  2. wandb ライブラリをインストールし、ログインします。

PyTorch Lightning の WandbLogger を使用する

PyTorch Lightning には、メトリクス、モデルの重み、メディアなどをログするための WandbLogger クラスが複数あります。 Lightning と統合するには、WandbLogger をインスタンス化して、Lightning の Trainer または Fabric に渡します。

よく使われるロガー引数

以下は、WandbLogger でよく使われるパラメーターの一部です。ロガー引数の詳細については、PyTorch Lightning のドキュメントを参照してください。
パラメーター説明
projectログ先の wandb プロジェクトを指定します
namewandb の run に名前を付けます
log_modellog_model="all" の場合はすべてのモデルをログし、log_model=True の場合はトレーニング終了時にログします
save_dirデータの保存先パス

ハイパーパラメーターをログする

追加の設定パラメーターをログする

勾配、パラメーターのヒストグラム、モデルトポロジーをログする

トレーニング中のモデルの勾配やパラメーターを監視するには、wandblogger.watch() にモデルオブジェクトを渡します。詳しくは、PyTorch Lightning の WandbLogger ドキュメントを参照してください

メトリクスをログする

WandbLogger を使用している場合は、LightningModuletraining_stepvalidation_step メソッド内で self.log('my_metric_name', metric_vale) を呼び出すことで、メトリクスを W&B にログできます。以下のコードスニペットは、メトリクスと LightningModule のハイパーパラメーターをログするように LightningModule を定義する方法を示しています。この例では、メトリクスの計算に torchmetrics ライブラリを使用します。

メトリクスの最小値/最大値をログする

wandb の define_metric 関数を使用すると、W&B summary メトリクスにそのメトリクスの最小値、最大値、平均値、または最良値のどれを表示するかを定義できます。define_metric _ を使用しない場合は、最後にログされた値が summary メトリクスに表示されます。詳細については、define_metricリファレンスドキュメントガイドを参照してください。 W&B summary メトリクスで検証 accuracy の最大値をトラッキングするには、トレーニングの開始時に wandb.define_metric() を一度だけ call します。

モデルのチェックポイントを保存する

モデル チェックポイントを W&B Artifacts として保存するには、 Lightning の ModelCheckpoint コールバックを使用し、WandbLoggerlog_model 引数を設定します。
latestbest のエイリアスは自動的に設定されるため、W&B Artifact からモデル チェックポイントを簡単に取得できます。
ログしたモデル チェックポイントは W&B Artifacts UI から確認でき、モデルの完全なリネージ情報も含まれます (UI でのモデル チェックポイントの例は こちら を参照してください) 。 ベストなモデル チェックポイントをブックマークしてチーム全体で一元管理するには、W&B Model Registry にリンクできます。 ここでは、ベストなモデルをタスク別に整理し、モデルのライフサイクルを管理し、ML ライフサイクル全体を通じて容易にトラッキングや監査を行い、webhook やジョブで下流のアクションを自動化できます。

画像、テキストなどをログする

WandbLogger には、メディアをログするための log_imagelog_textlog_table メソッドがあります。 wandb.log() または trainer.logger.experiment.log() を直接呼び出して、オーディオ、分子、ポイントクラウド、3D オブジェクトなど、ほかのメディアタイプをログすることもできます。
Lightning のコールバックシステムを使用すると、WandbLogger を介して W&B にいつログするかを制御できます。この例では、検証画像と予測のサンプルをログします。

Lightning と W&B で複数の GPU を使用する

PyTorch Lightning は、DDP インターフェースを通じてマルチ GPU をサポートしています。ただし、PyTorch Lightning の設計上、各 GPU をどのようにインスタンス化するかに注意が必要です。 Lightning では、トレーニングループ内の各 GPU (または ランク) を、同じ初期条件でまったく同じようにインスタンス化することが前提となっています。一方で、wandb.run オブジェクトにアクセスできるのは ランク 0 のプロセスだけで、0 以外の ランク のプロセスでは wandb.run = None になります。これにより、0 以外のプロセスが失敗する可能性があります。このような状況では、ランク 0 のプロセスは、すでにクラッシュした 0 以外の ランク のプロセスが合流するのを待ち続けるため、デッドロック に陥るおそれがあります。 そのため、トレーニングコードの設定方法には注意してください。推奨されるのは、コードを wandb.run オブジェクトに依存しないようにすることです。

Colab ノートブック付きの動画チュートリアルに沿って進めることができます。

よくある質問

W&B は Lightning とどのように統合されていますか?

主要なインテグレーションは Lightning loggers API に基づいており、そのおかげでロギングコードの大部分をフレームワーク非依存の形で記述できます。LoggerLightning Trainer に渡され、この API の充実した hook-and-callback system によってトリガーされます。これにより、研究用コードをエンジニアリングやロギングのコードから明確に分離できます。

追加のコードを書かなくても、インテグレーションは何をログしますか?

モデル チェックポイントは W&B に保存され、そこで確認したり、今後の run で使用するためにダウンロードしたりできます。さらに、GPU 使用率やネットワーク I/O などのシステム メトリクス、ハードウェアや OS などの環境情報、コードの状態 (git commit や diff patch、ノートブックの内容、セッション履歴を含む) 、および標準出力に出力された内容も取得します。

トレーニング設定で wandb.run を使用する必要がある場合はどうすればよいですか?

アクセスする必要がある変数のスコープは、自分で広げる必要があります。つまり、すべてのプロセスで初期条件が同じになるようにしてください。
その場合は、os.environ["WANDB_DIR"] を使用してモデル チェックポイントのディレクトリを設定できます。これにより、ランクが 0 以外の任意のプロセスから wandb.run.dir にアクセスできます。