AWS Neuron 機械学習ワークロードでの Amazon ECS タスク定義 - Amazon Elastic Container Service

AWS Neuron 機械学習ワークロードでの Amazon ECS タスク定義

機械学習のワークロード用に、Amazon EC2 Trn1Amazon EC2 Inf1Amazon EC2 Inf2 インスタンスをクラスターに登録できます。

Amazon EC2 Trn1 インスタンスは、AWS Trainium チップを搭載しています。これらのインスタンスは、クラウドでの機械学習用に高性能で低コストのトレーニングを提供します。Trn1 インスタンスで AWS Neuron を使用した機械学習フレームワークを使用して、機械学習推論モデルをトレーニングできます。その後、Inf1 インスタンスまたは Inf2 インスタンスでモデルを実行して、AWS Inferentia チップのアクセラレーションを使用できます。

Amazon EC2 Inf1 インスタンスと Inf2 インスタンスは、AWS Inferentia チップを搭載しています。これらは、クラウドで高性能かつ最低レベルのコストの推論を提供します。

機械学習モデルは、専用の Software Developer Kit (SDK) である AWS Neuron を使用してコンテナにデプロイされます。この SDK は、AWS 機械学習チップの機械学習パフォーマンスを最適化するコンパイラ、ランタイム、およびプロファイリングツールからなります。 AWSNeuron は、TensorFlow、PyTorch、Apache MXNet などの一般的な機械学習フレームワークをサポートしています。

考慮事項

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