
このノートブックの内容
このチュートリアルでは、W&B を PyTorch のトレーニングコードに統合し、実験のトラッキング、メトリクスと勾配のログ、モデルのバージョン管理を行う方法を説明します。既存の PyTorch パイプラインに実験管理を追加する際にご活用ください。
インストール、インポート、ログイン
実験を定義する前に、環境を設定して W&B で認証します。ステップ 0: W&B をインストールする
まず、pip を使用して wandb ライブラリをインストールします。
ステップ 1: W&B をインポートしてログインする
W&B サービスにデータをログするには、ログインが必要です。 W&B を初めて使用する場合は、表示されるリンクから無料アカウントに登録してください。実験とパイプラインを定義する
W&B のインストールとセッションの認証が完了したら、実験の設定と、その設定を使用するトレーニングパイプラインを定義します。wandb.init() でメタデータとハイパーパラメーターをトラッキングする
まず、プログラムで実験を定義します。ハイパーパラメーターには何があるでしょうか。この run にはどのようなメタデータが関連付けられるでしょうか。
一般的なワークフローでは、これらの情報を config 辞書 (または同様のオブジェクト) に格納し、必要に応じて参照します。
この例では、一部のハイパーパラメーターのみを変化させ、残りはハードコーディングしています。モデルのどの部分でも config に含めることができます。
この例には、MNIST データセットと畳み込みアーキテクチャに関するメタデータも含まれています。後で同じ project で CIFAR を使って全結合アーキテクチャを扱う場合なども、このメタデータを使って run を区別できます。
- モデルと、それに関連するデータおよびオプティマイザーを
makeします。 - それに応じてモデルを
trainします。 testを実行して、トレーニングの結果を確認します。
wandb.init() のコンテキスト内で実行される点です。この関数を呼び出すと、コードと W&B サーバーとの間に通信経路が確立されます。
config 辞書を wandb.init() に渡すと、その情報はすべてただちに W&B にログされます。そのため、実験で使用するよう設定したハイパーパラメーターの値を常に把握できます。
選択してログした値が確実にモデルで使用されるよう、W&B ではオブジェクトの run.config コピーを使用することを推奨しています。具体例については、以下の make の定義を参照してください。
パイプラインを定義したら、以降のセクションでは、データとモデルのセットアップ、トレーニング、テストの各ステップを順に実装していきます。
補足: W&B は独立したプロセスでコードを実行するため、W&B 側で問題が発生してもコードがクラッシュすることはありません。問題が解決したら、wandb sync を使用してデータをログできます。
データの読み込みとモデルを定義する
次に、データの読み込み方法とモデルの構成を指定します。 この部分は重要ですが、内容はwandb を使わない場合と変わりません。
wandb を使用してもモデルの定義方法は変わらないため、この例では標準的な ConvNet アーキテクチャを使用します。このコードを自由に変更して実験してください。W&B はすべての結果を Forge にログします。
トレーニングロジックを定義する
model_pipeline の次のステップとして、train の方法を指定します。ここでは、トレーニングの進行に合わせて、W&B インテグレーションが勾配、パラメーター、メトリクスをトラッキングします。
ここで使用する wandb 関数は、watch と log の 2 つです。
run.watch() で勾配をトラッキングし、それ以外はすべて run.log() でトラッキングする
run.watch() は、トレーニングの log_freq ステップごとに、モデルの勾配とパラメーターをログします。
run.watch() はトレーニングを開始する前に呼び出してください。ログモード、複数のモデルの扱い、パフォーマンスに関するヒントについては、wandb.watch で勾配とモデルの重みをログするにはどうすればよいですか?を参照してください。
それ以外のトレーニングコードは変更不要です。エポックとバッチを反復処理し、順伝播と逆伝播を実行して、optimizer を適用します。
run.log() に渡します。
run.log() は、strings をキーとする辞書を受け取ります。これらの strings は、値として渡されるログ対象のオブジェクトを識別します。また、オプションとして、トレーニングの現在の step をログすることもできます。
補足: モデルが処理したサンプル数を使用すると、異なるバッチサイズ間で比較しやすくなりますが、ステップ数やバッチ数をそのまま使用することもできます。長時間にわたるトレーニング run では、epoch 単位でログするのも有効です。
テストロジックを定義する
モデルのトレーニングが完了したら、モデルをテストします。たとえば、本番環境から取得した新しいデータでモデルを実行したり、手作業で厳選したサンプルに適用したりします。テストの段階は、トレーニング済みモデルを保存するのにも適したタイミングです。オプション: run.save() を呼び出す
モデルのアーキテクチャと最終的なパラメーターをディスクに保存するなら、このタイミングが適しています。幅広い互換性を確保するため、モデルを Open Neural Network eXchange (ONNX) 形式 で export します。
そのファイル名を run.save() に渡すと、モデルのパラメーターが W&B のサーバーに保存されます。これで、どの .h5 や .pb がどのトレーニング run のものか分からなくなる心配はありません。
モデルの保存、バージョン管理、配布に使える wandb のより高度な機能については、Artifacts ツール を参照してください。
トレーニングを実行し、wandb.ai でメトリクスをリアルタイムに確認する
パイプライン全体を定義し、W&B のコードを数行追加したので、すべてが追跡される実験を実行する準備が整いました。 W&B からはいくつかのリンクが表示されます。ドキュメント、Project page (project 内のすべての run を整理するページ)、Run page (この run の結果が保存されるページ) です。 Run page にアクセスし、次のタブを確認してください。- Charts: トレーニング全体を通じて、モデルの勾配、パラメーター値、損失がログされます。
- System: ディスク I/O 使用率、CPU および GPU のメトリクスなどのシステムメトリクスが表示されます。
- Logs: トレーニング中に標準出力へ出力された内容のコピーがすべて含まれます。
- Files: トレーニングが完了したら、
model.onnxをクリックすると、Netron model viewer でネットワークを表示できます。
with wandb.init() ブロックを抜けて run が終了すると、W&B はセルの出力に結果のサマリーも表示します。
sweep でハイパーパラメーターをテストする
この例では、1 組のハイパーパラメーターのみを扱いました。しかし、ほとんどの ML ワークフローでは、複数のハイパーパラメーターを試しながら反復することが重要です。 W&B Sweeps を使用すると、ハイパーパラメーターのテストを自動化し、候補となるモデルや最適化戦略の空間を探索できます。これにより、前述の単一設定による run にとどまらず、規模を拡大できます。 W&B Sweeps を使用したハイパーパラメーター最適化のデモを紹介する Colab ノートブックをご覧ください。 W&B でハイパーパラメーター sweep を実行する手順は、次の 3 ステップです。- sweep を定義する: 探索するパラメーター、探索戦略、最適化するメトリクスなどを指定する辞書または YAML ファイルを作成します。
- sweep を初期化する:
sweep_id = wandb.sweep(sweep_config) - sweep エージェントを実行する:
wandb.agent(sweep_id, function=train)
