

 **協助改進此頁面** 

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

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

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

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

 [Elastic Fabric Adapter](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) (EFA) 是 Amazon EC2 執行個體的網路裝置，可為人工智慧、機器學習和高效能運算 (HPC) 工作負載啟用高效能節點間通訊和 RDMA （遠端直接記憶體存取）。Amazon EKS 支援兩種在 EKS 叢集中管理 EFA 裝置的機制：*EFA 動態資源分配 (DRA) 驅動程式 (DRANET)* 和 *EFA 裝置外掛程式*。

建議使用 EFA DRA 驅動程式 (DRANET) 在執行 Kubernetes 1.34 版或更新版本的 EKS 叢集上使用 EKS 受管節點群組或自我管理節點群組進行新部署。EFA DRA 驅動程式可讓您設定拓撲感知配置，將 EFA 介面與其拓撲本機 GPUs 或 Neuron 裝置配對，並支援 Pod 之間的裝置共用。

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

## EFA DRA 驅動程式與 EFA 裝置外掛程式
<a name="eks-efa-dra-vs-device-plugin"></a>


| 功能 | EFA DRA 驅動程式 | EFA 裝置外掛程式 | 
| --- | --- | --- | 
| 最低 Kubernetes 版本 | 1.34 | 所有 EKS 支援的 Kubernetes 版本 | 
| EKS 運算 | 受管節點群組、自我管理節點 | EKS Auto Mode、Karpenter、受管節點群組、自我管理節點 | 
| EKS 最佳化 AMIs | AL2023 (NVIDIA、Neuron)、 Bottlerocket | AL2023 (NVIDIA、Neuron)、 Bottlerocket | 
| 裝置廣告 | 透過裝置類型、拓撲和 PCIe 地區性等`ResourceSlice`物件的豐富屬性 | `vpc.amazonaws.com/efa` 延伸資源的整數計數 | 
| GPU-EFA 親和性 | DRA 原生拓撲感知 | 自動拓撲感知 （僅限 EKS 最佳化 AL2023 AMIs) | 
| Neuron-EFA 親和性 | DRA 原生拓撲感知 | 自動拓撲感知 （僅限 EKS 最佳化 AL2023 AMIs) | 
| 裝置共用 | 多個 Pod 可以透過共用`ResourceClaim`參考共用相同的 EFA 裝置 | 不支援。每個 EFA 裝置只會配置給一個 Pod。 | 

## 使用 EFA 介面建立 EKS 節點
<a name="eks-efa-nodes"></a>

當您使用 EFA 介面建立 EKS 節點時，EFA 介面會在執行個體佈建期間連接至執行個體。您可以自訂每個裝置的 EFA 組態，並將[置放群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)與 Karpenter、EKS 受管節點群組或 EKS 自我管理節點群組搭配使用。使用 Karpenter，您可以透過 傳遞每個網路界面的組態`NodeClass`。透過 EKS 受管節點群組或自我管理節點，您可以使用[啟動範本](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)傳遞每個網路介面的組態。EKS Auto Mode 支援每個裝置 EFA 組態和置放群組。

使用 搭配 `efaEnabled`設定[`eksctl`](install-kubectl.md#eksctl-install-update)佈建 EKS 節點時，所有介面都會設定為介面類型 `EFA`、建立 EFA 特定的安全群組，並在叢集上安裝 EFA 裝置外掛程式。如果您需要在使用 時自訂每個裝置的 EFA 組態`eksctl`，建議您使用 `eksctl 對[啟動範本](https://docs.aws.amazon.com/eks/latest/eksctl/launch-template-support.html)的支援。

下列範例示範如何使用 EFA 介面設定`NodeClass`和啟動範本。這有助於自訂用於 EFA 和標準 IP 型流量的介面。如需每個執行個體類型支援的 EFA 介面數量，以及如何設定它們以取得最大網路頻寬的資訊，請參閱《*Amazon EC2 使用者指南*》中的為[啟用 EFA 的執行個體類型最大化網路頻寬](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-acc-inst-types.html)。

## Karpenter
<a name="eks-efa-auto-karpenter"></a>

中的每個項目都會`networkInterfaces`指定 `networkCardIndex`、 `deviceIndex`和 `interfaceType`。`interfaceType` 可以`interface`用於標準網路介面，也可以`efa-only`用於專用於 RDMA 流量且未指派 IP 地址的 EFA 介面。設定 `networkInterfaces` 時，參考 啟動`NodePool`的執行個體`NodeClass`會使用此組態，無論 Pod 是否請求`vpc.amazonaws.com/efa`資源。

使用 Karpenter 而不在 `networkInterfaces`中指定 時`NodeClass`，為請求的 Pod 建立的執行個體`vpc.amazonaws.com/efa`會設定所有介面類型 `EFA`。

的`networkInterfaces`組態`EC2NodeClass`已在 Karpenter 1.11 版中新增。下列範例顯示為具有 1 個 ENA 介面和 8 個僅限 EFA 介面的 P6-B200 執行個體`EC2NodeClass`設定的 。

### 範例 Karpenter EC2NodeClass 搭配 P6-B200 的僅限 EFA 介面
<a name="eks-efa-karpenter-example"></a>

```
apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
  name: efa-node-class
spec:
  networkInterfaces:
  - networkCardIndex: 0
    deviceIndex: 0
    interfaceType: interface
  - networkCardIndex: 0
    deviceIndex: 1
    interfaceType: efa-only
  - networkCardIndex: 1
    deviceIndex: 0
    interfaceType: efa-only
  - networkCardIndex: 2
    deviceIndex: 0
    interfaceType: efa-only
  - networkCardIndex: 3
    deviceIndex: 0
    interfaceType: efa-only
  - networkCardIndex: 4
    deviceIndex: 0
    interfaceType: efa-only
  - networkCardIndex: 5
    deviceIndex: 0
    interfaceType: efa-only
  - networkCardIndex: 6
    deviceIndex: 0
    interfaceType: efa-only
  - networkCardIndex: 7
    deviceIndex: 0
    interfaceType: efa-only
```

## EKS 受管節點群組和自我管理節點
<a name="eks-efa-mng-self-managed"></a>

透過 EKS 受管節點群組或自我管理節點，您可以使用[啟動範本](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)傳遞每個網路介面的組態。

下列範例顯示為具有 1 個 ENA 介面和 8 個僅限 EFA 介面的 P6-B200 執行個體設定的啟動範本。主要網路介面 （網路卡 0、裝置索引 0) 使用 IP 流量的標準`interface`類型，而其他介面則`efa-only`用於專用 RDMA 流量。根據您的執行個體類型調整`efa-only`介面數量。如需每個執行個體類型支援的 EFA 介面數量，請參閱《*Amazon EC2 使用者指南*》中的[啟用 EFA 執行個體類型的網路頻寬最大化](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-acc-inst-types.html)。

### P6-B200 搭配僅限 EFA 介面的啟動範本範例
<a name="eks-efa-launch-template-example"></a>

將 取代` security-group-id `為您的值。安全群組必須允許進出本身的所有傳入和傳出流量，才能啟用 EFA OS-bypass 功能。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[步驟 1：準備啟用 EFA 的安全群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-security)。

**重要**  
使用 EKS 受管節點群組時，請勿在啟動範本`SubnetId`中指定 。EKS 要求透過 `CreateNodegroup` API 指定所有子網路，並拒絕包含子網路組態的啟動範本。

```
{
  "LaunchTemplateName": "efa-launch-template",
  "LaunchTemplateData": {
    "InstanceType": "p6-b200.48xlarge",
    "NetworkInterfaces": [
      {
        "NetworkCardIndex": 0,
        "DeviceIndex": 0,
        "InterfaceType": "interface",
        "Groups": ["security-group-id"]
      },
      {
        "NetworkCardIndex": 0,
        "DeviceIndex": 1,
        "InterfaceType": "efa-only",
        "Groups": ["security-group-id"]
      },
      {
        "NetworkCardIndex": 1,
        "DeviceIndex": 0,
        "InterfaceType": "efa-only",
        "Groups": ["security-group-id"]
      },
      {
        "NetworkCardIndex": 2,
        "DeviceIndex": 0,
        "InterfaceType": "efa-only",
        "Groups": ["security-group-id"]
      },
      {
        "NetworkCardIndex": 3,
        "DeviceIndex": 0,
        "InterfaceType": "efa-only",
        "Groups": ["security-group-id"]
      },
      {
        "NetworkCardIndex": 4,
        "DeviceIndex": 0,
        "InterfaceType": "efa-only",
        "Groups": ["security-group-id"]
      },
      {
        "NetworkCardIndex": 5,
        "DeviceIndex": 0,
        "InterfaceType": "efa-only",
        "Groups": ["security-group-id"]
      },
      {
        "NetworkCardIndex": 6,
        "DeviceIndex": 0,
        "InterfaceType": "efa-only",
        "Groups": ["security-group-id"]
      },
      {
        "NetworkCardIndex": 7,
        "DeviceIndex": 0,
        "InterfaceType": "efa-only",
        "Groups": ["security-group-id"]
      }
    ]
  }
}
```

## 搭配 EFA 使用 EKS 最佳化 AMIs
<a name="eks-amis-efa"></a>

EKS 最佳化 AL2023 加速 AMIs (NVIDIA 和 Neuron) 和所有 Bottlerocket AMIs 包含使用 EFA 所需的主機層級元件，特別是 [aws-efa-installer](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-enable) 安裝的元件。EKS AL2023 和 Bottlerocket AMIs **不包含** EFA DRA 驅動程式或 EFA 裝置外掛程式，而且這些必須分別安裝在叢集上，才能部署工作負載。

## 保留 IP 地址配置
<a name="eks-efa-conserve-ip"></a>

`p5.48xlarge` 和 等已啟用 EFA 的執行個體`p6-b200.48xlarge`支援許多網路介面。根據預設，Amazon VPC CNI 會將 IP 地址分配到所有已啟用 IP 的連接 ENIs，即使 Pod 未主動使用這些地址，也會從您的子網路取用大量 IP 地址。在具有數十個網路介面的執行個體上，這可能會快速耗盡子網路的可用 IP 空間。

若要減少啟用 EFA 節點的 IP 地址使用量，請將您的網路介面設定為`efa-only`用於主要節點以外的所有介面。僅限 EFA 的介面專用於 RDMA 流量，且沒有指派 IP 地址，因此不會耗用子網路中的地址。如需範例組態，請參閱 [Karpenter](#eks-efa-auto-karpenter)和 [EKS 受管節點群組和自我管理節點](#eks-efa-mng-self-managed)。如需每個執行個體類型的建議界面配置，請參閱《*Amazon EC2 使用者指南*》中的為[啟用 EFA 的執行個體類型最大化網路頻寬](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-acc-inst-types.html)。

除了使用`efa-only`介面之外，您還可以設定 Amazon VPC CNI 來限制暖 （預先配置） IP 地址和 ENIs 的數量。根據預設，VPC CNI 會預先配置 ENIs 和 IP 地址的暖集區，以加快 Pod 啟動速度，但在大型執行個體上，可以保留數百個未使用的 IP 地址。在 `aws-node` DaemonSet 上設定 `WARM_IP_TARGET`和 `WARM_ENI_TARGET`環境變數，以控制 CNI 維護的備用 IP 地址和 ENIs 數量。如需這些設定的詳細資訊，請參閱 [Amazon VPC CNI 最佳實務](https://docs.aws.amazon.com/eks/latest/best-practices/vpc-cni.html#_overview)。

**注意**  
`WARM_ENI_TARGET` 和 `WARM_IP_TARGET`設定適用於整個叢集，並適用於 VPC CNI 管理的所有節點。目前無法為每個節點群組或執行個體類型設定不同的值。如果您需要更精細地控制這些設定，請針對[容器藍圖問題 \#1834 ](https://github.com/aws/containers-roadmap/issues/1834)提供意見回饋。

## 安裝 EFA DRA 驅動程式 (DRANET)
<a name="efa-dra-driver"></a>

EFA DRA 驅動程式內建於上游 [DRANET](https://github.com/kubernetes-sigs/dranet) 專案中，可提供 Kubernetes DRA 的雲端感知網路裝置管理。本文件中會互換使用 *EFA DRA 驅動程式*和 *DRANET*，並參考相同的工具。

EFA DRA 驅動程式會將 EFA 裝置公告為具有驅動程式名稱 `dra.net`和`DeviceClass`名稱 的`ResourceSlice`物件`efa.networking.k8s.aws`。EFA DRA 驅動程式會在每個節點上以 DaemonSet 身分執行，並自動探索 EFA 裝置。

### 先決條件
<a name="_prerequisites"></a>
+ 使用 EKS 受管節點群組或自我管理節點群組執行 Kubernetes 1.34 版或更新版本的 Amazon EKS 叢集。
+ 具有啟用 EFA 的 Amazon EC2 執行個體類型的節點。如需支援的執行個體類型清單，請參閱《*Amazon EC2 使用者指南*》中的[支援的執行個體類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html#efa-instance-types)。
+ 針對 EFA 安裝主機層級元件的節點，如需詳細資訊[，請參閱安裝 EFA 軟體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-enable)。EKS 最佳化 AL2023 NVIDIA 和 Neuron AMIs，以及 Bottlerocket AMIs 包含 EFA 主機層級元件。
+ 已在命令列環境中安裝 Helm，如需詳細資訊，請參閱[安裝 Helm 說明](helm.md)。
+  `kubectl` 設定為與您的叢集通訊，[安裝或更新 `kubectl`](install-kubectl.md#kubectl-install-update)如需詳細資訊，請參閱 。

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

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

1. 新增 EKS Helm Chart 儲存庫。

   ```
   helm repo add eks https://aws.github.io/eks-charts
   ```

1. 更新本機 Helm 儲存庫。

   ```
   helm repo update
   ```

1. 使用 Helm 在叢集上安裝 EFA DRA 驅動程式。EFA DRA 驅動程式會自動透過執行個體中繼資料服務 (IMDS) 在 EC2 執行個體上執行，並啟用 EFA 裝置探索。根據預設，EFA DRA 驅動程式會部署為`kube-system`命名空間中的 DaemonSet。如需可設定的參數，請參閱 [EKS Helm Chart GitHub 儲存庫中的 Helm](https://github.com/aws/eks-charts/tree/master/stable/aws-dranet) values.yaml。

   ```
   helm install aws-dranet eks/aws-dranet --namespace kube-system
   ```

1. 確認 DRANET DaemonSet 正在執行。

   ```
   kubectl get daemonset -n kube-system aws-dranet
   ```

   ```
   NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
   aws-dranet    2         2         2       2            2           <none>          60s
   ```

1. 確認`DeviceClass`已建立 。

   ```
   kubectl get deviceclass
   ```

   ```
   NAME                    AGE
   efa.networking.k8s.aws  60s
   ```

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

   ```
   kubectl get resourceslices --field-selector spec.driver=dra.net
   ```

   如果上述步驟發生錯誤，您可以使用下列命令檢查 DRANET 的日誌。

   ```
   kubectl logs -n kube-system -l app=aws-dranet
   ```

1. 若要使用 DRA 驅動程式請求 EFA 裝置，請建立參考 EFA `ResourceClaimTemplate` 的 `ResourceClaim`或 ，`DeviceClass`並在 Pod 規格中參考它。下列範例會請求單一 EFA 裝置。

   ```
   apiVersion: resource.k8s.io/v1
   kind: ResourceClaimTemplate
   metadata:
     name: single-efa-claim
   spec:
     spec:
       devices:
         requests:
         - name: efa
           exactly:
             deviceClassName: efa.networking.k8s.aws
             count: 1
   ---
   apiVersion: v1
   kind: Pod
   metadata:
     name: efa-workload
   spec:
     containers:
     - name: app
       ...
       resources:
         claims:
         - name: efa-device
     resourceClaims:
     - name: efa-device
       resourceClaimTemplateName: single-efa-claim
   ```

## 拓撲感知 EFA 和 GPU/Neuron 裝置配置
<a name="efa-dra-topology-aware"></a>

EFA DRA 驅動程式支援拓撲感知配置，可將 EFA 介面與相同 PCIe 根目錄上的 GPUs 或 Neuron 裝置配對。使用 `matchAttribute` 限制條件來對齊 EFA 和 GPU 或 Neuron 裝置配置。若要使用此功能，您還必須使用 NVIDIA 或 Neuron DRA 驅動程式。如需詳細資訊，請參閱[在 Amazon EKS 上管理 NVIDIA GPU 裝置](device-management-nvidia.md)及[在 Amazon EKS 上管理 Neuron 裝置](device-management-neuron.md)。

下列範例會請求與 1 個 NVIDIA GPU 一致的 1 個 EFA 介面：

```
apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: aligned-efa-nvidia
spec:
  spec:
    devices:
      requests:
      - name: 1-efa
        exactly:
          deviceClassName: efa.networking.k8s.aws
          count: 1
      - name: 1-gpu
        exactly:
          deviceClassName: gpu.nvidia.com
          count: 1
      constraints:
      - requests: ["1-gpu", "1-efa"]
        matchAttribute: "resource.kubernetes.io/pcieRoot"
```

下列範例會請求與 4 個 Neuron 裝置對齊的 4 個 EFA 介面：

```
apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: aligned-efa-neuron
spec:
  spec:
    devices:
      requests:
      - name: 4-neurons
        exactly:
          deviceClassName: neuron.aws.com
          count: 4
      - name: 4-efas
        exactly:
          deviceClassName: efa.networking.k8s.aws
          count: 4
      constraints:
      - requests: ["4-neurons", "4-efas"]
        matchAttribute: "resource.aws.com/devicegroup4_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 裝置和 EFA 介面屬於相同的連線拓撲群組。如需這些屬性的詳細資訊，請參閱 [Neuron DRA 驅動程式文件](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/neuron-dra.html)。

您可以使用 `allocationMode` 簡化 EFA 裝置如何配置給對齊的 GPU 或 Neuron 加速器。`allocationMode` 欄位支援兩個值： `ExactCount`（預設值） 請求 指定的特定數量的裝置`count`，並`All`請求集區中的所有相符裝置。例如，在`p5.48xlarge`執行個體上，有四個 EFA 裝置與一個 GPU 共用相同的 PCIe 根。若要使用對齊的 GPUs 配置這些 EFA 裝置群組，即使您不知道確切的 EFA-GPU 裝置映射和對齊的 EFA 裝置計數，您也可以`ResourceClaimTemplate`使用 `allocationMode: All` 為 EFA 裝置設定您的 。

```
apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: aligned-all-efa-one-nvidia
spec:
  spec:
    devices:
      requests:
      - name: all-efas
        exactly:
          deviceClassName: efa.networking.k8s.aws
          allocationMode: All
      - name: one-gpu
        exactly:
          deviceClassName: gpu.nvidia.com
          allocationMode: ExactCount
          count: 1
      constraints:
      - requests: ["all-efas", "one-gpu"]
        matchAttribute: "resource.kubernetes.io/pcieRoot"
```

## 在多個 Pod 之間共用 EFA 裝置
<a name="efa-dra-share"></a>

EFA DRA 驅動程式支援使用 在多個 Pod 之間共用 EFA 裝置`ResourceClaim`。與為每個 Pod `ResourceClaimTemplate`產生個別宣告的 不同， `ResourceClaim`是您獨立建立並從多個 Pod 參考的具名物件。所有參考相同`ResourceClaim`已配置 EFA 裝置共用存取權的 Pod，並排程到提供這些裝置的相同節點。

若要在 Pod 之間共用 EFA 裝置，請建立`ResourceClaim`請求 EFA 裝置的 ，然後使用 在每個 Pod 的 `resourceClaims` 欄位中依名稱參考該宣告`resourceClaimName`。在建立參考叢集的 Pod 之前，叢集中`ResourceClaim`必須存在 。如果參考`ResourceClaim`不存在，Pod 會保持待定狀態，直到建立宣告為止。

下列範例會建立`ResourceClaim`請求 4 個 EFA 裝置的 ，以及兩個共用這些裝置存取權的 Pod。

1. 建立 `ResourceClaim`。

   ```
   apiVersion: resource.k8s.io/v1
   kind: ResourceClaim
   metadata:
     name: shared-efa
   spec:
     devices:
       requests:
       - name: efa
         exactly:
           deviceClassName: efa.networking.k8s.aws
           count: 4
   ```

1. 在需要存取 EFA 裝置的每個 Pod 中`ResourceClaim`，依名稱參考 。每個 Pod 會使用 `resourceClaimName` 來參考現有的宣告，而非 `resourceClaimTemplateName`。

   ```
   apiVersion: v1
   kind: Pod
   metadata:
     name: training-worker
   spec:
     containers:
     - name: worker
       image: my-training-image
       resources:
         claims:
         - name: efa-devices
     resourceClaims:
     - name: efa-devices
       resourceClaimName: shared-efa
   ---
   apiVersion: v1
   kind: Pod
   metadata:
     name: training-monitor
   spec:
     containers:
     - name: monitor
       image: my-monitor-image
       resources:
         claims:
         - name: efa-devices
     resourceClaims:
     - name: efa-devices
       resourceClaimName: shared-efa
   ```

兩個 Pod 都參考相同的 `shared-efa``ResourceClaim`，並排程到配置這些 EFA 裝置的節點。`ResourceClaim` 生命週期獨立於 Pod，它會持續存在，直到您刪除它為止，即使所有參考它的 Pod 都被移除。

## 安裝 EFA Kubernetes 裝置外掛程式
<a name="eks-efa-device-plugin"></a>

EFA Kubernetes 裝置外掛程式會將 EFA 裝置公告為`vpc.amazonaws.com/efa`延伸資源。您可以在容器資源請求和限制中請求 EFA 裝置。如需使用訓練工作負載設定 EFA 的完整逐步解說，請參閱 [使用 Elastic Fabric Adapter 在 Amazon EKS 上執行機器學習訓練](node-efa.md)。

**重要**  
使用 EKS 最佳化 AL2023 加速 AMIs 時，會自動配置具有 EFA 介面的 NVIDIA GPUs 或 Neuron 裝置拓撲。使用 Bottlerocket EKS 最佳化 AMIs 或自訂 AMIs 時，不會發生此自動對齊。如果您需要透過 Bottlerocket 或自訂 AMIs 配置拓撲對齊加速器和 EFA 裝置，請使用 EFA DRA 驅動程式和對應的 Neuron DRA 驅動程式。Bottlerocket 不支援 NVIDIA DRA 驅動程式。如需詳細資訊，請參閱[拓撲感知 EFA 和 GPU/Neuron 裝置配置](#efa-dra-topology-aware)。

**重要**  
從 NVIDIA v0`k8s-device-plugin`.19.0 開始， `--mofed-enabled`旗標預設為 `true`，這會導致 NVIDIA 裝置外掛程式將所有`/dev/infiniband/uverbs*`裝置掛載到請求 GPUs 的容器。這與 EFA 裝置外掛程式發生衝突，應該是管理 中 EFA 裝置配置的元件`/dev/infiniband`。如果您使用 EKS 受管節點群組或自我管理節點搭配 NVIDIA 裝置外掛程式，則必須明確停用 MOFED。如需說明，請參閱[安裝 NVIDIA Kubernetes 裝置外掛程式](device-management-nvidia.md#nvidia-device-plugin)。  
EKS Auto Mode 預設不會啟用 MOFED，且不受此問題影響。

### 先決條件
<a name="_prerequisites_2"></a>
+ Amazon EKS 叢集。
+ 具有啟用 EFA 的 Amazon EC2 執行個體類型的節點。如需支援的執行個體類型清單，請參閱《*Amazon EC2 使用者指南*》中的[支援的執行個體類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html#efa-instance-types)。
+ 針對 EFA 安裝主機層級元件的節點，如需詳細資訊[，請參閱安裝 EFA 軟體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-enable)。EKS 最佳化 AL2023 NVIDIA 和 Neuron AMIs，以及 Bottlerocket AMIs 包含 EFA 主機層級元件。
+ 已在命令列環境中安裝 Helm，如需詳細資訊，請參閱[安裝 Helm 說明](helm.md)。
+  `kubectl` 設定為與您的叢集通訊，[安裝或更新 `kubectl`](install-kubectl.md#kubectl-install-update)如需詳細資訊，請參閱 。

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

1. 新增 EKS Helm Chart 儲存庫。

   ```
   helm repo add eks https://aws.github.io/eks-charts
   ```

1. 更新本機 Helm 儲存庫。

   ```
   helm repo update
   ```

1. 安裝 EFA 裝置外掛程式。

   ```
   helm install efa eks/aws-efa-k8s-device-plugin -n kube-system
   ```

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

   ```
   kubectl get daemonset -n kube-system efa-aws-efa-k8s-device-plugin
   ```

   ```
   NAME                                  DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
   efa-aws-efa-k8s-device-plugin         2         2         2       2            2           <none>          60s
   ```

1. 確認您的節點具有可分配的 EFA 資源。

   ```
   kubectl get nodes "-o=custom-columns=NAME:.metadata.name,EFA:.status.allocatable.vpc\.amazonaws\.com/efa"
   ```

   ```
   NAME                                           EFA
   ip-192-168-11-225.us-west-2.compute.internal   4
   ip-192-168-24-96.us-west-2.compute.internal    4
   ```

1. 若要使用裝置外掛程式請求 EFA 裝置，請在容器`vpc.amazonaws.com/efa`資源請求和限制中指定資源。

   ```
   apiVersion: v1
   kind: Pod
   metadata:
     name: efa-workload
   spec:
     containers:
     - name: app
       ...
       resources:
         limits:
           vpc.amazonaws.com/efa: 4
           hugepages-2Mi: ...
         requests:
           vpc.amazonaws.com/efa: 4
           hugepages-2Mi: ...
   ```