View a markdown version of this page

EFA-Geräte auf Amazon EKS verwalten - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Um zu diesem Benutzerhandbuch beizutragen, wählen Sie den GitHub Link Diese Seite bearbeiten unter, der sich im rechten Bereich jeder Seite befindet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

EFA-Geräte auf Amazon EKS verwalten

Elastic Fabric Adapter (EFA) ist ein Netzwerkgerät für Amazon EC2-Instances, das leistungsstarke Kommunikation zwischen Knoten und RDMA (Remote Direct Memory Access) für Workloads in den Bereichen künstliche Intelligenz, maschinelles Lernen und High Performance Computing (HPC) ermöglicht. Amazon EKS unterstützt zwei Mechanismen für die Verwaltung von EFA-Geräten in EKS-Clustern: den EFA Dynamic Resource Allocation (DRA) -Treiber (DRANET) und das EFA-Geräte-Plug-In.

Wir empfehlen, DRA-Treiber für neue Bereitstellungen mit Kubernetes-Versionen 1.34 und höher zu verwenden, wenn die statische Kapazitätsbereitstellung in Karpenter, von EKS verwaltete Knotengruppen oder selbstverwaltete Knoten verwendet wird. DRA wird derzeit im EKS-Automatikmodus nicht unterstützt. Mit dem EFA-DRA-Treiber können Sie eine topologieorientierte Zuweisung konfigurieren, die EFA-Schnittstellen mit ihren topologisch lokalen GPUs oder Neuron-Geräten verbindet und Geräte zwischen Pods gemeinsam nutzt.

EFA-DRA-Treiber im Vergleich zum EFA-Geräte-Plugin

Feature EFA-DRA-Treiber EFA-Geräte-Plugin

Mindestversion von Kubernetes

1.34

Alle EKS-supported Kubernetes-Versionen

EKS Compute

Karpenter (nur statische Kapazität), verwaltete Knotengruppen, selbstverwaltete Knoten

EKS Auto Mode, Karpenter, verwaltete Knotengruppen, selbstverwaltete Knoten

EKS-optimized AMIs

AL 2023, Flaschenrakete

AL2023, Flaschenrakete

Werbung für Geräte

Umfangreiche Attribute anhand von ResourceSlice Objekten wie Gerätetyp, Topologie und PCIe-Standort

Ganzzahlige Anzahl erweiterter Ressourcen vpc.amazonaws.com/efa

GPU-EFA Affinität

DRA-native Bewusstsein für Topologie

Automatische Topologieerkennung (nur AL2023 AMIs) EKS-optimized

Neuron-EFA Affinität

DRA-native Bewusstsein für Topologie

Automatische Topologieerkennung (nur AL2023 AMIs) EKS-optimized

Gemeinsame Nutzung von Geräten

Mehrere Pods können dasselbe EFA-Gerät über gemeinsame ResourceClaim Referenzen gemeinsam nutzen

Nicht unterstützt Jedes EFA-Gerät ist ausschließlich einem Pod zugeordnet.

EKS-Knoten mit EFA-Schnittstellen erstellen

Wenn Sie EKS-Knoten mit EFA-Schnittstellen erstellen, werden die EFA-Schnittstellen während der Instanzbereitstellung an die Instanz angehängt. Sie können die EFA-Konfiguration pro Gerät anpassen und Platzierungsgruppen mit EKS Auto Mode, Karpenter, EKS-verwalteten Knotengruppen oder selbstverwalteten EKS-Knotengruppen verwenden. Im EKS-Automatikmodus leiten Sie die Konfiguration für jede Netzwerkschnittstelle durch das Unterfenster weiter. NodeClass advancedNetworking.networkInterfaces Mit Karpenter übergeben Sie die Konfiguration für jede Netzwerkschnittstelle über den. EC2NodeClass Bei EKS-verwalteten Knotengruppen oder selbstverwalteten Knoten übergeben Sie die Konfiguration für jede Netzwerkschnittstelle mit Startvorlagen.

Wenn Sie die efaEnabled Einstellung eksctl für die Bereitstellung von EKS-Knoten verwenden, werden alle Schnittstellen mit dem Schnittstellentyp konfiguriertEFA, eine EFA-specific Sicherheitsgruppe wird erstellt und das EFA-Geräte-Plug-In wird auf dem Cluster installiert. Wenn Sie die EFA-Konfiguration pro Gerät bei der Verwendung anpassen müssen, wird empfohleneksctl, die Unterstützung von `eksctl für Startvorlagen zu verwenden. https://docs.aws.amazon.com/eks/latest/eksctl/launch-template-support.html

Die folgenden Beispiele zeigen, wie Vorlagen mit EFA-Schnittstellen konfiguriert NodeClass und gestartet werden. Dies ist nützlich, um die Schnittstellen anzupassen, die für EFA-Verkehr im Vergleich zu IP-based Standardverkehr verwendet werden. Informationen zur Anzahl der von den einzelnen Instance-Typen unterstützten EFA-Schnittstellen und zur Konfiguration dieser Schnittstellen für maximale Netzwerkbandbreite finden Sie unter Maximieren der Netzwerkbandbreite für EFA-enabled Instance-Typen im Amazon EC2-Benutzerhandbuch.

EKS Auto Mode

Im EKS-Automatikmodus konfigurieren Sie die EFA-Netzwerkschnittstellen mithilfe des advancedNetworking.networkInterfaces Felds im NodeClass (). eks.amazonaws.com/v1 Jeder Eintrag gibt ein networkCardIndexdeviceIndex, und interfaceType an. Dies interfaceType kann interface für Standard-Netzwerkschnittstellen oder efa-only für EFA-Schnittstellen verwendet werden, die für RDMA-Verkehr ohne zugewiesene IP-Adressen vorgesehen sind.

Wenn konfiguriert networkInterfaces ist, NodeClass verwenden Instances, die vom NodePool referenzierenden Server gestartet werden, diese Konfiguration, unabhängig davon, ob Pods Ressourcen anfordern. vpc.amazonaws.com/efa EKS Auto Mode fügt nach dem Start der Instance für Knoten mit statischer Netzwerkschnittstellenkonfiguration keine zusätzlichen IPs, Präfixe oder ENIs hinzu — nur die beim Start konfigurierten Schnittstellen und IPs sind für Pods verfügbar.

Diese Funktion kann mit Node-Pools mit statischer Kapazität verwendet werden, um vorgewärmte EFA-ready Knoten für verteilte Trainings- und Inferenz-Workloads aufrechtzuerhalten.

apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: efa-node-class spec: role: MyNodeRole subnetSelectorTerms: - tags: Name: "private-subnet" securityGroupSelectorTerms: - tags: Name: "efa-security-group" placementGroupSelector: name: "ml-training-pg" advancedNetworking: networkInterfaces: - deviceIndex: 0 interfaceType: interface networkCardIndex: 0 secondaryIPv4PrefixCount: 1 - 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

Eine vollständige Liste der Einschränkungen bei der Konfiguration statischer Netzwerkschnittstellen finden Sie Konfiguration der statischen Netzwerkschnittstelle in der NodeClass Dokumentation.

Karpenter

Jeder Eintrag in networkInterfaces gibt ein networkCardIndexdeviceIndex, und aninterfaceType. Das interfaceType kann interface für Standard-Netzwerkschnittstellen oder efa-only für EFA-Schnittstellen verwendet werden, die für RDMA-Verkehr vorgesehen sind und denen keine IP-Adressen zugewiesen sind. Wenn konfiguriert networkInterfaces ist, NodeClass verwenden Instances, die vom NodePool referenzierenden Host gestartet werden, diese Konfiguration, unabhängig davon, ob Pods Ressourcen anfordern. vpc.amazonaws.com/efa

Wenn Sie Karpenter verwenden, ohne networkInterfaces in Ihrem angegeben zu vpc.amazonaws.com/efa haben, sind bei InstanzenNodeClass, die für Pods erstellt wurden, alle Schnittstellen mit dem Schnittstellentyp konfiguriert. EFA

Die networkInterfaces Konfiguration für EC2NodeClass wurde in Karpenter v1.11 hinzugefügt. Das folgende Beispiel zeigt eine EC2NodeClass Konfiguration für eine P6-B200 Instanz mit 1 ENA-Schnittstelle und 8 Schnittstellen. EFA-only

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-verwaltete Knotengruppen und selbstverwaltete Knoten

Bei EKS-verwalteten Knotengruppen oder selbstverwalteten Knoten übergeben Sie die Konfiguration für jede Netzwerkschnittstelle mit Startvorlagen.

Das folgende Beispiel zeigt eine Startvorlage, die für eine P6-B200 Instance mit 1 ENA-Schnittstelle und 8 EFA-only Schnittstellen konfiguriert ist. Die primäre Netzwerkschnittstelle (Netzwerkkarte 0, Geräteindex 0) verwendet einen interface Standardtyp für den IP-Verkehr, während zusätzliche Schnittstellen den dedizierten RDMA-Verkehr verwendenefa-only. Passen Sie die Anzahl der efa-only Schnittstellen an Ihren Instance-Typ an. Die Anzahl der EFA-Schnittstellen, die von jedem Instance-Typ unterstützt werden, finden Sie im Amazon EC2-Benutzerhandbuch unter Maximieren der Netzwerkbandbreite für EFA-enabled Instance-Typen.

security-group-id Ersetzen Sie durch Ihre Werte. Die Sicherheitsgruppe muss den gesamten eingehenden und ausgehenden Verkehr zu und von sich selbst zulassen, um die OS-bypass EFA-Funktionalität zu aktivieren. Weitere Informationen finden Sie unter Schritt 1: Vorbereitung einer EFA-enabled Sicherheitsgruppe im Amazon EC2-Benutzerhandbuch.

Wichtig

Geben Sie dies nicht SubnetId in der Startvorlage an, wenn Sie von EKS verwaltete Knotengruppen verwenden. EKS verlangt, dass alle Subnetze über die CreateNodegroup API angegeben werden, und lehnt Startvorlagen ab, die eine Subnetzkonfiguration enthalten.

{ "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"] } ] } }

Verwenden von AMIs mit EFA EKS-optimized

Die EKS-optimized AL2023-AMIs und alle Bottlerocket-AMIs enthalten die Komponenten auf Host-Ebene, die für die Verwendung von EFA erforderlich sind, insbesondere die Komponenten, die vom aws-efa-installer installiert werden. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-enable Die EKS-AL2023- und Bottlerocket-AMIs enthalten weder den EFA-DRA-Treiber noch das EFA-Geräte-Plug-In, und diese müssen separat auf Ihrem Cluster installiert werden, bevor Sie Workloads bereitstellen.

Beibehaltung der IP-Adresszuweisung

EFA-enabled Instanzen wie p5.48xlarge und p6-b200.48xlarge unterstützen viele Netzwerkschnittstellen. Standardmäßig weist das Amazon VPC CNI allen IP-enabled angeschlossenen ENIs IP-Adressen zu, wodurch eine große Anzahl von IP-Adressen aus Ihrem Subnetz abgerufen werden kann, auch wenn diese Adressen nicht aktiv von Pods verwendet werden. Bei Instances mit Dutzenden von Netzwerkschnittstellen kann dies den verfügbaren IP-Speicherplatz Ihres Subnetzes schnell erschöpfen.

Um den Verbrauch von IP-Adressen auf EFA-enabled Knoten zu reduzieren, konfigurieren Sie Ihre Netzwerkschnittstellen so, dass sie efa-only für alle Schnittstellen außer der primären verwendet werden. EFA-only Schnittstellen sind für den RDMA-Verkehr vorgesehen und ihnen sind keine IP-Adressen zugewiesen, sodass sie keine Adressen aus Ihrem Subnetz verwenden. Beispiele für Konfigurationen finden Sie unter Karpenter und. EKS-verwaltete Knotengruppen und selbstverwaltete Knoten Das empfohlene Schnittstellenlayout für jeden Instance-Typ finden Sie unter Maximieren der Netzwerkbandbreite für EFA-enabled Instance-Typen im Amazon EC2-Benutzerhandbuch.

Zusätzlich zur Verwendung von efa-only Schnittstellen können Sie Amazon VPC CNI so konfigurieren, dass die Anzahl der warmen (vorab zugewiesenen) IP-Adressen und ENIs begrenzt wird. Standardmäßig weist das VPC-CNI vorab einen warmen Pool von ENIs und IP-Adressen zu, um den Pod-Start zu beschleunigen. Bei großen Instances können dadurch jedoch Hunderte von ungenutzten IP-Adressen reserviert werden. Legen Sie die Umgebungsvariablen WARM_IP_TARGET und die WARM_ENI_TARGET Umgebungsvariablen auf dem fest aws-node DaemonSet , um zu steuern, wie viele Ersatz-IP-Adressen und ENIs das CNI verwaltet. Weitere Informationen zu diesen Einstellungen finden Sie unter Best Practices für Amazon VPC CNI.

Anmerkung

Die WARM_IP_TARGET Einstellungen WARM_ENI_TARGET und gelten für den gesamten Cluster und gelten für alle Knoten, die vom VPC CNI verwaltet werden. Derzeit gibt es keine Möglichkeit, für jede Knotengruppe oder jeden Instanztyp unterschiedliche Werte festzulegen. Wenn Sie eine detailliertere Kontrolle über diese Einstellungen benötigen, geben Sie uns Feedback zum Thema Container-Roadmap #1834 unter. GitHub

Installieren Sie den EFA-DRA-Treiber (DRANET)

Der EFA-DRA-Treiber ist im https://github.com/kubernetes-sigs/dranet Upstream-DRANET-Projekt integriert GitHub, das eine Cloud-fähige Netzwerkgeräteverwaltung für Kubernetes-DRA ermöglicht. Der EFA-DRA-Treiber und DRANET werden in dieser Dokumentation synonym verwendet und beziehen sich auf dasselbe Tool.

Der EFA-DRA-Treiber kündigt EFA-Geräte als ResourceSlice Objekte mit dem Treibernamen und dem Namen an. dra.net DeviceClass efa.networking.k8s.aws Der EFA-DRA-Treiber läuft DaemonSet auf jedem Knoten als und erkennt automatisch EFA-Geräte.

Voraussetzungen

Verfahren

Wichtig

Installieren Sie den EFA-DRA-Treiber nicht auf Knoten, auf denen das EFA-Geräte-Plug-In ausgeführt wird. Die beiden Mechanismen können nicht auf demselben Knoten koexistieren. Dies kann zu einer unbemerkten Überbelegung der zugrunde liegenden Geräte für mehrere Pods auf demselben Knoten führen.

  1. Fügen Sie das EKS Helm-Diagramm-Repository hinzu.

    helm repo add eks https://aws.github.io/eks-charts
  2. Aktualisieren Sie Ihr lokales Helm-Repository.

    helm repo update
  3. Installieren Sie den EFA-DRA-Treiber mit Helm auf Ihrem Cluster. Der EFA-DRA-Treiber erkennt über den Instance Metadata Service (IMDS) automatisch, dass er auf EC2-Instances läuft, und ermöglicht die EFA-Geräteerkennung. Der EFA-DRA-Treiber wird standardmäßig als DaemonSet im Namespace bereitgestellt. kube-system Die konfigurierbaren Parameter finden Sie unter Helm values.yaml im EKS-Helm-Chart-Repository auf GitHub .

    helm install aws-dranet eks/aws-dranet --namespace kube-system
  4. Stellen Sie sicher, dass das DRANET läuft 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
  5. Stellen Sie sicher, dass das erstellt DeviceClass wurde.

    kubectl get deviceclass
    NAME AGE efa.networking.k8s.aws 60s
  6. Stellen Sie sicher, dass ResourceSlice Objekte für Ihre Knoten angekündigt werden.

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

    Wenn bei den obigen Schritten Fehler auftreten, können Sie die Protokolle für DRANET mit dem folgenden Befehl überprüfen.

    kubectl logs -n kube-system -l app=aws-dranet
  7. Um EFA-Geräte mithilfe des DRA-Treibers anzufordern, erstellen Sie ein ResourceClaim oder, ResourceClaimTemplate das auf die EFA verweist, DeviceClass und verweisen Sie in Ihrer Pod-Spezifikation darauf. Im folgenden Beispiel wird ein einzelnes EFA-Gerät angefordert.

    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

Topology-aware EFA und Gerätezuweisung GPU/Neuron

Der EFA-DRA-Treiber unterstützt die topologiebewusste Zuweisung, bei der EFA-Schnittstellen mit GPUs oder Neuron-Geräten auf demselben PCIe-Root gekoppelt werden. Verwenden Sie die matchAttribute Einschränkung, um die Zuweisungen von EFA- und GPU- oder Neuron-Geräten aufeinander abzustimmen. Um diese Funktion nutzen zu können, müssen Sie auch die NVIDIA- oder Neuron-DRA-Treiber verwenden. Weitere Informationen erhalten Sie unter NVIDIA-GPUs auf Amazon EKS verwalten und Neuron-Geräte auf Amazon EKS verwalten.

Im folgenden Beispiel wird eine EFA-Schnittstelle angefordert, die einer NVIDIA-GPU zugeordnet ist:

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"

Das folgende Beispiel fordert 4 EFA-Schnittstellen an, die auf 4 Neuron-Geräte abgestimmt sind:

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"

Die Zahl im devicegroup Attributnamen entspricht der Anzahl der Neuron-Geräte in der verbundenen Topologiegruppe. resource.aws.com/devicegroup1_idIdentifiziert beispielsweise ein einzelnes Neuron-Gerät, resource.aws.com/devicegroup4_id identifiziert eine Gruppe von 4 verbundenen Geräten resource.aws.com/devicegroup8_id und resource.aws.com/devicegroup16_id identifiziert Gruppen von 8 bzw. 16 verbundenen Geräten. Wählen Sie matchAttribute das, das dem Gerät count in Ihrer Anfrage entspricht, sodass die zugewiesenen Neuron-Geräte und EFA-Schnittstellen derselben verbundenen Topologiegruppe angehören. Weitere Informationen zu diesen Attributen finden Sie in der Neuron-DRA-Treiberdokumentation.

Sie können allocationMode es verwenden, um zu vereinfachen, wie EFA-Geräte ausgerichteten GPU- oder Neuron-Beschleunigern zugewiesen werden. Das allocationMode Feld unterstützt zwei Werte: ExactCount (Standardeinstellung) fordert eine bestimmte Anzahl von Geräten an, die von angegeben wirdcount, und All fordert alle passenden Geräte in einem Pool an. Auf p5.48xlarge Instances gibt es beispielsweise vier EFA-Geräte, die denselben PCIe-Root mit einer GPU teilen. Um diesen Gruppen von EFA-Geräten abgestimmte GPUs zuzuweisen, können Sie Ihre ResourceClaimTemplate Konfiguration für die EFA-Geräte konfigurieren, auch wenn Sie die genaue EFA-GPU Gerätezuordnung und die Anzahl der abgeglichenen EFA-Geräte nicht kennen. allocationMode: All

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"

Teilen Sie EFA-Geräte mit mehreren Pods

Der EFA-DRA-Treiber unterstützt die gemeinsame Nutzung von EFA-Geräten zwischen mehreren Pods mithilfe eines. ResourceClaim Im Gegensatz zu aResourceClaimTemplate, das für jeden Pod einen eigenen Anspruch generiert, ResourceClaim ist a ein benanntes Objekt, das Sie unabhängig erstellen und von mehreren Pods aus referenzieren. Alle Pods, die auf denselben Pods verweisen, haben ResourceClaim gemeinsam Zugriff auf dieselben zugewiesenen EFA-Geräte und sind für denselben Knoten geplant, auf dem diese Geräte verfügbar sind.

Um EFA-Geräte von mehreren Pods gemeinsam zu nutzen, erstellen Sie einenResourceClaim, der die EFA-Geräte anfordert, und verweisen Sie dann namentlich in den Feldern der einzelnen Pods resourceClaims auf diesen Anspruch. resourceClaimName Das ResourceClaim muss im Cluster existieren, bevor die Pods, die es referenzieren, erstellt werden. ResourceClaimExistiert kein Objekt, auf das verwiesen wird, verbleiben die Pods im Status „Ausstehend“, bis der Anspruch geltend gemacht wird.

Das folgende Beispiel erstellt einenResourceClaim, der 4 EFA-Geräte anfordert, und zwei Pods, die den Zugriff auf diese Geräte gemeinsam nutzen.

  1. Erstellen Sie den 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
  2. Verweisen Sie ResourceClaim in jedem Pod, der Zugriff auf die EFA-Geräte benötigt, namentlich auf diese. Jeder Pod verwendetresourceClaimName, um auf den vorhandenen Anspruch zu verweisen, anstatt aufresourceClaimTemplateName.

    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

Beide Pods verweisen auf dasselbe shared-efa ResourceClaim und sind für den Knoten vorgesehen, dem diese EFA-Geräte zugewiesen sind. Der ResourceClaim Lebenszyklus ist unabhängig von den Pods — er bleibt bestehen, bis Sie ihn löschen, auch wenn alle Pods, die auf ihn verweisen, entfernt werden.

Installieren Sie das EFA Kubernetes-Geräte-Plugin

Das EFA Kubernetes-Geräte-Plugin bewirbt EFA-Geräte als erweiterte Ressourcen. vpc.amazonaws.com/efa Sie fordern EFA-Geräte in Container-Ressourcenanforderungen und -limits an. Eine vollständige Anleitung zur Einrichtung von EFA mit Trainings-Workloads finden Sie unter. Ausführung von Machine-Learning-Trainings in Amazon EKS mit Elastic Fabric Adapter

Wichtig

Topology-aligned Die Zuweisung von NVIDIA-GPUs oder Neuron-Geräten mit EFA-Schnittstellen erfolgt automatisch, wenn die AL2023-beschleunigten AMIs verwendet werden. EKS-optimized Diese automatische Ausrichtung erfolgt nicht, wenn Bottlerocket-AMIs oder benutzerdefinierte AMIs EKS-optimized verwendet werden. Wenn Sie einen an der Topologie ausgerichteten Beschleuniger und die EFA-Gerätezuweisung mit Bottlerocket oder benutzerdefinierten AMIs benötigen, verwenden Sie den EFA-DRA-Treiber und den entsprechenden Neuron-DRA-Treiber. Um den NVIDIA DRA-Treiber auf Bottlerocket verwenden zu können, müssen Sie zuerst das NVIDIA-Geräte-Plugin deaktivieren, das im Paket mit den Bottlerocket-NVIDIA-Varianten enthalten ist. Dafür ist Bottlerocket Version 1.63.0 oder höher erforderlich. Weitere Informationen erhalten Sie unter Topology-aware EFA und Gerätezuweisung GPU/Neuron und Installieren Sie den NVIDIA DRA-Treiber.

Wichtig

Ab NVIDIA k8s-device-plugin v0.19.0 ist das --mofed-enabled Flag standardmäßig auf gesetzt, wodurch das NVIDIA-Geräte-Plugin alle Geräte in Container einhängttrue, die GPUs anfordern. /dev/infiniband/uverbs* Dies steht in Konflikt mit dem EFA-Geräte-Plugin, das die Komponente sein sollte, die die EFA-Gerätezuweisung unter verwaltet. /dev/infiniband Wenn Sie EKS-verwaltete Knotengruppen oder selbstverwaltete Knoten mit dem NVIDIA-Geräte-Plugin verwenden, müssen Sie MOFED explizit deaktivieren. Detaillierte Anweisungen finden Sie unter Installieren Sie das NVIDIA Kubernetes-Geräte-Plugin.

Der EKS-Automatikmodus aktiviert MOFED standardmäßig nicht und ist von diesem Problem nicht betroffen.

Voraussetzungen

Verfahren

  1. Fügen Sie das EKS Helm-Diagramm-Repository hinzu.

    helm repo add eks https://aws.github.io/eks-charts
  2. Aktualisieren Sie Ihr lokales Helm-Repository.

    helm repo update
  3. Installieren Sie das EFA-Geräte-Plugin.

    helm install efa eks/aws-efa-k8s-device-plugin -n kube-system
  4. Stellen Sie sicher, dass das EFA-Geräte-Plugin DaemonSet läuft.

    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
  5. Stellen Sie sicher, dass Ihre Knoten über zuweisbare EFA-Ressourcen verfügen.

    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
  6. Um EFA-Geräte mithilfe des Geräte-Plug-ins anzufordern, geben Sie die vpc.amazonaws.com/efa Ressource in Ihren Container-Ressourcenanforderungen und -limits an.

    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: ...