Amazon Web Services ブログ

AWS Marketplace から使用可能状態のモデルを入手し、アプリケーションに AI を追加する

機械学習 (ML) は、エンタープライズが保持するデータや自動決定などの真の可能性を解放させ、ビジネスプロセスを変革することで顧客に提供する価値を急激に高めます。ML を活用していただくために、Amazon SageMaker では、ML モデルを素早く構築、トレーニング、デプロイするための手段をご提供しています。

最近までは、Amazon SageMaker をご使用いただく場合に、Amazon SageMaker により最適化されたアルゴリズムか、独自のアルゴリズムとモデルを導入していただくかの、2 通りから選択していただけるようになっていました。この ML のアルゴリズムとモデルに関する選択の幅が、AWS Marketplace for Machine Learning により広がります。お客様は、数百もある無料もしくは有料のアルゴリズムやモデルパッケージから選択でき、それらは次のように広範囲なカテゴリーをカバーしています。

今回の記事では、AWS Marketplace for Machine Learning から入手する Face Anonymizer モデルパッケージをデプロイし、推論を実行させる方法をご紹介します。

概要

AWS Marketplace にあるモデルパッケージはトレーニング済みの機械学習モデルであり、バッチジョブとしてもリアルタイム推論としても使用していただけます。これらモデルパッケージはトレーニング済みであるために、お客様は次にあげるようなタスクに悩まされる必要はありません。

  • トレーニング用データの収集
  • モデルをトレーニングするためのアルゴリズムの記述
  • ハイパーパラメータ最適化の作業
  • モデルのトレーニングとリリースのための準備作業

これらの手順が必要なくなれば、アルゴリズムの記述、データセット抽出、技術的な作業、そしてモデルのトレーニングとチューニングにお客様が投じていた多くの時間と予算を節減できるわけです。

AWS Marketplace から入手できるアルゴリズムとモデルパッケージは、Amazon SageMaker とシームレスに統合されています。これらとのやり取りは、AWS マネジメントコンソール、低レベルの Amazon SageMaker API、Amazon SageMaker Python SDK を使って行えます。モデルパッケージは、Amazon SageMaker エンドポイントを立ち上げてリアルタイムの推論、あるいはバッチ変換ジョブのどちらかで使用できます。

Amazon SageMaker では、サードパーティソフトウェアを安全にお客様のデータに適用できる環境をご提供しています。最小権限の原則に従い、 IAM のアクセス許可をご自身のリソースのみに限定することをお勧めします。

本ブログ記事の内容を正しくお試しいただくには、IAM の適切なアクセス許可が必要になります。Amazon SageMaker での IAM アクセス許可と有用なベストプラクティスについては、「ドキュメント」をご参照ください。機械学習ワークロードのセキュリティ確保の詳細については、オンラインテックトーク「Building Secure Machine Learning Environments Using Amazon SageMaker」をご覧ください。このサービスは次のように複数の側面でデータのセキュリティを確保します。

  • Amazon SageMaker がすべてのアルゴリズムとモデルパッケージの脆弱性に対する静的および動的なスキャンを行い、データの安全性を確立します。
  • 変更中および保存中を含めたアルゴリズムやモデルアーティファクト、そして他のシステムアーティファクトを、Amazon SageMaker が暗号化します。
  • Amazon SageMaker API とコンソールに対するリクエストは、安全な接続 (TLS による HTTPS) を通じて行われます。
  • デプロイするリソースとデータへのアクセスには、Amazon SageMaker から IAM 認証情報が要求されるので、販売者がお客様のデータにアクセスするのを防ぎます。
  • デプロイされたアルゴリズム/モデルのアーティファクトは、Amazon SageMaker によりインターネットアクセスから分離されるので、データの安全性が保てます。詳細については「トレーニングおよび推論コンテナをインターネット無料モードで実行」をご参照ください。

チュートリアル

匿名性とプライバシーに配慮する上で、顔をぼかしたい理由はさまざまです。   開発者の立場からは、モデルのトレーニングを行わずに、自動プロセスにインテリジェンスを付加したいともお考えになるでしょう。

そして、インターネットでトレーニング済みの ML モデルを検索した結果、たどり着くのが AWS Marketplace for Machine Learning です。 「face」というキーワードで検索をかけるとアルゴリズムの一覧が出てきます。その中にある Face Anonymizer model package by Figure Eight を試してみることにしましょう。

デプロイに取りかかる前に、モデルパッケージの I/O インターフェースと料金情報について、AWS Marketplace リスティングで確認しておきます。このリスティングを開き、製品概要、料金、特徴、使用上の注意点、互換性があるインスタンスタイプ、追加のリソースなどについて把握します。このモデルをデプロイする際には、ご自身の AWS アカウントからサブスクリプションをする必要があります。

モデルパッケージへのサブスクライブ

前出のリスティングのページで [Continue to Subscribe] をクリックします。[End User license agreement] とソフトウェア使用料を確認しお客様の組織からの同意を得た上で、[Accept offer] ボタンをクリックします。

    • AWS Marketplace での IAM アクセス許可については、別のブログ記事「Securing access to AMIs in AWS Marketplace」にある、「Rule 1 Only those users who are authorized to accept a EULA on behalf of your organization should be allowed to procure (or subscribe to) a product in Marketplace」の項をご参照ください。

デプロイ向けにモデルを作成する

AWS アカウントによるリスティングへのサブスクライブが終わったら、モデルパッケージをデプロイできるようになります。

  1. Face Anonymizer のソフトウェア設定ページを開きます。[Fulfillment method] は [Amazon SageMaker] のまま、そして [Software Version] は [Version 1] のままにしておきます。[Region] では [us-east-2] を選択します。べージの最下部にある [Product ARN] は、API を使ってモデルをデプロイする場合にのみ必要です。今回は、コンソールから Amazon SageMaker Endpoint をデプロイしますので、この ARN は無視してかまいません。
  2. [View in SageMaker] をクリックします。
  3. Face Anonymizer のリスティングを選択し [Create endpoint] をクリックします。
  4. [Model settings] セクションで次のパラメータを設定し、[NEXT] をクリックします。
    1. [face-anonymizer] には モデル名を設定します。
    2. [IAM role] で、必要な IAM アクセス許可を持つ IAM ロールを選択します。

    ここまでで、 AWS Marketplace にあるトレーニング済みモデルパッケージを使用して、デプロイ可能なモデルを作成しました。モデルパッケージが静的なエンティティであり IAM ロールには関連付けられていないのに対し、デプロイ可能なモデルには関連付けらられた IAM ロールがあります。次の手順で、モデルをデプロイし推論を実行してみます。

モデルのデプロイ

  1. [Create Endpoint] ページで次のフィールドの設定を行います。
    1. [Endpoint name & Endpoint configuration name] で face-anonymizer を選択します。
    2. [Production variants] の下にある [Edit] をクリックします。
  2. [Edit Production Variant] ダイアログボックスで次のフィールドの設定を行います。
    1. [instance type] で [ml.c5.xlarge] を選択します (Face Anonymizer のリスティングが互換性を持つのは、ml.c5.xlarge のインスタンスタイプです) 。
    2. [Save] をクリックします。
  3. 次のスクリーンショットのような表示が出るのでそれを確認した上で、[Create endpoint configuration] をクリックします。
  4. [Submit] をクリックしエンドポイントを作成します。

モデルを使い推論を実行する

AWS Marketplace で入手できる各モデルパッケージには、リスティング内の Usage Informationにあるように、個別の入力形式が適用されています。たとえば、この Face Anonymizerリスティングでは、入力は base64 でエンコードし、予測処理に送られるペイロードは次のような形式にするよう指定されています。

Payload: 
{
	"instances": [{
		"image": {
			"b64": "BASE_64_ENCODED_IMAGE_CONTENTS"
		}
	}]
}

この記事では「volunteers.jpg」という名のファイルに収められた次のような画像を使い、匿名化処理を実行します。

ここからのセクションでは、データの準備と推論を実行するため、ターミナルから使用するコマンドを解説します。

base64 エンコードの実行

ペイロードが、リアルタイムでの推論実行に base64 エンコードを要求しているので、先ず画像のエンコードを行う必要があります。

Linux コマンド

encoded_string=$(base64 volunteers.jpg)

Windows – PowerShell コマンド

$base64string = [Convert]::ToBase64String([IO.File]::ReadAllBytes('./volunteers.jpg'))

ペイロードの準備

ペイロードを準備しファイルに書き込むために、次のコマンドを実行します。

Linux コマンド

payload="{\"instances\": [{\"image\": {\"b64\": \"$encoded_string\"}}]}"
echo $payload >input.json

Windows – PowerShell コマンド

$payload=-join('{"instances": [{"image": {"b64": "' ,$base64string,'"}}]}')

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False

 [System.IO.File]::WriteAllLines('./input.json', $payload, $Utf8NoBomEncoding)

これでペイロードの準備が整いましたので、バッチ推論、もしくはリアルタイムでの推論を行えるようになりました。

リアルタイム推論の実行

リアルタイム推論を実行するには、AWS CLI を使い次のコマンドを実行します。詳細については「AWS CLI のインストール」と「AWS CLI の設定」をご参照ください。

aws sagemaker-runtime invoke-endpoint --endpoint-name face-anonymizer --body fileb://input.json --content-type "application/json" --region us-east-2 output.json.out

このコマンドを実行すると、output.json.out というファイルに出力が書き込まれるようになります。

バッチ推論の実行

バッチ推論実行のためには次を行います。

  1. AWS マネジメントコンソールにサインインします。次に、使用する Amazon S3 バケットの指定をするか、先にモデルをデプロイしたのと同じリージョンで S3 バケットの作成を行います。
  2. S3 バケットに input.json ファイルをアップロードします。
  3. ファイル名を選択し [Copy Path] をクリックして、ファイルへのパスをコピーします。
  4. Amazon SageMaker コンソールで [Batch Transform Jobs] 、[Create Batch Transform Job] の順にクリックします。
  5. 次に示す項目を指定した後、[Create Job] をクリックします。
    1. [Job name] に face-anonymization と入力します。
    2. [Model name] に face-anonymizer と入力します。
    3. [Instance type] では [c5.xlarge] を選択します。
    4. [Instance-count] に 1 と入力します。
    5. [Input data configuration] にある [S3 location] に、先にコピーしておいた S3 のパスを設定します。これは次のような形式の文字列です
      s3://<your-bucket-name>/input.json 
    6. [Content type] に application/json と入力します。
    7. [Output data configuration] に S3 出力への適切なパスを設定します。これは次のような形式の文字列です。
      s3://<your-bucket-name>/output
  1. バッチ変換ジョブが正常に作成されたというメッセージが表示されます。ジョブのステータスが [Completed] に変更されたらバッチ変換ジョブを開き、[Output data configuration] で出力データへのパスを選択した後、json.out という名前の出力ファイルをダウンロードします。

出力を抽出と可視化

ここまでで出力が準備されていますので、次の表で示すコマンドを使い、その抽出と可視化が行えます。

Linux コマンド

cat output.json.out | jq -r '.predictions[0].image.b64' | base64 --decode >output.jpg

Windows – PowerShell コマンド

$jsondata = Get-Content -Raw -Path 'output.json.out' | ConvertFrom-Json

$bytes = [Convert]::FromBase64String($jsondata.predictions.image.b64)

[IO.File]::WriteAllBytes('output.jpg', $bytes)

output.jpg に収められた画像を見ると、人物の顔が ML モデルにより特定され、隠蔽 (匿名化) されているのが見て取れます。

AWS Marketplace からサードパーティ製のモデルパッケージを入手し、それを元に作成したモデルでのリアルタイム推論を、正常におこなうことができました。

クリーンアップ

これ以降の課金を防ぐために、エンドポイントとその定義を削除します。

  1. エンドポイントの削除
    1. Amazon SageMaker コンソールで [Endpoints] をクリックします。
    2. face-anonymizer という名前のエンドポイントを選択し、[Actions] 、[Delete] の順にクリックします。
  2. エンドポイントの定義の削除
    1. Amazon SageMaker コンソールで [Endpoint configuration] をクリックします。
    2. face-anonymizer という名前のエンドポイントを選択し、[Actions]、[Delete] の順にクリックします。
  3. モデルの削除には次を行います。
    1. Amazon SageMaker コンソールで、[Model] をクリックします。
    2. face-anonymizer という名前のモデルを選択し、[Actions] 、[Delete] の順にクリックします。
  4. この記事での例を純粋に試す目的でリスティングに対し行ったサブスクリプションは、次のように解除できます。[Your software subscriptions] ページで、Face Anonymizer リスティングの [Cancel Subscription ] をクリックします。

Jupyter ノートブックを使い、モデルのデプロイとリアルタイムおよびバッチ推論を実行する

この記事では、Amazon SageMaker コンソールから Amazon SageMaker エンドポイントを立ち上げる方法と、AWS CLI からの推論実行方法を解説してきました。モデルパッケージを Jupyter ノートブックで使いたい場合は、次の手順に従ってください。

  1. Amazon SageMaker ノートブックインスタンスを作成します
  2. Amazon SageMaker コンソールの [Notebook instances] において、作成したインスタンスに関する [Actions] 列の中から [Open Jupyter] をクリックします。
  3. ノートブックの中で [SageMaker Examples] をクリックします。
  4. [AWS Marketplace] の下で、利用可能なサンプルノートブックの「Using_ModelPackage_Arn_From_AWS_Marketplace.ipynb」に対し [Use] をクリックし、ノートブックをフォローます。Shift+Enter で各セルを実行します。

料金

AWS Marketplace には、モデルパッケージ用に次のような料金設定があります。

  • 無料 (ソフトウェア使用料なし)
  • 無料トライアル (試用期間はソフトウェア使用料なし)
  • 有料

インフラストラクチャへのコストと別に、無料トライアルと有料のモデルパッケージには、Amazon SageMaker 推論と Amazon SageMaker バッチ変換に対するソフトウェア使用料が適用されることがあります。これに関する情報は、AWS Marketplace リスティングページの「Pricing Information」セクションでご確認ください。サードパーティが提供するソフトウェアの使用料金は、リージョン、インスタンスタイプ、および推論タイプにより変わります。

まとめ

この記事ではユースケースを例示しながら、AWS Marketplace で入手できるサードパーティ製のモデルパッケージから作成する ML モデルを使い、予測処理を開始するための詳細な手順を解説してきました。

AWS Marketplace には、サードパーティ製モデルパッケージに加えて、アルゴリズムも用意されています。これらを使うと、トレーニングやハイパーパラメータチューニング用のジョブを作成して、独自の ML モデルのトレーニングも行えます。これらサードパーティからのアルゴリズムにより、すぐに使える多様なアルゴリズムが選択可能になっています。アルゴリズム開発に要する時間を排除して、デプロイのための時間を削減することで、実際のデータを使ってのモデルのトレーニングとチューニングに集中できるようになります。詳細については、「AWS Marketplace の Amazon SageMaker リソース」と「Using AWS Marketplace for machine learning workloads」をご参照ください。

ML アルゴリズムやトレーニング済みモデルパッケージの販売にご関心をお持ちの方は、「Amazon SageMaker アルゴリズムとモデルパッケージの販売」をご参照ください。また、aws-mp-bd-ml@amazon.com もお役にたつと思います。AWS Marketplace for Machine Learning のリスティングでアルゴリズムとモデルパッケージをパッケージ化する方法については、サンプルの Jupyter ノートブック「creating_marketplace_products」に従ってください。

AWS Marketplace での機械学習に関するさらに踏み込んだ実例については、AWS のオンラインテックトーク「Accelerate Machine Learning Projects with Hundreds of Algorithms and Models in AWS Marketplace」をご覧ください。

トレーニング済み機械学習モデルを使った実践的なアプリケーションについては、「Accelerating Machine Learning Projects」にある Amazon re:Mars のセッションを参考にしてください。


著者について

Kanchan Waikar はアマゾン ウェブ サービスのソリューションアーキテクトで、AWS Marketplace の機械学習グループで働いています。彼女には、NLP やソフトウェア開発プロジェクトにおいて、構築、設計、管理に関する 13 年以上の経験があります。彼女はコンピュータサイエンス (データサイエンス専攻) での修士号取得者で、AI/ML を基礎とした AWS サービスを使ったお客様のためのソリューションや、パートナーソリューション構築のための支援を積極的に行っています。