メインコンテンツへスキップ
PyTorch Lightning は、PyTorch コードを整理し、分散トレーニングや 16 ビット精度などの高度な機能を追加できる軽量なラッパーを提供します。W&B は、ML 実験をログするための軽量なラッパーを提供します。この 2 つを自分で組み合わせる必要はありません。PyTorch Lightning ライブラリには、WandbLogger を通じて W&B が直接組み込まれています。 このページでは、WandbLogger を使用して、メトリクスのトラッキング、ハイパーパラメーターのログ、モデル チェックポイントの アーティファクト としての保存、メディアのログ、PyTorch Lightning と W&B を使用したマルチ GPU トレーニングの実行を行う方法を説明します。

Lightningと統合する

以下のセクションでは、W&B で認証し、wandb ライブラリをインストールして、Lightning の Trainer または Fabric インスタンスに WandbLogger を設定する方法を説明します。
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キーはすぐにコピーし、パスワードマネージャーなどの安全な場所に保存してください。
プロフィールから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 のドキュメントを参照してください。

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

W&B でハイパーパラメーターをログすると、Runs を比較して結果を再現できます。お使いの logger に対応する method を使用してください。

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

ハイパーパラメーターとあわせて追加の設定値を取得するには、run の設定を直接更新します。

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

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

メトリクスをログする

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

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

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

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

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

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

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

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

分散トレーニングを実行する場合、各 rank で 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 オブジェクトに依存しないようにすることです。

エンドツーエンドの手順については、Colab ノートブック付きの動画チュートリアルに沿って進めることができます。

よくある質問

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

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

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

W&B はモデル チェックポイントを保存します。これらは表示したり、今後の Runs で使用するためにダウンロードしたりできます。W&B は、GPU 使用率やネットワーク I/O などのシステムメトリクスも取得します。さらに、ハードウェアや OS の情報などの環境情報も取得します。コードの状態も取得し、これには Git コミットと差分パッチ、ノートブックの内容、セッション履歴が含まれます。また、標準出力に出力される内容もすべて取得します。

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

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