

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon EKS 上管理 Neuron 裝置
<a name="device-management-neuron"></a>

 AWS Trainium 和 AWS Inferentia 是由 設計的專用機器學習晶片 AWS。Amazon EKS 支援兩種在 EKS 叢集中管理 Neuron 裝置的機制：*Neuron DRA 驅動程式*和 *Neuron Kubernetes 裝置外掛程式*。

建議在執行 Kubernetes 1.34 版或更新版本的 EKS 叢集上使用 Neuron DRA 驅動程式，搭配 EKS 受管節點群組或自我管理節點群組進行新部署。Neuron DRA 驅動程式提供拓撲感知配置、連線裝置子集排程、邏輯 NeuronCore (LNC) 組態和 UltraServer 多節點配置，而不需要自訂排程器延伸。

Karpenter 或 EKS Auto 模式不支援 Neuron DRA 驅動程式。使用 [Neuron 裝置外掛程式](#neuron-device-plugin)搭配 Karpenter 和 EKS Auto 模式。Neuron 裝置外掛程式仍然支援 EKS 受管節點群組和自我管理節點。

## Neuron DRA 驅動程式與 Neuron 裝置外掛程式
<a name="_neuron_dra_driver_vs_neuron_device_plugin"></a>


| 功能 | Neuron DRA 驅動程式 | Neuron 裝置外掛程式 | 
| --- | --- | --- | 
| 最低 Kubernetes 版本 | 1.34 | 所有 EKS 支援的 Kubernetes 版本 | 
| EKS 運算 | 受管節點群組、自我管理節點 | EKS Auto Mode、Karpenter、受管節點群組、自我管理節點 | 
| EKS 最佳化 AMI 支援 | AL2023 (Neuron)、 Bottlerocket | AL2023 (Neuron)、 Bottlerocket | 
| 裝置廣告 | 透過裝置 ID、執行個體類型、拓撲、驅動程式版本和 EFA 地區性等`ResourceSlice`物件的豐富屬性 | `aws.amazon.com/neuron` 和`aws.amazon.com/neuroncore`擴充資源的整數計數 | 
| 連線的裝置子集 | 使用拓撲限制條件配置 1、4、8 或 16 個連線 Neuron 裝置的子集 | 需要 [Neuron 排程器延伸](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/tutorials/k8s-neuron-scheduler.html)以進行連續的裝置配置 | 
| LNC 組態 | 透過`ResourceClaimTemplate`參數的每個工作負載邏輯 NeuronCore 組態 (LNC=1 或 LNC=2) | 需要在 EC2 啟動範本中預先設定 | 
| 以屬性為基礎的選擇 | 使用 CEL 表達式，依執行個體類型、驅動程式版本和其他屬性篩選裝置 | 不支援 | 
| 拓撲感知 EFA 配置 | DRA 原生拓撲感知 | 自動拓撲感知 （僅限 EKS 最佳化 AL2023 AMIs) | 

## 安裝 Neuron DRA 驅動程式
<a name="neuron-dra-driver"></a>

Neuron DRA 驅動程式會將 Neuron 裝置公告為`DeviceClass`名稱為 的`ResourceSlice`物件`neuron.aws.com`。驅動程式會以 DaemonSet 的形式執行，並自動探索 Neuron 裝置及其拓撲屬性。

如需 Neuron DRA 驅動程式的詳細資訊，請參閱 [Neuron DRA 文件](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/neuron-dra.html#neuron-dra-driver-attributes-reference)。

### 先決條件
<a name="_prerequisites"></a>
+ 使用 EKS 受管節點群組或自我管理節點群組執行 Kubernetes 1.34 版或更新版本的 Amazon EKS 叢集。
+ 具有 AWS Trainium 或 Inferentia2 執行個體類型的節點。
+ 已在命令列環境中安裝 Helm，如需詳細資訊，請參閱[安裝 Helm 說明](helm.md)。
+  `kubectl` 設定為與您的叢集通訊，[安裝或更新 `kubectl`](install-kubectl.md#kubectl-install-update)如需詳細資訊，請參閱 。

### 程序
<a name="_procedure"></a>

**重要**  
請勿在執行 Neuron 裝置外掛程式的節點上安裝 Neuron DRA 驅動程式。這兩個機制不能同時存在於同一個節點上。如需更新，請參閱上游 Kubernetes [KEP-5004](https://github.com/kubernetes/enhancements/issues/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`DeviceClass``neuron.aws.com`。

1. 確認 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
   ```

1. 確認`DeviceClass`已建立 。

   ```
   kubectl get deviceclass neuron.aws.com
   ```

   ```
   NAME            AGE
   neuron.aws.com  60s
   ```

1. 確認已為您的節點公告`ResourceSlice`物件。

   ```
   kubectl get resourceslice
   ```

如需可用`ResourceSlice`物件屬性的資訊，請參閱 [Neuron DRA 文件](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/neuron-dra.html#neuron-dra-driver-attributes-reference)。

### 在 Pod 中請求 Neuron 裝置
<a name="_request_neuron_devices_in_a_pod"></a>

若要使用 DRA 驅動程式請求 Neuron 裝置，請建立參考 `ResourceClaimTemplate`的 ，`neuron.aws.com``DeviceClass`並在 Pod 規格中參考它。

下列範例會請求`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
```

### 配置連線的裝置子集
<a name="_allocate_connected_device_subsets"></a>

Neuron DRA 驅動程式可以配置已連線 Neuron 裝置的子集，而不需要 [Neuron 排程器延伸](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/tutorials/k8s-neuron-scheduler.html)。支援的子集大小為 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_id`、`resource.aws.com/devicegroup8_id`、 `resource.aws.com/devicegroup4_id`和 `resource.aws.com/devicegroup16_id`。`devicegroup` 屬性名稱中的數字對應至已連線拓撲群組中的 Neuron 裝置數量。例如， `resource.aws.com/devicegroup1_id` 識別單一 Neuron 裝置、`resource.aws.com/devicegroup4_id`識別 4 個連線裝置的群組，`resource.aws.com/devicegroup8_id`以及分別`resource.aws.com/devicegroup16_id`識別 8 和 16 個連線裝置的群組。選擇`matchAttribute`符合您請求`count`中裝置的 ，讓配置的裝置屬於相同的連線拓撲群組。如需這些屬性的詳細資訊，請參閱 [Neuron DRA 驅動程式文件](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/neuron-dra.html)。

### 設定邏輯 NeuronCores (LNC)
<a name="_configure_logical_neuroncores_lnc"></a>

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
```

### 使用對齊的 EFA 介面配置 Neuron 裝置
<a name="_allocate_neuron_devices_with_aligned_efa_interfaces"></a>

請參閱 [拓撲感知 EFA 和 GPU/Neuron 裝置配置](device-management-efa.md#efa-dra-topology-aware) 

## 安裝 Neuron Kubernetes 裝置外掛程式
<a name="neuron-device-plugin"></a>

Neuron Kubernetes 裝置外掛程式會將 Neuron 裝置公告為 `aws.amazon.com/neuron`，並將 NeuronCores 公告為`aws.amazon.com/neuroncore`延伸資源。您可以在容器資源請求和限制中請求 Neuron 裝置。

### 先決條件
<a name="_prerequisites_2"></a>
+ Amazon EKS 叢集。
+ 針對 AWS Trainium 或 AWS Inferentia 執行個體安裝主機層級元件的節點。如果使用 EKS AL2023 加速 AMIs 或 EKS Bottlerocket AMIs，則會包含這些項目。
+ 已在命令列環境中安裝 Helm，如需詳細資訊，請參閱[安裝 Helm 說明](helm.md)。
+  `kubectl` 設定為與您的叢集通訊，[安裝或更新 `kubectl`](install-kubectl.md#kubectl-install-update)如需詳細資訊，請參閱 。

### 程序
<a name="_procedure_2"></a>

1. 使用 Helm 安裝 Neuron Kubernetes 裝置外掛程式。

   ```
   helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \
       --set "npd.enabled=false"
   ```

1. 驗證 Neuron 裝置外掛程式 DaemonSet 正在執行。

   ```
   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
   ```

1. 確認您的節點具有可配置的 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
   ```

### 使用測試 Pod 驗證 Neuron 裝置
<a name="_verify_neuron_devices_with_a_test_pod"></a>

您可以在測試 Pod 中執行 `neuron-ls`工具，以驗證 Neuron 裝置是否可存取。

1. 使用下列內容建立名為 `neuron-ls.yaml` 的檔案。此資訊清單會啟動已安裝 `neuron-ls`工具的 [Neuron Monitor](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/tools/neuron-sys-tools/neuron-monitor-user-guide.html) 容器。

   ```
   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
         requests:
           aws.amazon.com/neuron: 1
     tolerations:
     - key: "aws.amazon.com/neuron"
       operator: "Exists"
       effect: "NoSchedule"
   ```

1. 套用清單檔案。

   ```
   kubectl apply -f neuron-ls.yaml
   ```

1. Pod 執行完成後，請檢視其日誌。

   ```
   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 排程器延伸](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/tutorials/k8s-neuron-scheduler.html)。Neuron DRA 驅動程式會透過拓撲限制自動處理此問題。

如需搭配 Amazon EKS 使用 Neuron 裝置的詳細資訊，請參閱[用於在 EKS 上執行的 Neuron 文件](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/kubernetes-getting-started.html)。