Amazon Web Services ブログ
EI 対応の TensorFlow 1.12 で利用できる柔軟性のある新型 Python API を使用して、Amazon Elastic Inference で TensorFlow モデルをデプロイする
Amazon Elastic Inference (EI) が、TensorFlow 1.12 の最新バージョンのサポートを開始しました。EI は、新しくなってさらに使いやすくなった Python API 関数である EIPredictor を備え、EI アクセラレーターを使用してTensorFlow モデルをデプロイします。EI で TensorFlow モデルを実行するのに、TensorFlow Serving に代わって、この新しい Python API 関数を推論スクリプト内で使用できるようになりました。EIPredictor では簡単な実験が可能で、EI の有無でのパフォーマンスも比較できます。このブログ記事では、EIPredictor を使用して EI にモデルをデプロイする方法を説明します。
まず、この背景から始めましょう。Amazon Elastic Inference は re:Invent 2018 で発表された新しい機能です。EI は、スタンドアロンの GPU インスタンスを使用するよりも、コスト効果が非常に優れた新しい方法を提供し、深層学習推論ワークロードを高速化します。EI を使用すると、任意の Amazon SageMaker または Amazon EC2 インスタンスタイプにアクセラレーターをアタッチでき、GPU の高速化によってもたらされる低いレイテンシー、高スループットといった利点を、極めて低いコスト (最大75%) で実現できます。EI では、TensorFlow、Apache MXNet、および ONNX モデルをデプロイし、推論を実行できます。
TensorFlow Serving を使用して、EI でモデルを実行する
Amazon EI の立ち上げ時に、EI 対応の TensorFlow Serving を導入しました。このため、コードを変更する必要がなくなり、EI アクセラレーターでの TensorFlow モデルの実行が簡単になりました。トレーニング済みの TensorFlow SavedModel を使用して、EI 対応の TensorFlow Serving を使用したモデルサーバーを起動し、TensorFlow Serving を呼び出すだけです。EI 対応の TensorFlow Serving は、通常の TensorFlow Serving と同じ API を使用します。唯一の違いは、エントリポイントが AmazonEI_TensorFlow_Serving_v1.12_v1 と呼ばれる異なるバイナリである点だけです。サーバーの起動に使用できるコマンドの例を次に示します。
EI 対応の TensorFlow Serving は、AWS Deep Learning AMI にあります (チュートリアルはこちら)。またはこの Amazon S3 バケットからパッケージをダウンロードし、独自のカスタム Amazon Machine Image (AMI)、または Docker コンテナ内に構築します。EI 対応の TensorFlow Serving では、TensorFlow の高性能モデルに対応するシステムの拡張が可能で、EI とシームレスに連携できます。また、アクセラレーターの検出の自動化、TLS 暗号化を使用してのネットワーク上の推論リクエストの保護、AWS Identity and Access Management (IAM) ポリシーを使ったアクセス制限などが実現できます。
EIPredictor を使用して、EI でモデルを実行する
EIPredictor はトレーニング済みモデルに対して推論を実行する、シンプルな Python 関数です。EI 対応の TensorFlow 内で利用できる、新しい API 関数です。 Deep Learning AMI でも入手可能で、Amazon S3 を使用してダウンロードできます。次のようにして、EIPredictor を使用します。
- EIPredictor は、保存したモデルまたは frozen graph とともに使用できます。TF Predictor と同様のものです。これらのモデル形式で EIPredictor を使用するには、EI のドキュメントを参照してください。
Use_ei
フラグ (真
にデフォルト設定されている) を使用して、EI の使用を無効にすることができます。これは、モデルが EI アクセラレーションの有無にかかわらず、どのように機能するかを確認するのに役立ちます。- EIPredictor は TensorFlow Estimator からでも作成できます。トレーニング済み Estimator として、まず SavedModel をエクスポートします。詳細については、SavedModel ドキュメントを参照してください。使用例 :
次のコードサンプルは、この機能で使用できるパラメータを示しています。
EI Predictor を使ってモデルを実行する例
これは、EI Predictor を使った Single Shot Detector (SSD) モデルで、ResNet の実行を試すことができる例です。この例では、EI アクセラレーターを使用して、EC2 インスタンスを起動したと想定しています。この例では、最新の Deep Learning AMI をここで使用します。
- 最初の手順は、TensorFlow Elastic Inference Note を有効にすることです。これは Deep Learning AMI に固有のものです。EI 対応の TensorFlow ライブラリを独自のカスタム AMI で構築した場合には、この手順は必要ありません。Python 2 か、Python 3 のTensorFlow EI 環境のどちらかを選択できます。この例では Python 2 を使います。
- Amazon S3 から ResNet SSD モデルの例をダウンロードします。
- モデルを解凍します。繰り返しますが、既にモデルがある場合は、この手順を省略できます。
- 3 匹の犬の写真を、現在のディレクトリにダウンロードします。
- Vim などのテキストエディタを開き、次の推論スクリプトを貼り付けます.ファイルを ssd_resnet_predictor.py として保存します。
- 推論スクリプトを実行します。
結論
TensorFlow モデルをコスト効率の高いアクセラレーターで実行するには、好みに応じて 2 つの便利な方法があります。ぜひ試してみて、amazon-ei-feedback@amazon.comまで感想をお聞かせください。
こちらで Elastic Inference をさらに学ぶことができます。Linux インスタンス用ユーザーガイドも参照してください。EI に Deep Learning AMI を使用する手順については、AWS Deep Learning AMI のドキュメントを参照してください。
著者について
Dominic Divakaruni は、Amazon Elastic Inference のプロダクトマネージャーです。生産に関する機械学習アプリケーションを拡張するサービスを構築しています。余暇には、息子と一緒にドラムをたたいたり、車の修理を楽しんでいます。