AWS Neuron 機械学習ワークロードでの Amazon ECS タスク定義
機械学習ワークロード用のクラスターには、Amazon EC2 Trn1
Amazon EC2 Trn1 および Trn2 インスタンスには、AWS Trainium
Amazon EC2 Inf1 インスタンスと Inf2 インスタンスは、AWS Inferentia
機械学習モデルは、専用の Software Developer Kit (SDK) である AWS Neuron
考慮事項
Amazon ECS での Neuron のデプロイを開始する前に、以下の点を考慮してください。
-
起動タイプに応じて、クラスターでは Trn1、Trn2、Inf1、Inf2、およびその他のインスタンスの組み合わせを含めることができます。
-
AWS Neuron をサポートする機械学習フレームワークを使用するコンテナ内に、Linux アプリケーションが必要です。
重要
他のフレームワークを使用するアプリケーションでは、Trn1、Trn2、Inf1、Inf2 インスタンスでパフォーマンスが向上しない場合があります。
-
Amazon ECS は、Neuron デバイスアクセスを設定するための 2 つのアプローチに対応しています。
-
マネージド Neuron デバイスの割り当て – コンテナ定義のタイプ
NeuronDeviceでresourceRequirementsパラメータを使用します。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 対応インスタンスを選択できます。
-
acceleratorManufacturers–amazon-web-servicesを使用して、AWS アクセラレーター (Inferentia と Trainium を含む) を持つインスタンスを選択します。 -
acceleratorNames–inferentia2、trainium、またはtrainium2を使用して、特定のアクセラレーターチップを選択します。 -
allowedInstanceTypes–inf*およびtrn*を使用して、名前別の Neuron インスタンスタイプを選択します。
次の例では allowedInstanceTypes を使用しています。
{ "instanceRequirements": { "allowedInstanceTypes": ["inf*", "trn*"] } }
タスク定義
タスク定義で Neuron デバイスをリクエストするには、タイプ NeuronDevice と値 ALL の resourceRequirements エントリを追加します。これにより、インスタンス上のすべての Neuron デバイスへの排他的アクセスがコンテナに付与されます。
以下の制約が適用されます。
-
resourceRequirementsのNeuronDeviceで指定できるコンテナ定義は最大 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
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