Amazon Web Services ブログ
Model Server for Apache MXNet を使って、独自の深層学習フレームワークを Amazon SageMaker で使用する
深層学習 (DL) フレームワークを使用すれば、機械学習 (ML) モデルを構築し、トレーニングできます。しかし ML モデルを本番環境でデプロイし、予測 (推論ともいう) をリアルタイムで処理するプロセスは複雑です。そのため ML の実践者は、これらのモデルをホストし推論リクエストを大規模に処理できる、スケーラブルかつパフォーマンスの高いモデルサーバーを構築する必要があります。
この問題に対処しようと、Model Server for Apache MXNet (MMS) が開発されました。MMS は極めてスケーラブルなだけでなく、すぐに使える推論サーバーです。MMS は ML/DL フレームワークに依存しないように設計されているため、どんな ML/DLフレームワークでトレーニングしたモデルでもホストできます。
この記事では MMS を利用して、運用中の ML/DL フレームワークまたはツールキットを使ってトレーニングしたモデルをホストする方法をご紹介します。本番用ホスティングには、Amazon SageMaker を使います。この PaaS ソリューションはインフラストラクチャを構築する数多くの作業を行ってくれるため、自身のユースケースに集中できます。
今回のソリューションでは、「Amazon SageMaker ホスティングサービスでの独自の推論コードの使用」で概説したアプローチを使用します。この記事では、必要とされるすべての依存関係、ライブラリ、フレームワークとその他のコンポーネントとともにモデルを使用する方法について説明します。それらを 1 つのカスタム Docker コンテナにコンパイルしてから、Amazon SageMaker でホストします。
MMS が ML/DL フレームワークに依存しないアーキテクチャーであることをお見せするため、PaddlePaddle フレームワークでトレーニングしたモデルを本番で投入することにしました。MMS 持ち込み (BYO) コンテナを使って、ML/DL フレームワークでトレーニングしたモデルを Amazon SageMaker で使用する手順を次の図に示しました。
この図が示すように、MMS BYO コンテナを使って ML/DLフレームワークを Amazon SageMaker で使用するには、2 つの主要コンポーネントが必要です。
- モデルアーティファクト/モデルアーカイブ: 特定のホストでモデルを実行するために必要なアーティファクトすべてです。
-
- モデルファイル: 通常はシンボルと重みです。モデルをトレーニングするアーティファクトです。
- カスタムサービスファイル: 推論リクエストを MMS が受信および処理するたびに呼び出されるエントリポイントを含んでいます。このファイルには、特定の ML/DL フレームワークでモデルを初期化するためのロジックを含んでおり、着信リクエストを前処理し、推論を実行します。フレームワークの推論メソッドから出力されたデータを取得し、それをエンドユーザーが使いやすいデータに変換するロジックも後処理します。
- マニフェスト: カスタムサービスファイルと MMS の間のインターフェイス。このファイルは、MMS ディストリビューションの一部として提供される model-archiver というツールを実行することで生成されます。
- コンテナアーティファクト: カスタム DL フレームワークで記述したモデルを Amazon SageMaker に取り込んで実行するには、Amazon SageMaker で実行するコンテナを用意してください。この記事では、MMS ベースコンテナを使って、それをカスタム DL フレームワークや他のモデル依存関係をサポートするように拡張する方法を説明します。MMS ベースコンテナは、Amazon SageMaker で即時に起動可能で、さらに高いスケーラビリティを持つ高性能なモデルサーバーを付属する Docker コンテナです。
次のセクションでは、各コンポーネントについて詳しく説明します。
モデルの準備
MMS コンテナは ML/DL フレームワークに依存していません。お好みの ML/DL フレームワークでモデルを作成し、MMS BYO コンテナを使ってそれを Amazon SageMaker で使用すると、スケーラブルで高パフォーマンスのモデルになります。次のセクションでは、PaddlePaddle モデルの作成方法を説明します。
モデルアーティファクトの準備
PaddlePaddle リポジトリの例を示すセクションで公開されており、入手できる Understand Sentiment の例を使用します。
まず、PaddlePaddle/book リポジトリにある指示に従って、モデルを作成します。コンテナをダウンロードし、例の一部として提供されているノートブックを使用して、トレーニングを実行します。トレーニングには Stacked Bidirectional LSTM ネットワークを使用し、100 エポックでモデルをトレーニングしました。このトレーニングの実行後、以下のトレーニング済みモデルアーティファクトのリストを入手しました。
これらのアーティファクトが PaddlePaddle モデルを構成しています。
カスタムサービスコードの記述
これで、本番環境でモデルをホストするために必要なモデルファイルが完成しました。このモデルを MMS で稼働するには、これらのファイルの使い方を理解しているカスタムサービススクリプトを用意します。このスクリプトは、サーバーに入ってくる未加工のリクエストを前処理する方法と、PaddlePaddle フレームワークの推論メソッドからの応答を後処理する方法も理解している必要があります。
Paddle_sentiment_analysis.py
というカスタムサービスファイルを作成します。ここでは、モデルを初期化するメソッドを含む PaddleSentimentAnalysis
というクラスを定義し、前処理、後処理、推論メソッドも定義します。このファイルの骨格は次のようになります。
このカスタムサービスファイルの詳細を理解するには、paddle_sentiment_analysis.py をご参照ください。このカスタムサービスコードファイルを使用すると、各推論リクエストのライフサイクルがどのようにするかを MMS に指示できます。トレーニングしたモデルアーティファクトが PaddlePaddle フレームワークを初期化する方法も定義します。
トレーニング済みモデルアーティファクトとカスタムサービスファイルが完成したので、Amazon SageMaker のエンドポイントを作成するのに使用する model-archive を作成します。
Amazon SageMaker でホストされるモデルアーティファクトファイルの作成
MMS BYO コンテナを使ってこのモデルを Amazon SageMaker に取り込むには、以下の手順を実行してください。
- ANIFEST ファイルを作成します。これはモデルを読み込んで実行するために、MMS がモデルのメタデータとして使用します。
- 以前に作成したカスタムサービススクリプトとトレーニング済みのモデルアーティファクトを、MANIFEST ファイルとともに .tar.gz ファイルに追加します。
これを行うには model-archiver ツールを使用します。このツールを使用して .tar.gz アーティファクトを作成する前に、前述のカスタムサービススクリプトを含め、すべてのモデルアーティファクトを別のフォルダーに配置します。このプロセスを簡単にするために、すべてのアーティファクトを利用できるようにしてあります。次のコマンドを実行します。
これで、model-archiver ツールを使用して、Amazon SageMaker でホスティングに必要なアーティファクトを作成する準備が整いました。model-archiver ツールは MMS ツールキットの一部です。このツールを入手するには、Python の仮想環境でこれらのコマンドを実行してください。他の部分の作業環境から分離されるためです。
mxnet-model-server をインストールすると、model-archiver ツールがプリインストールされます。
これで、/model-store ディレクトリに sentiment.tar.gz というファイルが生成されます。このファイルには、すべてのモデルアーティファクトとマニフェストファイルが含まれています。
これで、Amazon SageMaker でホストできるすべてのモデルアーティファクトが手に入りました。次にコンテナを作成し、Amazon SageMaker に取り込む方法を見てみましょう。
MMSを使用して、独自の BYO コンテナを構築する
このセクションでは、Amazon SageMaker でホストできる独自の MMS ベースコンテナ (BYOコンテナとも呼ばれる) を構築します。
このプロセスを支援するために、リリース済みのすべてのバージョンの MMS には DockerHub でホストできる、対応する MMS ベース CPU と GPU コンテナが付属しています。これらは Amazon SageMaker でホスト可能です。
この例では、awsdeeplearningteam/mxnet-model-server:base-cpu-py3.6
というタグが付けられたコンテナを使用します。前のセクションで作成したモデルをホストするには、PaddlePaddle パッケージと numpy パッケージをコンテナにインストールします。ベース MMS イメージから拡張し、Python パッケージをインストールする Dockerfile を作成します。先ほどダウンロードしたアーティファクトには、必要なパッケージをインストールするのに必要なサンプルの Dockerfile が付属しています。
BYO コンテナを記述した Dockerfile が完成したので、次にビルドします。
すべてのモデルアーティファクトを含む BYO コンテナが完成し、Amazon SageMaker で起動する準備が整いました。
PaddlePaddle モデルを使用した Amazon SageMaker エンドポイントの作成
このセクションでは、前に作成したアーティファクトを使用して、コンソールに Amazon SageMaker エンドポイントを作成します。Amazon SageMaker Python SDK と AWS SDK for Python を使用して、エンドポイント作成のためのインタラクティブな Jupyter Notebook の例も提供しています (Boto3)。このノートブックは mxnet-model-server GitHub リポジトリにあります。
モデル用の Amazon SageMaker エンドポイントを作成する前に、いくつか準備をします。
- 先ほど作成したモデルアーカイブ sentiment.tar.gz を Amazon S3 バケットにアップロードします。この投稿では、paddle_paddle という S3 バケットにアップロードしています。
- 前に作成したコンテナイメージ paddle-mms を Amazon ECR リポジトリにアップロードします。この投稿では、「paddle-mms」と呼ばれる ECR リポジトリを作成し、そこに画像をアップロードしました。
Amazon SageMaker エンドポイントの作成
モデルとコンテナのアーティファクトが S3 と ECR にアップロードされたので、Amazon SageMaker エンドポイントを作成できます。以下の手順を実行します。
- モデル設定を作成する。
- エンドポイント設定を作成する。
- ユーザーエンドポイントを作成する。
- エンドポイントをテストする。
モデル設定の作成
まず、モデル設定を作成します。
- Amazon SageMaker コンソールで、[Model]、[Create model] の順でクリックします。
- モデル名、IAM ロール、推論コードイメージの場所 (または ECR リポジトリ)、モデルアーティファクトの場所 (モデルアーティファクトがアップロードされた S3 バケット) の値を指定します。
- [Create Model] をクリックします。
エンドポイント設定を作成します。
モデル設定、次にエンドポイント設定を作成します。
- 左側のナビゲーションペインで、[Endpoint Configurations]、[Create endpoint configuration] をクリックします。
- エンドポイント設定名を入力し、[Add model] をクリックして、先ほど作成したモデルを追加します。次に、[Create endpoint configuration] をクリックします。
最後に、ユーザーが推論リクエストを送信するためのエンドポイントを作成します。
ユーザーエンドポイントの作成
- 左側のナビゲーションペインで、[ Endpoints]、[Create endpoint] の順でクリックします。
- [Endpoint name] には、センチメント などの値を入力し、前に作成したエンドポイント設定を選択します。
- [Select endpoint configuration]、[Create endpoint] の順でクリックします。
Amazon SageMaker に「センチメント」と呼ばれるエンドポイントを作成し、MMS BYO コンテナを使って PaddlePaddle DL フレームワークで構築したモデルをホストします。
このエンドポイントをテストし、これが実際に推論リクエストを処理できるかどうかを確認します。
エンドポイントのテスト
Boto3 ライブラリを使って簡単なテストクライアントを作成します。これは、ペイロードを Amazon SageMaker エンドポイントに送信し、その応答を取得する小さなテストスクリプトです。
このスクリプトを実行した場合の、対応する出力は次のとおりです。
結論
この記事では、MMS BYO コンテナを使用して、Amazon SageMaker で PaddlePaddle モデルを構築しホストする方法を紹介しました。このフローは小さな修正をすれば、PaddlePaddle だけでなく、いろんな ML/DL フレームワークを使って構築したモデル用の MMS を使用した Amazon SageMaker エンドポイントの推論トラフィックを処理する BYO コンテナの構築に再利用できます。
MMS を使って上記の PaddlePaddle モデルを Amazon SageMaker にデプロイするインタラクティブな例については、「Amazon SageMaker Examples」をご参照ください。MMS プロジェクトの詳細については、mxnet-model-server GitHub リポジトリをご参照ください。
著者について
Vamshidhar Dantu は、AWS Deep Learning のソフトウェア開発者です。 スケーラブルかつデプロイの容易な深層学習システムの構築に注力しています。余暇には、家族との時間やバドミントンを楽しんでいます。
Denis Davydenko は、AWS Deep Learning のエンジニアリングマネージャーです。開発者や科学者がインテリジェントなアプリケーションを実現できるような深層学習ツールの構築に注力しています。余暇には、ポーカー、ビデオゲーム、家族との時間を楽しんでいます。