AWS Neuron 機械学習ワークロードでの Amazon ECS タスク定義
機械学習のワークロード用に、Amazon EC2 Trn1
Amazon EC2 Trn1 インスタンスは、AWS Trainium
Amazon EC2 Inf1 インスタンスと Inf2 インスタンスは、AWS Inferentia
機械学習モデルは、専用の Software Developer Kit (SDK) である AWS Neuron
考慮事項
Amazon ECS での Neuron のデプロイを開始する前に、以下の点を考慮してください。
-
クラスターには、Trn1、Inf1、Inf2、およびその他のインスタンスを混在させることができます。
-
AWS Neuron をサポートする機械学習フレームワークを使用するコンテナ内に、Linux アプリケーションが必要です。
重要
他のフレームワークを使用するアプリケーションでは、Trn1、Inf1、Inf2 インスタンスのパフォーマンスが強化されていない場合があります。
-
各 AWS Trainium
または AWS Inferentia チップで実行できる推論または推論トレーニングのタスクは 1 つだけです。Inf1 の場合、各チップには 4 つの NeuronCore があります。Trn1 と Inf2 の場合、各チップには 2 つの NeuronCore があります。Trn1、Inf1、Inf2 インスタンスごとに、使用しているチップの数だけのタスクを実行できます。 -
サービスの作成時、またはスタンドアロンタスクの実行時にタスク配置制約を設定する場合は、インスタンスタイプ属性を使用します。これにより、指定したコンテナインスタンスでタスクが起動されることを保証します。そうすることで、全体的なリソース使用率を最適化し、推論ワークロードのタスクを確実に Trn1、Inf1、Inf2 インスタンスに配置できます。詳細については、「Amazon ECS がタスクをコンテナインスタンスに配置する方法」を参照してください。
次の例では、
default
クラスターのInf1.xlarge
インスタンスでタスクが実行されます。aws ecs run-task \ --cluster default \ --task-definition ecs-inference-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == Inf1.xlarge"
-
Neuron リソース要件はタスク定義で定義できません。代わりに、ホストコンテナインスタンス向けに用意された、特定の AWS Trainium または AWS Inferentia チップを使用するようコンテナを設定します。これを行うには、
linuxParameters
パラメータを使用してデバイスの詳細を指定します。詳細については、「タスク定義の要件」を参照してください。
Amazon ECS に最適化された Amazon Linux 2023 (Neuron) AMI の使用
Amazon ECS では、Amazon Linux 2023 ベースの Amazon ECS 最適化 AMI が、AWS Trainium および AWS Inferentia のワークロード用に用意されています。これには、Docker 用の AWS Neuron ドライバーとランタイムが付属しています。この AMI により、Amazon ECS 上で機械学習推論ワークロードの実行が容易になります。
Amazon EC2 の Trn1、Inf1、Inf2 インスタンスを起動する際は、Amazon ECS に最適化された Amazon Linux 2023 (Neuron) AMI を使用することをお勧めします。
現在の Amazon ECS に最適化された Amazon Linux 2023 (Neuron) AMI を取得するには、AWS CLI で次のコマンドを使用します。
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2023/neuron/recommended
Amazon ECS に最適化された Amazon Linux 2023 (Neuron) AMI は、以下のリージョンでサポートされています。
-
米国東部 (バージニア北部)
-
米国東部 (オハイオ)
-
米国西部 (北カリフォルニア)
-
米国西部 (オレゴン)
-
アジアパシフィック (ムンバイ)
-
アジアパシフィック (大阪)
-
アジアパシフィック (ソウル)
-
アジアパシフィック (東京)
-
アジアパシフィック (シンガポール)
-
アジアパシフィック (シドニー)
-
カナダ (中部)
-
欧州 (フランクフルト)
-
欧州 (アイルランド)
-
欧州 (ロンドン)
-
欧州 (パリ)
-
欧州 (ストックホルム)
-
南米 (サンパウロ)
Amazon ECS に最適化された Amazon Linux 2 (Neuron) AMI の使用
Amazon ECS では、Amazon Linux 2 ベースの Amazon ECS 最適化 AMI が、AWS Trainium および AWS Inferentia のワークロード用に用意されています。これには、Docker 用の AWS Neuron ドライバーとランタイムが付属しています。この AMI により、Amazon ECS 上で機械学習推論ワークロードの実行が容易になります。
Amazon EC2 の Trn1、Inf1、Inf2 インスタンスを起動する際は、Amazon ECS 最適化 Amazon Linux 2 (Neuron) AMI を使用することをお勧めします。
現在の Amazon ECS 最適化 Amazon Linux 2 (Neuron) AMI を取得するには、AWS CLI で次のコマンドを使用します。
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/inf/recommended
Amazon ECS 最適化 Amazon Linux 2 (Neuron) AMI は、以下のリージョンでサポートされています。
-
米国東部 (バージニア北部)
-
米国東部 (オハイオ)
-
米国西部 (北カリフォルニア)
-
米国西部 (オレゴン)
-
アジアパシフィック (ムンバイ)
-
アジアパシフィック (大阪)
-
アジアパシフィック (ソウル)
-
アジアパシフィック (東京)
-
アジアパシフィック (シンガポール)
-
アジアパシフィック (シドニー)
-
カナダ (中部)
-
欧州 (フランクフルト)
-
欧州 (アイルランド)
-
欧州 (ロンドン)
-
欧州 (パリ)
-
欧州 (ストックホルム)
-
南米 (サンパウロ)
タスク定義の要件
Amazon ECS 上に Neuron をデプロイするには、TensorFlow の推論モデルを提供するビルド済みコンテナのコンテナ定義が、タスク定義の中に含まれている必要があります。この定義は、AWS Deep Learning Containers によって提供されます。このコンテナには、AWS Neuron ランタイムと TensorFlow Serving アプリケーションが含まれています。起動時に、このコンテナは Amazon S3 からモデルを取得し、保存されたモデルを使用して Neuron TensorFlow Serving を起動した後、予測リクエストのために待機します。次の例でのコンテナイメージでは、 TensorFlow 1.15 と Ubuntu 18.04 を使用しています。Neuron 用に最適化された事前構築済みの Deep Learning Containers の完全なリストは、GitHub に保持されます。詳細については、「AWS Neuron TensorFlow Serving の使用」を参照してください。
763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04
または、独自の Neuron サイドカーコンテナイメージを構築することもできます。詳細については、「AWS Deep Learning AMIs デベロッパーガイド」の「チュートリアル: Neuron TensorFlow Serving
タスク定義は、1 つのインスタンスタイプに固有である必要があります。コンテナでは、ホストコンテナインスタンス向けに用意された、固有の AWS Trainium または AWS Inferentia デバイスを使用するよう設定する必要があります。これは、linuxParameters
パラメータを使用して設定します。次の表に、各インスタンスタイプに固有のチップの詳細を示します。
インスタンスタイプ | vCPUs | RAM (GiB) | AWS ML アクセラレーターチップ | デバイスへのパス |
---|---|---|---|---|
trn1.2xlarge | 8 | 32 | 1 | /dev/neuron0 |
trn1.32xlarge | 128 | 512 | 16 |
/dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 ,
/dev/neuron4 , /dev/neuron5 ,
/dev/neuron6 , /dev/neuron7 ,
/dev/neuron8 , /dev/neuron9 ,
/dev/neuron10 , /dev/neuron11 ,
/dev/neuron12 , /dev/neuron13 ,
/dev/neuron14 , /dev/neuron15
|
inf1.xlarge | 4 | 8 | 1 | /dev/neuron0 |
inf1.2xlarge | 8 | 16 | 1 | /dev/neuron0 |
inf1.6xlarge | 24 | 48 | 4 | /dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 |
inf1.24xlarge | 96 | 192 | 16 |
/dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 ,
/dev/neuron4 , /dev/neuron5 ,
/dev/neuron6 , /dev/neuron7 ,
/dev/neuron8 , /dev/neuron9 ,
/dev/neuron10 , /dev/neuron11 ,
/dev/neuron12 , /dev/neuron13 ,
/dev/neuron14 , /dev/neuron15
|
inf2.xlarge | 8 | 16 | 1 | /dev/neuron0 |
inf2.8xlarge | 32 | 64 | 1 | /dev/neuron0 |
inf2.24xlarge | 96 | 384 | 6 | /dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 ,
/dev/neuron4 , /dev/neuron5 , |
inf2.48xlarge | 192 | 768 | 12 | /dev/neuron0 , /dev/neuron1 ,
/dev/neuron2 , /dev/neuron3 ,
/dev/neuron4 , /dev/neuron5 ,
/dev/neuron6 , /dev/neuron7 ,
/dev/neuron8 , /dev/neuron9 ,
/dev/neuron10 , /dev/neuron11 |