このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
Amazon EKS で Neuron デバイスを管理する
AWS Trainium と AWS Inferentia は、AWS によって設計された専用の機械学習チップです。Amazon EKS は、EKS クラスターで Neuron デバイスを管理できるように 2 つのメカニズムをサポートしています。Neuron DRA ドライバーと Neuron Kubernetes デバイスプラグインです。
Kubernetes バージョン 1.34 以降を実行している EKS クラスターで新たにデプロイする場合は、Neuron DRA ドライバーを使用することをお勧めします。Neuron DRA ドライバーは、トポロジ認識割り当て、コネクテッドデバイスサブセットスケジューリング、Logical NeuronCore (LNC) 設定、UltraServer マルチノード割り当ての機能を備えています。カスタムスケジューラ拡張機能は必要ありません。Neuron デバイスプラグインは、引き続きサポートされます。
Neuron DRA ドライバーと Neuron デバイスプラグインの比較
| 機能 | Neuron DRA ドライバー | Neuron デバイスプラグイン |
|---|---|---|
|
最小限必要な Kubernetes バージョン |
1.34 |
EKS でサポートされているすべての Kubernetes バージョン |
|
Karpenter と EKS 自動モード |
サポート外 |
サポート |
|
EKS 最適化 AMI のサポート |
AL2023 |
AL2023、Bottlerocket |
|
デバイスアドバタイズ |
デバイス ID、インスタンスタイプ、トポロジ、ドライバーバージョン、EFA ローカリティなど、 |
|
|
コネクテッドデバイスサブセット |
トポロジ制約を使用して、1、4、8、または 16 台のコネクテッド Neuron デバイスサブセットを割り当てる |
連続してデバイスを割り当てるには、Neuron スケジューラ拡張機能 |
|
LNC 設定 |
|
EC2 起動テンプレートで事前設定が必要 |
|
属性ベースの選択 |
CEL 式を使用してインスタンスタイプやドライバーバージョンといった属性でデバイスをフィルタリングする |
サポートされていません |
Neuron DRA ドライバーをインストールする
Neuron DRA ドライバーは、DeviceClass 名が neuron.aws.com である ResourceSlice オブジェクトとして Neuron デバイスをアドバタイズします。DaemonSet として実行されたこのドライバーは、Neuron デバイスとそのトポロジ属性を自動的に検出します。
Neuron DRA ドライバーの詳細については、Neuron DRA のドキュメント
Bottlerocket で Neuron DRA ドライバーを使用する機能は、現時点ではサポートされていません。
前提条件
-
Amazon EKS クラスターで Kubernetes バージョン 1.34 以降が動作していること。
-
ノードのインスタンスタイプが AWS Trainium または Inferentia2 であること。
-
コマンドライン環境に Helm がインストールされていること。詳細については、「Setup Helm instructions」を参照してください。
-
クラスターと通信するように
kubectlが設定されていること。詳細については、「kubectl をインストールまたは更新する」を参照してください。
手順
重要
Neuron デバイスプラグインが実行されているノードに、Neuron DRA ドライバーをインストールしないでください。2 つのメカニズムを同じノードに共存させることはできません。最新の情報については、アップストリーム Kubernetes KEP-5004
-
Helm を使用して Neuron DRA ドライバーをインストールします。
helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --namespace neuron-dra-driver \ --create-namespace \ --set "devicePlugin.enabled=false" \ --set "npd.enabled=false" \ --set "draDriver.enabled=true"ドライバーは、デフォルトで
neuron-dra-driver名前空間に DaemonSet としてデプロイされ、その際にDeviceClassはneuron.aws.comになります。 -
DRA ドライバーが DaemonSet として実行されていることを確認します。
kubectl get ds -n neuron-dra-driver neuron-dra-driver-kubelet-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-dra-driver-kubelet-plugin 1 1 1 1 1 <none> 60s -
DeviceClassが作成されたことを確認します。kubectl get deviceclass neuron.aws.comNAME AGE neuron.aws.com 60s -
ノードに対して
ResourceSliceオブジェクトがアドバタイズされていることを確認します。kubectl get resourceslice
使用可能な ResourceSlice オブジェクト属性については、Neuron DRA のドキュメント
ポッドで Neuron デバイスをリクエストする
DRA ドライバーを使用して Neuron デバイスをリクエストするには、neuron.aws.com DeviceClass を参照する ResourceClaimTemplate を作成し、それをポッド仕様で参照します。
次の例では、trn2.48xlarge インスタンス上のすべての Neuron デバイスをリクエストしています。
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-neurons spec: spec: devices: requests: - name: neurons exactly: deviceClassName: neuron.aws.com selectors: - cel: expression: "device.attributes['neuron.aws.com'].instanceType == 'trn2.48xlarge'" allocationMode: All --- apiVersion: v1 kind: Pod metadata: name: neuron-workload spec: containers: - name: app ... resources: claims: - name: neurons resourceClaims: - name: neurons resourceClaimTemplateName: all-neurons
コネクテッドデバイスサブセットを割り当てる
Neuron DRA ドライバーは、コネクテッド Neuron デバイスサブセットを割り当てることができます。Neuron スケジューラ拡張機能matchAttribute 制約とトポロジグループ ID を使用して、デバイスが接続されていることを確認します。
次の例では、4 台のコネクテッド Neuron デバイスをリクエストしています。
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: 1x4-connected-neurons spec: spec: devices: requests: - name: neurons exactly: deviceClassName: neuron.aws.com allocationMode: ExactCount count: 4 selectors: - cel: expression: "device.attributes['neuron.aws.com'].instanceType == 'trn2.48xlarge'" constraints: - requests: ["neurons"] matchAttribute: "resource.aws.com/devicegroup4_id"
コネクテッドサブセットにサポートされている matchAttribute 値は、resource.aws.com/devicegroup1_id、resource.aws.com/devicegroup4_id、resource.aws.com/devicegroup8_id、および resource.aws.com/devicegroup16_id です。
Logical NeuronCores (LNC) を設定する
Neuron DRA ドライバーにより、ResourceClaimTemplate パラメータを使用してワークロードごとに Logical NeuronCore を設定できます。これにより、EC2 起動テンプレートで LNC を事前設定する必要がなくなります。
次の例では、LNC が 1 に設定されているすべての Neuron デバイスをリクエストしています。
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-neurons-lnc-1 spec: spec: devices: requests: - name: neurons exactly: deviceClassName: neuron.aws.com selectors: - cel: expression: "device.attributes['neuron.aws.com'].instanceType == 'trn2.48xlarge'" allocationMode: All config: - requests: ["neurons"] opaque: driver: neuron.aws.com parameters: apiVersion: neuron.aws.com/v1 kind: NeuronConfig logicalNeuronCore: 1
Neuron Kubernetes デバイスプラグインをインストールする
Neuron Kubernetes デバイスプラグインは、Neuron デバイスを aws.amazon.com/neuron としてアドバタイズし、NeuronCores を aws.amazon.com/neuroncore 拡張リソースとしてアドバタイズします。コンテナリソースのリクエストや制限の際に Neuron デバイスをリクエストします。
前提条件
-
Amazon EKS クラスター。
-
ノードに、ホストレベルのコンポーネントが AWS Trainium または AWSInferentia インスタンス用にインストールされていること。こうしたコンポーネントは、EKS AL2023 高速 AMI または EKS Bottlerocket AMI を使用している場合に含まれています。
-
コマンドライン環境に Helm がインストールされていること。詳細については、「Setup Helm instructions」を参照してください。
-
クラスターと通信するように
kubectlが設定されていること。詳細については、「kubectl をインストールまたは更新する」を参照してください。
手順
-
Helm を使用して Neuron Kubernetes デバイスプラグインをインストールします。
helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --set "npd.enabled=false" -
DaemonSet という Neuron デバイスプラグインが実行されていることを確認します。
kubectl get ds -n kube-system neuron-device-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-device-plugin 1 1 1 1 1 <none> 60s -
ノードを調べて割り当て可能な Neuron デバイスがあることを確認します。
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronDevice:.status.allocatable.aws\.amazon\.com/neuron,NeuronCore:.status.allocatable.aws\.amazon\.com/neuroncore"NAME NeuronDevice NeuronCore ip-192-168-47-173.us-west-2.compute.internal 1 2
テストポッドを使用して Neuron デバイスを確認する
Neuron デバイスがアクセス可能であることを確認するには、テストポッドで neuron-ls ツールを実行します。
-
次の内容で、
neuron-ls.yamlという名前のファイルを作成します。このマニフェストは、neuron-lsツールがインストールされている Neuron Monitorコンテナを起動します。 apiVersion: v1 kind: Pod metadata: name: neuron-ls spec: restartPolicy: Never containers: - name: neuron-container image: public.ecr.aws/g4h4h0b5/neuron-monitor:1.0.0 command: ["/bin/sh"] args: ["-c", "neuron-ls"] resources: limits: aws.amazon.com/neuron: 1 tolerations: - key: "aws.amazon.com/neuron" operator: "Exists" effect: "NoSchedule" -
マニフェストを適用します。
kubectl apply -f neuron-ls.yaml -
ポッドの実行が終了したら、そのログを表示します。
kubectl logs neuron-ls出力例は次のとおりです。
instance-type: inf2.xlarge instance-id: ... +--------+--------+--------+---------+ | NEURON | NEURON | NEURON | PCI | | DEVICE | CORES | MEMORY | BDF | +--------+--------+--------+---------+ | 0 | 2 | 32 GB | 00:1f.0 | +--------+--------+--------+---------+
注記
Neuron デバイスプラグインを使用している場合に、複数の Neuron デバイスを備えたインスタンス (trn2.48xlarge など) で連続してデバイスを割り当てるには、Neuron Kubernetes スケジューラ拡張機能
Amazon EKS で Neuron デバイスを使用する方法の詳細については、EKS 上で実行するための Neuron のドキュメント