View a markdown version of this page

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

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

機械学習ワークロード用のクラスターには、Amazon EC2 Trn1Amazon EC2 Trn2Amazon EC2 Inf1 (Inf1 は EC2 起動タイプでのみサポートされています)、Amazon EC2 Inf2 インスタンスを使用できます。

Amazon EC2 Trn1 および Trn2 インスタンスには、AWS Trainium チップが搭載されています。これらのインスタンスは、クラウドでの機械学習用に高性能で低コストのトレーニングを提供します。Trn1 または Trn2 インスタンスで AWS Neuron を用いる機械学習フレームワークを使用して、機械学習推論モデルをトレーニングできます。その後、Inf1 インスタンス (Inf1 は EC2 起動タイプでのみサポートされています) または 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、Trn2、Inf1、Inf2、およびその他のインスタンスの組み合わせを含めることができます。

  • AWS Neuron をサポートする機械学習フレームワークを使用するコンテナ内に、Linux アプリケーションが必要です。

    重要

    他のフレームワークを使用するアプリケーションでは、Trn1、Trn2、Inf1、Inf2 インスタンスでパフォーマンスが向上しない場合があります。

  • Amazon ECS は、Neuron デバイスアクセスを設定するための 2 つのアプローチに対応しています。

    • マネージド Neuron デバイスの割り当て – コンテナ定義のタイプ NeuronDeviceresourceRequirements パラメータを使用します。Amazon ECS は Neuron デバイスを自動的に検出し、コンテナに割り当てます。マネージドインスタンスでのみ使用できます。詳細については、「マネージド Neuron デバイスの割り当て」を参照してください。

    • 手動 Neuron デバイスの仕様linuxParameters.devices パラメータを使用して Neuron デバイスパスを明示的に指定します。EC2 起動タイプとマネージドインスタンスの両方で使用できます。詳細については、「手動 Neuron デバイスの仕様」を参照してください。

    重要

    競合を避けるため、1 つのアプローチのみを一貫して使用してください。

マネージド Neuron デバイスの割り当て

マネージドインスタンスでは、コンテナ定義の resourceRequirements パラメータを使用して Neuron デバイスをリクエストできます。Amazon ECS は、インスタンス上の Neuron デバイスを自動的に検出し、タスクに割り当て、インスタンス上のすべての Neuron デバイスにアクセスできるコンテナを設定します。タスクにはすべてのデバイスへの排他的アクセスが必要なため、インスタンスごとに実行される Neuron タスクは 1 つのみです。

注記

Inf1 インスタンスは EC2 起動タイプでのみサポートされています。Inf1 インスタンスを使用するには、「手動 Neuron デバイスの仕様」を参照してください。

Neuron インスタンスの選択

マネージドインスタンスワークロードの Neuron 対応インスタンスタイプを選択するには、キャパシティプロバイダーの起動テンプレートで instanceRequirements オブジェクトを使用します。次の属性を使用して、Neuron 対応インスタンスを選択できます。

  • acceleratorManufacturersamazon-web-services を使用して、AWS アクセラレーター (Inferentia と Trainium を含む) を持つインスタンスを選択します。

  • acceleratorNamesinferentia2trainium、または trainium2 を使用して、特定のアクセラレーターチップを選択します。

  • allowedInstanceTypesinf* および trn* を使用して、名前別の Neuron インスタンスタイプを選択します。

次の例では allowedInstanceTypes を使用しています。

{ "instanceRequirements": { "allowedInstanceTypes": ["inf*", "trn*"] } }

タスク定義

タスク定義で Neuron デバイスをリクエストするには、タイプ NeuronDevice と値 ALLresourceRequirements エントリを追加します。これにより、インスタンス上のすべての Neuron デバイスへの排他的アクセスがコンテナに付与されます。

以下の制約が適用されます。

  • resourceRequirementsNeuronDevice で指定できるコンテナ定義は最大 1 つです。

  • 同じタスク定義の Neuron デバイスでは、resourceRequirements をタイプ NeuronDevice および linuxParameters.devices と組み合わせることはできません。

タスクが開始されたら、DescribeTasks API オペレーションを呼び出して Neuron デバイスの割り当てを検証できます。レスポンスには、割り当てられた Neuron デバイスの ID を示す、各コンテナの neuronDeviceIds フィールドが含まれます。DescribeContainerInstances API オペレーションを呼び出して、コンテナインスタンスの registeredResources および remainingResources フィールドに NEURON_DEVICES を表示することもできます。

タスク定義の例については、「Neuron タスク定義の例」を参照してください。

手動 Neuron デバイスの仕様

このアプローチでは、linuxParameters.devices パラメータを使用してタスク定義で AWS Trainium または AWS Inferentia デバイスパスを手動で指定します。このアプローチは、EC2 起動タイプとマネージドインスタンスの両方で機能します。

AWS Trainium または AWS Inferentia チップで実行できる推論または推論トレーニングのタスクは 1 つだけです。各タスクに異なるデバイスを割り当てることで、インスタンス上のチップの数だけタスクを実行できます。

EC2 起動タイプの場合、タスク配置の制約を設定するときにインスタンスタイプの属性を使用して、指定したインスタンスタイプでタスクが起動するようにできます。詳細については、「Amazon ECS がタスクをコンテナインスタンスに配置する方法」を参照してください。

タスク定義の要件

タスク定義は、1 つのインスタンスタイプに固有である必要があります。コンテナでは、ホストコンテナインスタンス向けに用意された、固有の AWS Trainium または AWS Inferentia デバイスを使用するよう設定する必要があります。これは、linuxParameters パラメータを使用して設定します。次の表に、各インスタンスタイプに固有のチップの詳細を示します。

インスタンスタイプ vCPU 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
trn2.48xlarge 192 1536 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

タスク定義の例については、「Neuron タスク定義の例」を参照してください。

マネージドインスタンス

マネージドインスタンスは、Neuron ドライバーを含む AMI を自動的に使用します。追加の AMI 設定は必要ありません。

EC2 起動タイプ

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