見出し画像

W&B Automationsを用いたモデルCIのチュートリアル

W&B Automationsを使用して、すべての新しい候補モデルに対して評価を実行する例をご紹介します(ハンズオン用Colabはこちら)。

本ブログ記事はCarey Phelps, Thomas Capelleによって執筆され、W&B Fully Connectedで公開された"A Tutorial on Model CI with W&B Automations"の日本語訳です。

Weights & Biases のnoteをフォローしてください

イントロダクション

このレポートでは、Weights & BiasesのAutomations機能を使って新しいモデル候補の自動評価をトリガーする方法を学びます。これにより、各モデルのパフォーマンスを同じテストセットで標準化された評価スイートを用いて簡単に比較することができます。これは、異なるチームが新しいモデルを訓練し、パフォーマンスを評価して性能低下を特定し、最終的には最新のモデルを本番環境にデプロイするというプロダクションMLパイプラインを構築する際に強力な機能です。

W&Bを用いたモデルCIの概要

数ステップの簡単な手順でモデルのテストを自動化できます:

  1. W&Bで訓練と評価のジョブを作成 します

  2. 新しいモデルに対して評価ジョブを簡単に再実行するための自動化を設定します

  3. 新しいバージョンが利用可能になるたびに、モデルを自動的にテストします


Automationsを使って「モデルCI(継続的インテグレーション)」を実際に動かしてみましょう。

1. モデルの訓練とテスト

W&Bアカウントを作成する

まだW&Bアカウントを持っていない場合は、モデルの追跡のためにW&Bにサインアップしてください。次に、ローカルマシンにwandbをインストールし、アカウントにログインします:

pip install wandb
wandb login

環境構築

examplesのフォルダを開いて、必要なライブラリをインストールします。:

# in your terminal
git clone https://github.com/nejumi/examples.git
cd examples/examples/wandb-automations
pip install -r requirements.txt

ディレクトリ内のファイルを閲覧して、実行するコードの概要を把握しておきましょう:

  • train.py:モデルを訓練し、訓練メトリクスを出力します

  • eval.py:訓練されたモデルを評価し、テストセットでのモデルの予測をログに記録します

  • utils.py:W&B Artifactsを使用してsave_modelとload_modelの関数を定義しています

モデルバージョンをログしてリンクする

この例では、MNISTデータセットを用いて簡単なモデルを訓練します。

ターミナルで、以下のコマンドを実行してモデルの訓練を開始しましょう:

python train.py

上記の動画内の例では、Apple MacBookで実行するために、--device=mps オプションを渡します 😎

新しいモデルバージョンを登録済みのモデルにリンクする

このスクリプトはutils.pyを使用して訓練されたモデルをArtifactとして保存し、そのモデルを自動的にモデルレジストリにリンクします。次のステップで評価する際に、このモデルレジストリからモデルを取得します。

ターミナルで、以下のコマンドを実行してモデルの評価を開始します:

python eval.py

このスクリプトはutil.pyを使用して、レジストリから保存されたモデルを取得し、ホールドアウトされたテストセットで予測を行います。

💡このスクリプトを一度実行することで、W&Bは新しい再利用可能なジョブを作成し、それを異なる計算インフラストラクチャにスケールすることができます。
訳者注: ジョブの作成には複数の構築方法があり、必ずしもRunを一度実行してキャプチャする必要はありません。詳細はドキュメントをご参照ください

(任意)ジョブの名前を変更する

ジョブがGitリポジトリから作成されると、リポジトリ内のスクリプトへの完全なパスを含めようとするため、名前が非常に長くなることがあります。UI上でジョブ名の右にある名前変更アイコンをクリックすることで、ジョブの名前を簡単に変更することができます。

このジョブはGitから作成されたもので、名前は長くなってしまっています:job-git_github.com_wandb_examples.git_examples_wandb-automations_eval.py

(任意)テーブルにカスタム列を追加する

テーブルで、列名の隣にあるメニューをクリックし、新しい列を挿入し、セル式として row["label"] == row["pred"] を入力します。これにより、モデルが正確な予測をした場合に各行を「True」と表示し、不正確な予測の場合は「False」と表示します。

次に、その新しい列でグループ化して、正確または不正確にラベル付けされた行をすべて確認します。

この例では、223の例が正確に、43の例が不正確にラベル付けされたことがわかります。

2. Automationのセットアップ

次に、評価を自動化したいと考えています。これは、新しい有望な候補モデルが得られるたびに、それを自動的にテストし、結果をW&Bに報告できるようにすることを意味します。

Automationを作成する

登録済みのモデルでAutomationを設定します。これは、テストが必要な新しい候補モデルが来たときにそれを監視するツールです。

モデルレジストリで、新しく登録されたMNIST Classifierモデルを見つけます。右側のメニューをクリックし、次に「New automation」をクリックします。

Automationを作成するための設定を入力してください:

  • イベントタイプ (Event type):登録済みのモデルに新しいバージョンが追加される

  • 登録モデル (Registered model):MNIST Classifier

  • ジョブ (Job):wandb_automations/job-eval

  • 宛先プロジェクト (Destination project):wandb_automations

  • キュー (Queue):"Starter queue"を作成する

  • Automationの名前 (Automation name):Model CI

Starter queueを表示する

Automationを作成すると、キューへのリンクを含むツールチップが表示されます。その「View queue(キューを表示)」をクリックします。または、そのリンクを見逃した場合は、Launchページを開いて、Starter queueの隣にある「View queue(キューを表示)」をクリックします。

Starter queueを開いたとき、最初はジョブがキューに入っていない状態で、エージェントもまだ動作していないはずです。

エージェントを起動する

次に、キューからジョブを実行する軽量なプロセス、すなわちエージェントを設定します。この例では、ローカルマシン上でDockerを使うシンプルな方法を用いますが、Launchはプロダクションワークフローでクラウドの計算能力を活用するために、スケーラブルなKubernetesクラスタをサポートしていますので、そちらも是非ご活用ください。

ローカルマシンでDockerが動作していない場合は、Docker Desktopをインストールしてください。

pip install wandb --upgrade
wandb launch-agent -e examples -q "Starter queue"

3. モデルを自動的にテストする

最後に、新しいモデルを訓練し、それが自動的に評価される様子を見てみましょう。

訳者注: 今回のサンプルコードではutils.py内でモデルレジストリへの登録まで実行しているために手動でモデルレジストリにモデルを登録することなくAutomationも自動的にキックされていますが、あくまでトリガーは「モデルレジストリに登録済みのモデルに新しいバージョンが追加される」であることにご注意ください。

新しいモデルを訓練する

wandb-automationsリポジトリで、モデル訓練スクリプトを再実行し、新しいモデルを試してみましょう:

python train.py --model_name="resnet18"

ターミナルで、評価ジョブが自動的にダウンロードされ、ローカルマシンで設定される様子を確認してください。

UI上で評価結果を見てみましょう。これで、テストの結果を確認することができました。

これでゴールです!🎉

W&Bを用いてモデルのテストの自動化に成功しました。
ご意見やフィードバックを共有してください!W&B JapanコミュニティSlackでお待ちしております。

この記事が気に入ったらサポートをしてみませんか?