

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

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**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) ワークロード用にハイパフォーマンスのノード間通信を実現します。Amazon EKS は、EKS クラスターで EFA デバイスを管理できるように *EFA デバイスプラグイン*をサポートしています。

## EFA インターフェイスを備えた EKS ノードを作成する
<a name="eks-efa-nodes"></a>

EFA インターフェイスを備えた EKS ノードを作成すると、インスタンスのブートストラップ中に EFA インターフェイスがアタッチされます。デバイスごとの EFA 設定をカスタマイズする必要がある場合や、EFA 対応 EC2 インスタンス用に[プレイスメントグループ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)を使用する必要がある場合は、EKS マネージドノードグループまたは EKS セルフマネージドノードグループを使用することをお勧めします。[起動テンプレート](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)を使用して、ネットワークインターフェイスごとに設定を渡すことができます。

動的プロビジョニングで EKS 自動モードまたは Karpenter を使用している場合に、`vpc.amazonaws.com/efa` をリクエストするポッド用にインスタンスを作成すると、すべてのインターフェイスがインターフェイスタイプ `EFA` で設定されます。EKS 自動モードと Karpenter での静的キャパシティプロビジョニングでは、デバイスごとの EFA 設定は現時点ではサポートされていません。EKS 自動モードと Karpenter では、プレイスメントグループは現時点ではサポートされていません。

[`eksctl`](install-kubectl.md#eksctl-install-update) を使用して EKS ノードを `efaEnabled` 設定にプロビジョニングすると、すべてのインターフェイスがインターフェイスタイプ `EFA` で設定され、EFA 固有のセキュリティグループが作成されて、EFA デバイスプラグインがクラスターにインストールされます。`eksctl` の使用時にデバイスごとの EFA 設定をカスタマイズする必要がある場合は、[起動テンプレート](https://docs.aws.amazon.com/eks/latest/eksctl/launch-template-support.html)に eksctl サポートを使用することをお勧めします。

## EKS 最適化 AMI を EFA と共に使用する
<a name="eks-amis-efa"></a>

EKS 最適化 AL2023 高速 AMI (NVIDIA および Neuron) とすべての Bottlerocket AMI には、EFA を使用するために必要なホストレベルのコンポーネントが含まれています。EKS AL2023 および Bottlerocket AMI には EFA デバイスプラグインが含まれていないため、EFA を使用するワークロードをデプロイする前に、クラスターにデバイスプラグインを個別にインストールする必要があります。

## EFA Kubernetes デバイスプラグインをインストールする
<a name="efa-device-plugin"></a>

EFA デバイスプラグインは、EFA デバイスを `vpc.amazonaws.com/efa` 拡張リソースとしてアドバタイズします。コンテナリソースのリクエストや制限の際に EFA デバイスをリクエストします。トレーニングワークロードで EFA を設定する詳細なチュートリアルについては、「[Elastic Fabric Adapter を使用して Amazon EKS で機械学習トレーニングを実行する](node-efa.md)」を参照してください。

EFA デバイスプラグインは、物理 EC2 インスタンスで Neuron アクセラレーターと NVIDIA GPU にトポロジ的に近くにある EFA デバイスを自動的に割り当てます。

### 前提条件
<a name="_prerequisites"></a>
+ Amazon EKS クラスター。
+ ノードのインスタンスタイプが EFA 対応の Amazon EC2 であること。サポートされるインスタンスタイプのリストについては、「*Amazon EC2 ユーザーガイド*」の「[サポートされるインスタンスタイプ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html#efa-instance-types)」を参照してください。
+ ノードに EFA 用のホストレベルのコンポーネントがインストールされていること。こうしたコンポーネントは、EKS AL2023 高速 AMI または EKS Bottlerocket AMI を使用している場合に含まれています。
+ コマンドライン環境に Helm がインストールされていること。詳細については、「[Setup Helm instructions](helm.md)」を参照してください。
+  クラスターと通信するように `kubectl` が設定されていること。詳細については、「[`kubectl` をインストールまたは更新する](install-kubectl.md#kubectl-install-update)」を参照してください。

### 手順
<a name="_procedure"></a>

1. EKS Helm チャートリポジトリを追加します。

   ```
   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. DaemonSet という EFA デバイスプラグインが実行されていることを確認します。

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

   ```
   NAME                                  DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
   aws-efa-k8s-device-plugin-daemonset   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
   ```

### ポッドで EFA デバイスをリクエストする
<a name="_request_efa_devices_in_a_pod"></a>

デバイスプラグインを使用して 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: ...
```