1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon SageMaker Examplesを読んでみた 〜End To End ML Lifecycle & Prepare Data編〜

Last updated at Posted at 2024-12-04

この記事はUMITRON Advent Calendar 2024 4日目の記事です


まえがき

ウミトロンでは、Amazon SageMakerを活用して画像認識サービスを構築しています。
私自身、SageMaker の利用経験はおろか、プロダクト開発そのものの経験が乏しい状態でウミトロンに入社しました。そのため、当初は手探りでの実装が続き、試行錯誤の日々を送ってきました。
それから 3 年がたち、SageMaker をはじめとする AWS サービスや、機械学習(ML)プロジェクトのライフサイクル各ステップにおける必要な機能について、少しずつ理解が深まってきたと感じています。
一方で、これまでの取り組みを振り返ると、最適なサービス選択や実装を十分に行えていなかったと気づかされることも増えてきました。
このような背景から、今一度 SageMaker を体系的に学び直し、自信を持って迅速かつ適切に開発を進められるスキルを身に付けたいと思うようになりました。

そこで今年のアドベントカレンダーでは、SageMakerに関する機能を幅広く理解するために、公式のサンプルノートブックを読み、それらの内容をまとめることにしました。
複数あるカテゴリのうち、End-to-End ML Lifecycle、Prepare Data、Deploy and Monitor、Build and Train Modelsについてまとめます。
また、それらの中でも画像認識に関連がありそうなものかつ基本的な機能に関するものをピックアップし、それらの概要と、Python SDKやboto3による主要なAPI呼び出し、(あれば)所感をまとめます。
API呼び出しは、アルゴリズム開発の根幹に関わる以下5カテゴリに分類しています。

  1. インフラ管理 - エンドポイントや学習ジョブなどのリソース設定
  2. データ準備 - データの読み込みや前処理
  3. 学習と推論 - モデルの学習と推論ワークフローの管理
  4. パイプライン構築 - 自動化とワークフローの統合
  5. 監視とトラッキング - モデル監視やデバッグのユーティリティ

これは私自身の備忘録としての役割が大きいですが、同じように SageMaker 初心者で「どのような機能が存在し、どう活用できるのか」を俯瞰したい方の一助となれば幸いです。

本日は、End-to-End ML LifecycleとPrepare Dataについてまとめます(解説部分は簡潔に記述するため断定調です)。
明日以降、本アドベントカレンダーで残りのカテゴリについてもまとめる予定です。

End To End ML Lifecycle

SageMaker Autopilotを使い、MLモデルの一連の作業を実施するサンプル群

3つのサンプルがあるが、大まかな流れはどれも同じなのでCustomer Churn Prediction with Amazon SageMaker Autopilotのみについて記す

Customer Churn Prediction with Amazon SageMaker Autopilot

概要

  • SageMaker Autopilotを使ってchurn(顧客の離脱)を予測
  • データと予測したいもののみをAutopilotに渡し、推定モデルを自動構築する
  • 構築したモデルをリアルタイム推論としてデプロイ

主要なAPI呼び出し

カテゴリ メソッド 説明
学習と推論 SageMaker.Client.create_auto_ml_job Autopilotジョブを作成(現在はv2の使用が推奨されている)
学習と推論 SageMaker.Client.describe_auto_ml_job Autopilotジョブの状態を取得(現在はv2の使用が推奨されている)
インフラ管理 SageMaker.Client.create_model 推論用のモデルを作成
インフラ管理 SageMaker.Client.create_endpoint_config 推論用のエンドポイント設定を作成
インフラ管理 SageMaker.Client.create_endpoint 推論用のエンドポイントを作成
学習と推論 sagemaker.predictor.Predictor.predict エンドポイントに推論をリクエスト(SageMaker.Client.invoke_endpointでも同様のことができる)

所感

  • SageMaker Autopilotは大部分が自動化された強力なツールだが、テーブルデータしかサポートされていないので画像認識で使われる機会は少なそう
    • 特徴抽出器 + 分類器 or 回帰という構成を取るなら選択肢になるかも
    • 分類や回帰のためのアルゴリズムは指定もできる(選択できるアルゴリズム
  • 推論にsagemaker SDKのsagemaker.predictor.Predictorはバイナリデータの送信がサポートされていないので、画像データのバイナリデータを使う場合は、boto3のSageMaker.Client.invoke_endpointを使うことになりそう

Prepare Data

学習データを準備するためのサンプル群。
Feature Storeへのデータ登録や、Human-in-the-Loopによるアノテーションの作成、アノテーション結果の解析や修正方法等が解説されている。

画像処理との関連が薄いものや、分散処理に関するもの等は対象外とした。この理由でSageMaker Data Wranglerについても、サンプルではテーブルデータの分析のみだったので調査していないが、画像データのdata augmentationも可能らしいのでそちらは別途調査したいと思った

Amazon SageMaker Feature Store: Introduction to Feature Store

概要

  • テーブルデータをSageMaker Feature Storeに登録する
  • テーブルデータをメタデータとともに、論理グループであるfeature groupに登録する

主要なAPI呼び出し

カテゴリ メソッド 説明
データ準備 sagemaker.feature_store.feature_group.FeatureGroup.load_feature_definitions テーブルデータからfeature groupのデータ型等の構造を取得
データ準備 sagemaker.feature_store.feature_group.FeatureGroup.create Feature groupを作成
データ準備 sagemaker.feature_store.feature_group.FeatureGroup.update_feature_metadata メタデータを作成/更新
データ準備 sagemaker.feature_store.feature_group.FeatureGroup.ingest データをfeature groupに登録

所感

  • そもそもfeature storeとは何かということについては、このサイトが参考になった
  • 画像認識においては特に以下のような場合にfeature storeは役立ちそうだと感じた
    • 特徴量抽出 + 近似最近傍探索といった検索ベースのアルゴリズムを採用する場合
    • 画像と共に多くの属性情報が取得でき、それらの管理がデータセット作成に重要な場合
  • 上記のような場合でなくとも、単に画像の取得日時や場所を管理するためにも使えそうだが、個人的にはオーバースペックだと感じた

Create an Active Learning Workflow using Amazon SageMaker Ground Truth

概要

  • ノートブックはこの手順の一部
  • テキスト分類器を UCI News Datasetでアクティブラーニング
  • 部分的にラベル付けされたデータセットに対して、以下の手順で学習を繰り返す
    1. ラベル付きデータで分類器を学習
    2. 学習した分類器でラベルが付いていないデータを分類
    3. 信頼度が高いものは分類結果を正解ラベルとして登録、信頼度が低いものの一部をSageMaker Ground Truthで人手でラベルリング
    4. ラベルがついていないデータが残っていたら1. に戻る
    5. ラベルがついていないデータがなくなったら終了
  • 上記をAWS Step Functionsで作成
  • ノートブックの役割は初期データの作成、SageMaker Ground Truthの設定json作成、独自アルゴリズムイメージのECRへのプッシュ

主要なAPI呼び出し

カテゴリ メソッド 説明
学習と推論 sagemaker.estimator.Estimator.fit モデルの学習

所感

  • 手順解説+アルゴリズムの詳細に依存する部分をノートブックにし、その他の枠組みをpythonにするという分割方法は参考になった
  • 実際にアルゴリズムを運用しながらアクティブラーニングをする場合、運用しながら蓄積した信頼度を参照するなど、本番環境との連携方法をも検討する必要があると感じた

Understanding Annotation Consolidation: A SageMaker Ground Truth Demonstration for Image Classification

概要

  • SageMaker Ground Truthで複数のアノテータのアノテーションを統合するアルゴリズムの解説
    • ここで扱われているのはマルチクラスアノテーションの統合方法だが、その他のアノテーションがどのように統合されるかはここに記載されている
  • Modified Dawid-Skene (MDS)という、EMアルゴリズムに基づいてノイズに頑健にアノテーションを統合するアルゴリズムが使われている
  • このノートブックでは、MDSが単純な多数決によるアノテーション統合よりも優れていることをデモンストレーションしている

主要なAPI呼び出し

なし

所感

  • アノテーションを統合する仕組みはSageMaker Ground Truthに組み込まれているので自分で記述する必要はないが、manifestファイルをプロットする部分のコードは、アノテーション結果の分析に使えるかもしれない

From Unlabeled Data to a Deployed Machine Learning Model: A SageMaker Ground Truth Demonstration for Object Detection

概要

  • 物体検出器の学習データをSageMaker Ground Truthのアクティブラーニングで作成する
    • 対応しているアノテーションの種類であれば、アクティブラーニングによる自動アノテーションができる(参考
  • 自動アノテーションの実行過程の状況(自動アノテーション精度や自動アノテーションされた数等)とアノテーション結果を分析する
  • 作成されたデータで物体検出器を学習
  • バッチ変換で物体検出器を検証し、リアルタイム推論としてデプロイ

主要なAPI呼び出し

カテゴリ メソッド 説明
インフラ管理 SageMaker.Client.create_labeling_job SageMaker Ground Truthのラベリングジョブを作成。LabelingJobAlgorithmsConfigを設定すると自動アノテーションが有効になる
データ準備 SageMaker.Client.describe_labeling_job ラベリングジョブの状態を取得する
インフラ管理 sagemaker.amazon.amazon_estimator.get_image_uri 組み込みアルゴリズムのイメージURIを取得。現在はsagemaker.image_uris.retrieve()の利用が推奨されている
学習と推論 SageMaker.Client.create_training_job トレーニングジョブを作成
インフラ管理 SageMaker.Client.create_model 推論用のモデルを作成
インフラ管理 SageMaker.Client.create_transform_job バッチ変換ジョブを作成
インフラ管理 SageMaker.Client.create_endpoint_config 推論用のエンドポイント設定を作成
インフラ管理 SageMaker.Client.create_endpoint 推論用のエンドポイントを作成
学習と推論 SageMaker.Client.invoke_endpoint エンドポイントに推論をリクエスト

所感

  • アノテーション結果の分析が多岐に渡っており参考になった。大規模なデータセットを構築する場合はさまざまな切り口でどのようなデータのアノテーションの信頼度が低いのかを定量的に把握することで問題を早期に発見できるのかもしれないと感じた
  • 自動アノテーションを使わない場合も、組み込みアルゴリズムを使った物体検出の学習からデプロイまでの流れをまとめた良い例だと感じた

Amazon Augmented AI(A2I) Integrated with AWS Marketplace ML Models

概要

  • SagmeMaker A2I(Amazon Augmented AI)で物体検出結果を人間によってレビューする枠組みを作成
    • 確信度が低いもののみ人間による確認をする
  • 物体検出器のモデルはAWS Marketplace ML modelから取得する

主要なAPI呼び出し

カテゴリ メソッド 説明
パイプライン構築 SageMaker.Client.create_flow_definition SageMaker A2Iでヒューマンレビューを設定
パイプライン構築 SageMaker.Client.describe_flow_definition 設定したヒューマンレビューの内容を確認
インフラ管理 sagemaker.ModelPackage.deploy AWS Marketplace ML modelのエンドポイントを作成。ノートブックでは物体検出器をリアルタイムインスタンスでデプロイしている
学習と推論 SageMaker.Client.invoke_endpoint エンドポイントに推論をリクエスト
パイプライン構築 SageMaker.Client.start_human_loop ヒューマンレビューが開始する(タスクの割当てとレビュー結果の保存が実行される)
パイプライン構築 SageMaker.Client.list_workteams レビューアの一覧を取得。ノートブックではレビュー用UIのURLを取得している
パイプライン構築 SageMaker.Client.describe_human_loop ヒューマンレビューの状態を取得

Chaining using Ground Truth Streaming Labeling Jobs

概要

  • SageMaker Ground Truthのストリーミングラベリングジョブを作成する
    • ストリーミングラベリングジョブ:リアルタイムにデータを追加できる。手動で停止されるか十日間新規データ追加がなくなるまで続く
  • 2つのストリーミングジョブをチェーンさせる
    • 1つ目のジョブで矩形のアノテーションをし、2つ目のジョブでその矩形を調整する

主要なAPI呼び出し

カテゴリ メソッド 説明
インフラ管理 SageMaker.Client.create_labeling_job SageMaker Ground Truthのラベリングジョブを作成。 ”InputConfig” → “DataSource” → “SnsDataSource”を設定するとストリーミングジョブになる
インフラ管理 SageMaker.Client.describe_labeling_job ラベリングジョブの状態を取得する
インフラ管理 SageMaker.Client.stop_labeling_job ラベリングジョブを停止する

所感

  • ストリーミングジョブへのデータ追加はAmazon SNSで簡単にできるので、例えば、本番環境での推定結果のうち信頼度が低いものを逐次ラベリングジョブに追加することでアクティブラーニングができるようになると思った
  • SNSトピックへの通知をpython(boto3)で行っているが、S3のイベント通知機能やEventBridgeを使ってもいいかもしれないと感じた
  • 今回の例では2つのラベリングジョブが矩形の作成用ジョブと修正用ジョブという役割だったが、複数人でアノテーションした場合にうまくマージしてくれる機能があるので、Aさんが作成、Bさんが調整というようにジョブをチェーンさせるのは合理的じゃない場合がある気がした

Labeling Adjustment Job Adaptation

概要

  • SageMaker Ground Truthのアノテーションジョブで作成されたmanifestファイルから特定のラベルが削除されたmanifestファイルを生成する
  • 不要なラベルが削除されたmanifestファイルを修正用アノテーションジョブの入力にすることを想定している

主要なAPI呼び出し

カテゴリ メソッド 説明
インフラ管理 SageMaker.Client.describe_labeling_job ラベリングジョブの状態を取得する

所感

  • 他のサンプルに比べ複雑なことはしていないが、manifestファイルの解析が細かく関数定義されいるので、他の目的でも使いまわせそうな部分が多いかもと感じた

ウミトロンは、「持続可能な水産養殖を地球に実装する」というミッション実現に向けて、日々プロダクト開発・展開にチーム一丸となって邁進しています。
ウミトロンのニュースや活動状況を各種SNSで配信していますので、ぜひチェックいただき、来年も応援よろしくお願いします!
Facebook https://www.facebook.com/umitronaqtech/
X https://x.com/umitron
Instagram https://www.instagram.com/umitron.aqtech/
Linkedin https://www.linkedin.com/company/umitron

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?