View a markdown version of this page

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

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

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

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

Elastic Fabric Adapter (EFA) は Amazon EC2 インスタンス用のネットワークデバイスであり、機械学習のトレーニングとハイパフォーマンスコンピューティング (HPC) ワークロード用にハイパフォーマンスのノード間通信を実現します。Amazon EKS は、EKS クラスターで EFA デバイスを管理できるように EFA デバイスプラグインをサポートしています。

EFA インターフェイスを備えた EKS ノードを作成する

EFA インターフェイスを備えた EKS ノードを作成すると、インスタンスのブートストラップ中に EFA インターフェイスがアタッチされます。デバイスごとの EFA 設定をカスタマイズする必要がある場合や、EFA 対応 EC2 インスタンス用にプレイスメントグループを使用する必要がある場合は、EKS マネージドノードグループまたは EKS セルフマネージドノードグループを使用することをお勧めします。起動テンプレートを使用して、ネットワークインターフェイスごとに設定を渡すことができます。

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

eksctl を使用して EKS ノードを efaEnabled 設定にプロビジョニングすると、すべてのインターフェイスがインターフェイスタイプ EFA で設定され、EFA 固有のセキュリティグループが作成されて、EFA デバイスプラグインがクラスターにインストールされます。eksctl の使用時にデバイスごとの EFA 設定をカスタマイズする必要がある場合は、起動テンプレートに eksctl サポートを使用することをお勧めします。

EKS 最適化 AMI を EFA と共に使用する

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

EFA Kubernetes デバイスプラグインをインストールする

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

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

前提条件

  • Amazon EKS クラスター。

  • ノードのインスタンスタイプが EFA 対応の Amazon EC2 であること。サポートされるインスタンスタイプのリストについては、「Amazon EC2 ユーザーガイド」の「サポートされるインスタンスタイプ」を参照してください。

  • ノードに EFA 用のホストレベルのコンポーネントがインストールされていること。こうしたコンポーネントは、EKS AL2023 高速 AMI または EKS Bottlerocket AMI を使用している場合に含まれています。

  • コマンドライン環境に Helm がインストールされていること。詳細については、「Setup Helm instructions」を参照してください。

  • クラスターと通信するように kubectl が設定されていること。詳細については、「kubectl をインストールまたは更新する」を参照してください。

手順

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

    helm repo add eks https://aws.github.io/eks-charts
  2. ローカル Helm リポジトリを更新します。

    helm repo update
  3. EFA デバイスプラグインをインストールします。

    helm install efa eks/aws-efa-k8s-device-plugin -n kube-system
  4. 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
  5. ノードを調べて割り当て可能な 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 デバイスをリクエストする

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