Amazon Web Services ブログ

Weights & Biases を使用して ML 開発者の生産性を向上させる:Amazon SageMaker でのコンピュータービジョンの事例

このブログは、Improve ML developer productivity with Weights & Biases: A computer vision example on Amazon SageMaker を翻訳したのものです。

2023年7月:この投稿は正確性のためにレビューされました。
この投稿は、Weights & BiasesのThomas Capelle と共同執筆です。コンピュータビジョンや自然言語処理などのディープラーニング技術をより多くの組織が使用するにつれて、機械学習(ML)開発者のペルソナは、実験追跡、リネージ、およびコラボレーションを取り巻く拡張可能なツールが必要になります。実験追跡には、オペレーティングシステム、使用されるインフラストラクチャ、ライブラリ、入出力データセットなどのメタデータが含まれ、しばしば手動でスプレッドシートに追跡されます。リネージには、ML モデルを作成するために使用されたデータセット、変換、アルゴリズムの追跡が含まれます。コラボレーションには、ML 開発者が単一のプロジェクトで作業するだけでなく、チーム間やビジネスステークホルダーに結果を共有することも含まれます。このプロセスは一般的に、メール、スクリーンショット、PowerPoint プレゼンテーションを介して行われます。この投稿では、Weights & Biases(W&B)と Amazon SageMaker を使用して、自動運転開発のユースケースに対して物体を識別するモデルを訓練します。共同ソリューションが ML 開発者の手動作業を削減し、モデル開発プロセスの透明性を高め、プロジェクトに取り組むチームのコラボレーションを可能にする方法を紹介します。

この例は、皆さんが自分で試せるように Amazon SageMaker Studio で実行します。

Weights & Biases の概要

Weights & Biases は ML チームがより早くより良いモデルを構築するのに役立ちます。SageMaker ノートブックに数行のコードを追加するだけで、モデルのデバッグ、比較、再現を即座に行うことができます。これには、アーキテクチャ、ハイパーパラメータ、git コミット、モデルの重み、GPU 使用状況、データセット、予測などが含まれます。これにより、チームメイトとのコラボレーションも促進されます。

W&B は、世界中の最も革新的な企業や研究機関から 200,000 人以上の ML 実践者に信頼されています。無料で試すには、Weights & Biases にサインアップするか、W&B の AWS マーケットプレイスのリストを訪れてください。

SageMaker Studio の利用開始

SageMaker Studio は、機械学習 (ML) 用の最初の完全統合開発環境 (IDE) です。Studio は、ML 実践者やデータサイエンティストが、一箇所でモデルを構築、トレーニング、デプロイするための単一の Web ベース インターフェースを提供します。これは、数回のクリックで行うことができます。

Studio を始めるには、AWS アカウントと、Studio ドメインを作成する権限を持つ AWS Identity and Access Management (IAM) ユーザーまたはロールが必要です。Amazon SageMaker ドメインへのオンボードでドメインを作成し、Studio のビジュアル インターフェースとノートブックの使用方法に関する概要については、Studio のドキュメントを参照してください。

環境を設定する

この投稿では、独自のコードを実行する必要がありますので、GitHub からいくつかのノートブックをインポートしましょう。以下の GitHub リポジトリを例として使用するので、このノートブックをロードしましょう。

リポジトリをクローンするには、ターミナルまたは Studio UI を通じて行うことができます。ターミナルを通じてリポジトリをクローンするには、システムターミナルを開きます(ファイルメニューで「新規」を選択し、「ターミナル」を選択)し、以下のコマンドを入力します:

git clone https://github.com/wandb/SageMakerStudio

Studio UI からリポジトリをクローンするには、「SageMaker Studio で Git リポジトリをクローンする」を参照してください。

始めるには、01_data_processing.ipynb ノートブックを選択します。カーネルスイッチャープロンプトが表示されます。この例では PyTorch を使用しているので、事前に構築された PyTorch 1.10 Python 3.8 GPU 最適化イメージを選択してノートブックを開始します。アプリが起動しているのがわかり、カーネルが準備できたら、ノートブックの右上にインスタンスタイプとカーネルが表示されます。

ノートブックには追加の依存関係が必要です。このリポジトリは、追加の依存関係が記載された requirements.txt を提供しています。必要な依存関係をインストールするには、最初のセルを実行します:

%pip install -r requirements.txt

PyTorch アプリを起動するたびに自動的にパッケージをインストールするためのライフサイクル設定も作成することができます。詳しい手順やサンプル実装については、「Customize Amazon SageMaker Studio using Lifecycle Configurations(ライフサイクル設定を使用した Amazon SageMaker Studio のカスタマイズ)」を参照してください。

SageMaker Studio で Weights & Biases を使用する

Weights & Biases (wandb) は標準の Python ライブラリです。インストールされると、トレーニングスクリプトに数行のコードを追加するだけで、実験の記録が準備できます。私たちは既に requirements.txt ファイルを通じてインストールしています。以下のコードで手動でインストールすることもできます:

! pip install wandb

ケーススタディ: 自動運転車両のセマンティックセグメンテーション

データセット

この例では、ケンブリッジ-ドライビングラベル付きビデオデータベース(CamVid)を使用します。これには、オブジェクトクラスのセマンティックラベルが付いたビデオコレクションが含まれており、メタデータが完備されています。このデータベースは、各ピクセルを32のセマンティッククラスのいずれかに関連付ける Ground truth のラベルを提供します。私たちは、データセットを wandb.Artifact としてバージョン管理することができ、後でそれを参照することができます。以下のコードを参照してください:

with wandb.init(project="sagemaker_camvid_demo", job_type="upload"):
   artifact = wandb.Artifact(
       name='camvid-dataset',
       type='dataset',
       metadata={
           "url": 'https://s3.amazonaws.com/fast-ai-imagelocal/camvid.tgz',
           "class_labels": class_labels
       },
       description="The Cambridge-driving Labeled Video Database (CamVid) is the first collection of videos with object class semantic labels, complete with metadata. The database provides ground truth labels that associate each pixel with one of 32 semantic classes."
   )
   artifact.add_dir(path)
   wandb.log_artifact(artifact)

01_data_processing.ipynb ノートブックに沿って進めることができます。

また、データセットのテーブルもログに記録します。テーブルはリッチでパワフルな DataFrame のようなエンティティで、タブラー形式のデータをクエリしたり分析したりすることができます。データセットを理解し、モデルの予測を視覚化し、セントラルダッシュボードで洞察を共有することができます。

Weights & Biases テーブルは、画像、オーディオ、波形などの多くのリッチメディアフォーマットをサポートしています。メディアフォーマットの完全なリストについては、データタイプを参照してください。

次のスクリーンショットは、グラウンドトゥルースセグメンテーションを持つ生の画像のテーブルを示しています。また、このテーブルのインタラクティブバージョンも表示することができます。

モデルのトレーニング

現在、私たちはモデルを作成し、データセットでトレーニングすることができます。PyTorchfastai を使用してベースラインを迅速にプロトタイピングし、その後 wandb.Sweeps を使用してハイパーパラメータを最適化します。02_semantic_segmentation.ipynb ノートブックに沿って進めてください。ノートブックを開く際にカーネルを求められたら、最初のノートブックと同じカーネル、PyTorch 1.10 Python 3.8 GPU 最適化を選択してください。同じアプリを使用しているため、パッケージは既にインストールされています。

このモデルは、自律エージェントの視点から撮影されたシーンのピクセルごとのアノテーションを学ぶことを目的としています。モデルは、道路、歩行者、歩道、車など、指定されたシーンの各ピクセルを32の関連カテゴリに分類またはセグメント化する必要があります。テーブル上のセグメント化された画像のいずれかを選択し、セグメンテーション結果とカテゴリにアクセスするためのインタラクティブなインターフェースを利用できます。

fastai ライブラリは wandb との統合がありますので、Learner に WandbCallback を簡単に渡すことができます:

from fastai.callback.wandb import WandbCallback

loss_func=FocalLossFlat(axis=1)
model = SegmentationModel(backbone, hidden_dim, num_classes=num_classes)
wandb_callback = WandbCallback(log_preds=True)
   learner = Learner(
        data_loader,
        model,
        loss_func=loss_func,
        metrics=metrics,
        cbs=[wandb_callback],
    )

learn.fit_one_cycle(TRAIN_EPOCHS, LEARNING_RATE)

基本実験のために、私たちは UNet ペーパーに触発されたシンプルなアーキテクチャを timm の異なるバックボーンを用いて使用することにしました。私たちは Focal Loss を基準としてモデルを訓練しました。Weights & Biases を使用すると、実験の概要を簡単に作成し、以下のスクリーンショットに示されるように訓練結果を迅速に分析することができます。このダッシュボードはインタラクティブにも閲覧可能です。

スイープによるハイパーパラメータ探索

ベースのモデルのパフォーマンスを向上させるためには、最適なモデルとハイパーパラメータのセットを選択してトレーニングする必要があります。W&B を使用すると、このプロセスが容易になります。W&B はスウィープを使って、これを簡単に行うことができます。

バリデーションデータセット上でモデルのフォアグラウンド精度を最大化することを目的としたベイズ型ハイパーパラメータ検索を実行します。スウィープを実行するために、設定ファイル sweep.yaml を定義します。このファイル内で、使用する希望の方法を指定します: bayes と、検索するパラメータとそれらの対応する値。私たちの場合は、異なるバックボーン、バッチサイズ、損失関数を試します。また、学習率や重み減衰のような最適化パラメータも探索します。これらは連続値なので、分布からサンプリングします。スウィープには複数の設定オプションが用意されています。

program: train.py
project: sagemaker_camvid_demo
method: bayes
metric:
    name: foreground_acc
    goal: maximize
early_terminate:
    type: hyperband
    min_iter: 5
parameters:
    backbone:
        values: ["mobilenetv2_100","mobilenetv3_small_050","mobilenetv3_large_100","resnet18","resnet34","resnet50","vgg19"]
    batch_size: 
        values: [8, 16]
    image_resize_factor: 
        value: 4
    loss_function: 
        values: ["categorical_cross_entropy", "focal", "dice"]
    learning_rate: 
        distribution: uniform 
        min: 1e-5
        max: 1e-2
    weight_decay: 
        distribution: uniform
        min: 0.0 
        max: 0.05

その後、ターミナルで、wandb コマンドラインを使用してスイープを起動します:

$ wandb sweep sweep.yaml —-project="sagemaker_camvid_demo"

そして、以下のコードでこのマシン上でスイープエージェントを起動します:

$ wandb agent <sweep_id>

スイープが終了したら、パラレルコーディネートプロットを使用して、さまざまなバックボーンを持つモデルのパフォーマンスや異なるハイパーパラメータセットを探索できます。それに基づいて、どのモデルが最も良いパフォーマンスを示すかを確認できます。

次のスクリーンショットは、スイープの結果を示しており、パラレルコーディネートチャートやパラメータ相関チャートが含まれています。また、このスイープダッシュボードを対話的に表示することもできます。

このスイープから次のキーインサイトを導き出すことができます:

  • 低い学習率と低い Weight Decay は、より良いフォアグラウンド精度とダイススコアを生み出す結果となります。
  • バッチサイズは、メトリックと強い正の相関を持っています。
  • VGG ベースのバックボーンは、消失勾配を引き起こしやすいため、最終モデルのトレーニングには適していないかもしれません。(損失が発散したため除外されました。)
  • ResNet バックボーンは、メトリックに関して最も優れた全体的なパフォーマンスを示します。
  • 最終的なモデルには、メトリックの面で強力なパフォーマンスを示す ResNet34 または ResNet50 バックボーンを選択するべきです。

データとモデルリネージ

W&B アーティファクトは、データセットとモデルをバージョン管理することを容易にするために設計されました。ファイルを W&B で保存するか、既にバケットを持っていて W&B に追跡させたいかに関わらず、これらの機能は有用です。データセットやモデルファイルを追跡した後、W&B は自動的に各変更をログに記録し、ファイルの完全で監査可能な変更履歴を提供します。

この場合、データセット、モデル、トレーニング中に生成される異なるテーブルがワークスペースにログされます。Artifacts ページにアクセスすることで、この系譜を迅速に閲覧し、視覚化することができます。

モデル予測の解釈

Weight & Biases は、wandb.Tables の力を使ってモデルのパフォーマンスを評価する際に特に有用です。これにより、モデルが不十分に機能している箇所を視覚化できます。この場合、自転車や歩行者のような脆弱なユーザーを正確に検出することができます。

予測されたマスクとクラスごとのダイススコア係数をテーブルに記録しました。その後、目的のクラスを含む行でフィルタリングし、ダイススコアの昇順で並べ替えました。

以下のテーブルでは、まずダイススコアが正(歩行者が画像に存在)である場所を選択してフィルタリングします。次に昇順に並べ替えて、最も検出が悪い歩行者を特定します。ダイススコアが1に等しい場合は、歩行者クラスが正しくセグメント化されていることを意味します。このテーブルを対話型で見ることもできます。

私たちは、自転車や信号機など他の脆弱なクラスに対しても、この分析を繰り返すことができます。

この機能は、正しくラベル付けされていない画像を識別し、再注釈をつけるためにタグ付けする非常に良い方法です。

結論

もっと詳しく知りたい方は、ライブ W&B レポートにアクセスしてください。Weights & Biases を無料で試すには、Weights & Biases にサインアップするか、W&B の AWS マーケットプレイス リスティングを訪問してください。

この投稿では、Weights & Biases(W&B)MLOps プラットフォームの紹介、SageMaker Studio での W&B のセットアップ方法、および共同ソリューションでの初心者向けノートブックの実行方法を紹介しました。次に、自動運転車のセマンティックセグメンテーションのユースケースを実行し、W&B の実験でトレーニングの実行結果を追跡し、W&B スイープを使用したハイパーパラメータ最適化、および W&B テーブルでの結果の解釈を示しました。

もっと学びたい方は、ライブの W&Bレポートにアクセスできます。Weights & Biases を無料で試すには、Weights & Biases にサインアップするか、W&B の AWS マーケットプレイスリスティングを訪問してください。

このブログはシニアソリューションアーキテクトの渡邊翼が翻訳を担当しました。


About the Authors

Thomas Capelle は Weights and Biases で働くマシンラーニングエンジニアです。彼は www.github.com/wandb/examples リポジトリを最新の状態に保つことを担当しています。また、MLOPS、W&B の産業への応用、一般的な面白いディープラーニングに関するコンテンツを構築しています。以前は、太陽エネルギーの短期予測問題をディープラーニングで解決していました。彼は都市計画、組み合わせ最適化、交通経済学、応用数学のバックグラウンドを持っています。

Durga Sury は、Amazon SageMaker サービス SA チームの ML ソリューションアーキテクトです。彼女はマシンラーニングを誰もが使えるようにすることに情熱を持っています。AWS での3年間で、彼女はエンタープライズ顧客のために AI/ML プラットフォームのセットアップを支援してきました。仕事以外の時は、オートバイでのライド、ミステリー小説、そして4歳のハスキーとのハイキングを楽しんでいます。

Karthik Bharathy は Amazon SageMaker のプロダクトリーダーで、10年以上のプロダクトマネジメント、プロダクト戦略、実行、およびローンチの経験を持っています。