Amazon Web Services ブログ

高性能でコスト効率の高い機械学習推論を実現する Inf1 インスタンスが Amazon SageMaker でご利用可能に

完全マネージドサービスの Amazon SageMaker は、あらゆる開発者やデータサイエンティストが機械学習 (ML) モデルを迅速に構築、トレーニング、デプロイできるように支援します。Intuit、Voodoo、ADP、Cerner、Dow Jones、Thompson Reuters をご利用の数万人におよぶお客様が、Amazon SageMaker を使って ML の各プロセスで発生する負担の大部分を取り除いています。

リアルタイム予測に ML モデルをデプロイする場合、Amazon SageMaker には、小さな CPU インスタンスからマルチ GPU インスタンスに至る幅広い AWS のインスタンスタイプがあります。そのため、予測インフラストラクチャに適したコストとパフォーマンスの割合を見つけることができます。本日より、Amazon SageMaker で Inf1 インスタンスがご利用いただけるようになりました。これで、高いパフォーマンス、低いレイテンシー、コスト効率の高い推論を実現できます。

Amazon EC2 Inf1 インスタンス入門

Amazon EC2 Inf1 インスタンスは AWS re:Invent 2019 でリリースしました。Inf1 インスタンスは AWSが一から構築したカスタムチップの AWS Inferentia を使用しており、機械学習の推論ワークロードが加速します。G4 インスタンスと比較した場合、Inf1 インスタンスでは、推論のスループットが最大 3 倍となり、推論あたりのコストが最大 45% 削減します。

Inf1 インスタンスは、1 個、4 個、または 16 個の AWS Inferentia チップを備え、複数のサイズで利用できます。AWS Inferentia チップには 4 つの NeuronCore が含まれています。いずれも高性能のシストリックアレイ行列乗算エンジンを実装しているため、畳み込みや変換などの一般的な深層学習のオペレーションを大きく高速化します。NeuronCores には大容量のオンチップキャッシュも搭載されており、外部メモリからのアクセスを削減し、プロセスの I/O 時間を節約できます。

複数の AWS Inferentia チップが Inf1 インスタンスで使用可能な場合、モデルを分割して、キャッシュメモリにすべて格納できます。あるいは、AWS Inferentia チップの NeuronCores を複数のモデルに分割して、単一の Inf1 インスタンスからマルチモデル予測を行うことも可能です。

Inf1 インスタンスで機械学習モデルを実行するには、AWS Neuron SDK を使ってモデルをハードウェア最適化表現にコンパイルする必要があります。AWS では Inf1 インスタンスを発表して以来、パフォーマンスの向上と新機能に焦点を当てた AWS Neuron SDK の 5 つのバージョンをリリースしてきました。今後も、定期的にリリースしていく予定です。たとえば、画像分類 (ResNet-50) のパフォーマンスは、単一の AWS Inferentia チップで 1100 から 2300 画像/秒の 2 倍以上に向上しました。こうしたパフォーマンスの向上により、G4 インスタンスと比較して、推論あたりのコストが 45% 削減しています。シングルショット検出 (SSD) で始まるオブジェクト検出モデルのサポートも追加されました。マスク R-CNN も間もなく登場します。

では、Amazon SageMaker の ml.Inf1 インスタンスで、モデルを簡単にコンパイル、取り込み、実行する方法をご紹介しましょう。

Amazon SageMaker での Inf1 インスタンスの使用

Amazon SageMaker では、Amazon SageMaker Neo のおかげで Inf1 インスタンスのモデルを簡単にコンパイルおよびデプロイできます。AWS Neuron SDK は Amazon SageMaker Neo と統合しており、Amazon SageMaker の Inf1 インスタンスでモデルの実行を最適化できます。次の手順を実行するだけで最適化できます。

  1. 通常どおりモデルをトレーニングします。
  2. Amazon SageMaker Neo を使用して、Inf1 アーキテクチャのモデルをコンパイルします。
  3. Amazon SageMaker の Inf1 インスタンスにモデルをデプロイします。

次の使用例では、GitHub のノートブックのサンプルのように、MNIST データセットでシンプルな TensorFlow 画像分類子をトレーニングします。トレーニングコードは次のようになります。

from sagemaker.tensorflow import TensorFlow
mnist_estimator = TensorFlow(entry_point='mnist.py', ...)
mnist_estimator.fit(inputs)

Inf1 インスタンスのモデルをコンパイルするには、単一の API 呼び出しを行い、デプロイのターゲットに ml_inf1 を選択します。次のコードをご参照ください。

# S3 bucket where the compiled model is saved
output_path ='/'.join(mnist_estimator.output_path.split('/')[:-1])

# Compile the model for Inf1 instances
optimized_estimator = mnist_estimator.compile_model(target_instance_family='ml_inf1',
						input_shape={'data':[1, 784]}, # Batch size 1,28x28 pixels flattened
						output_path=output_path,
						framework='tensorflow',
						framework_version='1.15.0')

機械学習モデルをコンパイルしたら、Amazon SageMaker Neo の最適化済みのエスティメータを使用して、Amazon SageMaker の Inf1 インスタンスにモデルをデプロイします。内部では推論エンドポイントを作成する際に、Amazon SageMaker は、推論用に最適化されたモデルを読み込んで呼び出す軽量ランタイムの Neo Deep Learning Runtime を備えたコンテナを自動的に選択します。

optimized_predictor = optimized_estimator.deploy(initial_instance_count = 1,
						instance_type = 'ml.inf1.xlarge')

これで完了です。 モデルをデプロイした後、エンドポイントを呼び出して、低いレイテンシーでリアルタイムに予測を受け取ることができます。すべての例は Github をご覧ください。

開始方法

Amazon SageMaker の Inf1 インスタンスのサイズには、ml.inf1.xlarge、ml.inf1.2xlarge、ml.inf1.6xlarge、ml.inf1.24xlarge の 4 つがあります。TensorFlow フレームワークおよび MxNet フレームワークを使って開発した機械学習モデルは、Amazon SageMaker Neo でのコンパイル、Inf1 インスタンスでの最適な実行、リアルタイム推論用に Amazon SageMaker の Inf1 インスタンスへのデプロイが可能です。本日より、米国東部 (バージニア北部) と米国西部 (オレゴン) リージョンの Amazon SageMaker で Inf1 インスタンスをご利用いただけます。


著者について

Julien Simon は EMEA の人工知能と機械学習に関するエバンジェリストで、開発者や企業のアイデア実現の支援に取り組んでいます。