Amazon EKS で Neuron デバイスを管理する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「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 ローカリティなど、ResourceSlice オブジェクトによる豊富な属性

aws.amazon.com/neuron および aws.amazon.com/neuroncore 拡張リソースの整数カウント

コネクテッドデバイスサブセット

トポロジ制約を使用して、1、4、8、または 16 台のコネクテッド Neuron デバイスサブセットを割り当てる

連続してデバイスを割り当てるには、Neuron スケジューラ拡張機能が必要

LNC 設定

ResourceClaimTemplate パラメータによるワークロードごとの Logical NeuronCore 設定 (LNC=1 または LNC=2)

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 を参照してください。

  1. 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 としてデプロイされ、その際に DeviceClassneuron.aws.com になります。

  2. DRA ドライバーが DaemonSet として実行されていることを確認します。

    kubectl get ds -n neuron-dra-driver neuron-dra-driver-kubelet-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-dra-driver-kubelet-plugin 1 1 1 1 1 <none> 60s
  3. DeviceClass が作成されたことを確認します。

    kubectl get deviceclass neuron.aws.com
    NAME AGE neuron.aws.com 60s
  4. ノードに対して 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 スケジューラ拡張機能は必要ありません。サポートされているサブセットサイズは、1、4、8、または 16 台のデバイスです。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_idresource.aws.com/devicegroup4_idresource.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 をインストールまたは更新する」を参照してください。

手順

  1. Helm を使用して Neuron Kubernetes デバイスプラグインをインストールします。

    helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --set "npd.enabled=false"
  2. DaemonSet という Neuron デバイスプラグインが実行されていることを確認します。

    kubectl get ds -n kube-system neuron-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-device-plugin 1 1 1 1 1 <none> 60s
  3. ノードを調べて割り当て可能な 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 ツールを実行します。

  1. 次の内容で、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"
  2. マニフェストを適用します。

    kubectl apply -f neuron-ls.yaml
  3. ポッドの実行が終了したら、そのログを表示します。

    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 スケジューラ拡張機能が必要です。Neuron DRA ドライバーは、トポロジ制約を利用してこれを自動的に処理します。

Amazon EKS で Neuron デバイスを使用する方法の詳細については、EKS 上で実行するための Neuron のドキュメントを参照してください。