Führen Sie Schulungen zum maschinellen Lernen auf Amazon EKS durch mit Elastic Fabric Adapter - Amazon EKS

Hilf mit, diese Seite zu verbessern

Möchten Sie zu diesem Benutzerhandbuch beitragen? Scrollen Sie zum Ende dieser Seite und wählen Sie Diese Seite bearbeiten am aus GitHub. Ihre Beiträge werden dazu beitragen, unser Benutzerhandbuch für alle zu verbessern.

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.

Führen Sie Schulungen zum maschinellen Lernen auf Amazon EKS durch mit Elastic Fabric Adapter

In diesem Thema wird beschrieben, wie der Elastic Fabric Adapter (EFA) mit integriert wird Pods in Ihrem EKS Amazon-Cluster bereitgestellt. Elastic Fabric Adapter (EFA) ist eine Netzwerkschnittstelle für EC2 Amazon-Instances, mit der Sie Anwendungen ausführen können, die ein hohes Maß an Kommunikation zwischen Knoten erfordern, in großem Umfang. AWS Die speziell für die Umgehung von Betriebssystemen entwickelte Hardware-Schnittstelle verbessert die Leistung der Instance-übergreifenden Kommunikation, was für die Skalierung dieser Anwendungen von entscheidender Bedeutung ist. Mit High Performance Computing (HPC) -AnwendungenEFA, die das Message Passing Interface (MPI) verwenden, und Machine Learning (ML) -Anwendungen, die NVIDIA Collective Communications Library (NCCL) verwenden, können auf Tausende von CPUs oder skaliert GPUs werden. Dadurch erhalten Sie die Anwendungsleistung von lokalen HPC Clustern mit der On-Demand-Elastizität und Flexibilität der AWS Cloud. Durch die Integration EFA mit Anwendungen, die auf EKS Amazon-Clustern ausgeführt werden, kann die Zeit für die Durchführung umfangreicher verteilter Trainingsworkloads reduziert werden, ohne dass zusätzliche Instances zu Ihrem Cluster hinzugefügt werden müssen. Weitere Informationen EFA finden Sie unter Elastic Fabric Adapter.

Instanztypen mit EFA

Das AWS EFAKubernetes Device Plugin unterstützt alle EC2 Amazon-Instanztypen, die dies haben. EFA Eine Liste aller Instance-Typen, die dies getan habenEFA, finden Sie unter Unterstützte Instance-Typen im EC2Amazon-Benutzerhandbuch. Um ML-Anwendungen schnell ausführen zu können, empfehlen wir jedoch, dass eine Instance über Hardwarebeschleunigungs-Chips wie nVidia GPUs, AWS InferentiaChips oder AWS TrainiumChips, zusätzlich zu denEFA. Eine Liste der Instance-Typen mit Hardwarebeschleunigungschips finden Sie unter Accelerated Computing im EC2Amazon-Benutzerhandbuch. EFA

Wenn Sie Instance-Typen vergleichen, um zwischen ihnen zu wählen, sollten Sie die Anzahl der für diesen Instance-Typ verfügbaren EFA Netzwerkkarten sowie die Anzahl der Accelerator-Karten, die Menge CPU und die Menge an Speicher berücksichtigen. Sie können jeder Netzwerkkarte bis EFA zu eine zuweisen. Und EFA zählt als Netzwerkschnittstelle.. Wie viele für jeden Instance-Typ verfügbar EFA sindEFA, finden Sie in der Liste der Netzwerkkarten im EC2Amazon-Benutzerhandbuch.

Voraussetzungen

  • Ein vorhandener EKS Amazon-Cluster. Wenn Sie nicht über einen Cluster verfügen, verwenden Sie eines unsererErste Schritte mit Amazon EKS-Hilfslinien erstellen Sie eines. Ihr Cluster muss in einem Cluster bereitgestellt werdenVPC, der über mindestens ein privates Subnetz mit ausreichend verfügbaren IP-Adressen für die Bereitstellung von Knoten verfügt. Das private Subnetz muss über einen ausgehenden Internetzugang verfügen, der über ein externes Gerät, z. B. ein Gateway, bereitgestellt wird. NAT

    Wenn Sie planen, eksctl zu verwenden, um Ihre Knotengruppe zu erstellen, kann eksctl auch einen Cluster für Sie erstellen.

  • Version 2.12.3 oder höher oder Version 1.27.160 oder höher von AWS Command Line Interface (AWS CLI), die auf Ihrem Gerät installiert und konfiguriert ist, oder. AWS CloudShell Um Ihre aktuelle Version zu überprüfen, verwenden Sie aws --version | cut -d / -f2 | cut -d ' ' -f1. Paketmanager wieyum,apt-get, oder Homebrew for macOS liegen oft mehrere Versionen hinter der neuesten Version von AWS CLI. Informationen zur Installation der neuesten Version finden Sie unter Installation, Aktualisierung und Deinstallation von AWS CLI und Schnellkonfiguration mit aws configure im AWS Command Line Interface -Benutzerhandbuch. Die AWS CLI Version, in der installiert ist, AWS CloudShell kann auch mehrere Versionen hinter der neuesten Version liegen. Informationen zur Aktualisierung finden Sie unter Installation AWS CLI in Ihrem Home-Verzeichnis im AWS CloudShell Benutzerhandbuch.

  • Das kubectl-Befehlszeilen-Tool ist auf Ihrem Gerät oder in der AWS CloudShell installiert. Bei der Version kann es sich um dieselbe oder nur um eine Nebenversion handeln, die früher oder später als die Kubernetes Version Ihres Clusters. Wenn Ihre Clusterversion beispielsweise 1.30 ist, können Sie kubectl-Version 1.29, 1.30, oder 1.31 damit verwenden. Informationen zum Installieren oder Aktualisieren von kubectl finden Sie unter Einrichten kubectl und eksctl.

  • Sie müssen die haben Amazon VPC CNI plugin for Kubernetes Version 1.7.10 oder höher installiert, bevor Worker-Knoten gestartet werden, die mehrere Elastic Fabric-Adapter unterstützen, wie z. B. p4d oderp5. Weitere Informationen zur Aktualisierung Ihres Amazon VPC CNI plugin for Kubernetes Version, sieheZuweisen IPs zu Pods mit dem Amazon VPC CNI.

Wichtig

Eine wichtige Überlegung, die für die Adoption EFA mit erforderlich ist Kubernetes konfiguriert und verwaltet Huge Pages als Ressource im Cluster. Weitere Informationen finden Sie unter Manage Huge Pages im Kubernetes -Dokumentation. EC2Amazon-Instances, auf denen der EFA Treiber installiert ist, weisen 5128 Huge Pages mit 2 MiB vorab zu, die Sie als Ressourcen anfordern können, die Sie in Ihren Jobspezifikationen nutzen können.

Knotengruppen erstellen

Das folgende Verfahren hilft Ihnen, eine Knotengruppe mit einer p4d.24xlarge unterstützten Knotengruppe mit EFA Schnittstellen zu erstellen und GPUDirect RDMA einen Beispieltest der Collective Communications Library () für die Leistung mehrerer Knoten mithilfe von NVIDIA Collective Communications Library (NCCL) auszuführen. NCCL EFAs Das Beispiel kann als Vorlage für verteiltes Deep-Learning-Training auf Amazon EKS verwendet EFAs werden.

  1. Ermitteln Sie, welche EC2 Amazon-Instance-Typen, die unterstützt EFA werden, in AWS-Region denen Sie Knoten bereitstellen möchten, verfügbar sind. region-codeErsetzen Sie durch AWS-Region die, in der Sie Ihre Knotengruppe bereitstellen möchten.

    aws ec2 describe-instance-types --region region-code \ --filters Name=network-info.efa-supported,Values=true \ --query "InstanceTypes[*].[InstanceType]" --output text

    Wenn Sie Knoten bereitstellen, muss der Instanztyp, den Sie bereitstellen möchten, in dem sich Ihr Cluster befindet AWS-Region , verfügbar sein.

  2. Bestimmen Sie, in welchen Availability Zones der Instance-Typ bereitgestellt werden soll. In diesem Tutorial wird der p5.48xlarge Instanztyp verwendet und muss in der Ausgabe für den Instanztyp zurückgegeben werden AWS-Region , den Sie im vorherigen Schritt angegeben haben. Wenn Sie Knoten in einem Produktionscluster bereitstellen, p5.48xlarge ersetzen Sie ihn durch einen beliebigen Instanztyp, der im vorherigen Schritt zurückgegeben wurde.

    aws ec2 describe-instance-type-offerings --region region-code \ --location-type availability-zone --filters Name=instance-type,Values=p4d.24xlarge,p5.48xlarge \ --query 'InstanceTypeOfferings[*].Location' --output text

    Eine Beispielausgabe sieht wie folgt aus.

    us-west-2a us-west-2c us-west-2b

    Beachten Sie, dass Availability Zones zur Verwendung in späteren Schritten zurückgegeben wurden Wenn Sie Knoten in einem Cluster bereitstellen, VPC müssen Sie über Subnetze mit verfügbaren IP-Adressen in einer der Availability Zones verfügen, die in der Ausgabe zurückgegeben werden.

  3. Erstellen Sie eine Knotengruppe miteksctl.

    Voraussetzung

    Version 0.191.0 oder höher des eksctl-Befehlszeilen-Tools, das auf Ihrem Computer oder in der AWS CloudShell installiert ist. Informationen zum Installieren und Aktualisieren von eksctl finden Sie in der Dokumentation zu eksctl unter Installation.

    1. Kopieren Sie den folgenden Inhalt in eine Datei namens efa-cluster.yaml. Ersetzen Sie das example values durch Ihr eigenes. Sie können p5.48xlarge mit einer anderen Instance ersetzen. Wenn Sie dies tun, stellen Sie sicher, dass die Werte für availabilityZones Availability Zones sind, die in Schritt 1 für den Instance-Typ zurückgegeben wurden.

      apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-efa-cluster region: region-code version: "1.XX" iam: withOIDC: true availabilityZones: ["us-west-2a", "us-west-2c"] managedNodeGroups: - name: my-efa-ng instanceType: p5.48xlarge minSize: 1 desiredCapacity: 2 maxSize: 3 availabilityZones: ["us-west-2a"] volumeSize: 300 privateNetworking: true efaEnabled: true
    2. Erstellen einer verwalteten Knotengruppe in einem bestehenden Cluster

      eksctl create nodegroup -f efa-cluster.yaml

      Wenn Sie über keinen bestehenden Cluster verfügen, können Sie den folgenden Befehl ausführen, um einen Cluster und die Knotengruppe zu erstellen.

      eksctl create cluster -f efa-cluster.yaml
      Anmerkung

      Da der in diesem Beispiel verwendete Instanztyp das NVIDIA Kubernetes-Geräte-Plugin eksctl automatisch für Sie auf jeder Instanz installiert hatGPUs.

  4. Stellen Sie das EFA Kubernetes-Geräte-Plugin bereit.

    Das EFA Kubernetes-Geräte-Plugin erkennt EFA Schnittstellen und bewirbt sie als zuweisbare Ressourcen für Kubernetes. Eine Anwendung kann den erweiterten Ressourcentyp in einem verwenden vpc.amazonaws.com/efa Pod fordern Sie die Spezifikation genau wie den Speicher CPU an. Weitere Informationen finden Sie unter Nutzung erweiterter Ressourcen in der Kubernetes -Dokumentation. Nach der Anfrage weist das Plugin automatisch eine EFA Schnittstelle zu und hängt sie an Pod. Die Verwendung des Geräte-Plugins vereinfacht die EFA Einrichtung und erfordert keine Pod um im privilegierten Modus zu laufen.

    helm repo add eks https://aws.github.io/eks-charts helm install aws-efa-k8s-device-plugin --namespace kube-system eks/aws-efa-k8s-device-plugin

(Optional) Testen Sie die Leistung des EFA

Wir empfehlen Ihnen, das EFA Setup zu testen. Sie können die NCCLTests im aws-samples/awsome-distributed-training Repository am verwenden GitHub. NCCLTests bewerten die Leistung des Netzwerks mithilfe der Nvidia Collective Communication Library. Mit den folgenden Schritten NCCL werden Tests bei Amazon eingereichtEKS.

  1. Stellen Sie den Kubeflow Operator MPI bereit

    Für die NCCL Tests können Sie den MPI Kubeflow-Operator anwenden. Der MPI Operator macht es einfach, verteilte Schulungen im AllReduce-Stil auf Kubernetes durchzuführen. Weitere Informationen finden Sie unter Operator on MPI GitHub.

  2. Führen Sie den NCCL Leistungstest für mehrere Knoten aus, um dies zu überprüfen GPUDirectRDMA/EFA

    Um die NCCL Leistung zu überprüfen mit GPUDirectRDMA überEFA, führen Sie den NCCL Standard-Leistungstest durch. Weitere Informationen finden Sie im offiziellen NCCL-Test-Repo unter GitHub.

    Führen Sie die folgenden Schritte aus, um einen Zweiknotenbetrieb auszuführen NCCL Performance Test. Im Beispiel NCCL Bei einem Testjob fordert jeder Worker achtGPUs, 5210 Mi hugepages-2MiEFAs, vier und 8000 Mi Arbeitsspeicher an, was praktisch bedeutet, dass jeder Worker alle Ressourcen einer Instanz verbraucht. p5.48xlarge

    1. Erstellen Sie den MPIJob Manifest

      Kopieren Sie Folgendes in eine Datei mit dem Namennccl-tests.yaml:

      apiVersion: kubeflow.org/v2beta1 kind: MPIJob metadata: name: nccl-tests spec: runPolicy: cleanPodPolicy: Running backoffLimit: 20 slotsPerWorker: 8 mpiReplicaSpecs: Launcher: replicas: 1 template: spec: restartPolicy: OnFailure containers: - image: public.ecr.aws/hpc-cloud/nccl-tests:latest imagePullPolicy: IfNotPresent name: test-nccl-launcher env: - name: PATH value: $PATH:/opt/amazon/efa/bin:/usr/bin - name: LD_LIBRARY_PATH value: /opt/amazon/openmpi/lib:/opt/nccl/build/lib:/opt/amazon/efa/lib:/opt/aws-ofi-nccl/install/lib:/usr/local/nvidia/lib:$LD_LIBRARY_PATH - name: NCCL_DEBUG value: INFO - name: NCCL_BUFFSIZE value: '8388608' - name: NCCL_P2P_NET_CHUNKSIZE value: '524288' - name: NCCL_TUNER_PLUGIN value: /opt/aws-ofi-nccl/install/lib/libnccl-ofi-tuner.so command: - /opt/amazon/openmpi/bin/mpirun - --allow-run-as-root - --tag-output - -np - "16" - -N - "8" - --bind-to - none - -x - PATH - -x - LD_LIBRARY_PATH - -x - NCCL_DEBUG=INFO - -x - NCCL_BUFFSIZE - -x - NCCL_P2P_NET_CHUNKSIZE - -x - NCCL_TUNER_PLUGIN - --mca - pml - ^cm,ucx - --mca - btl - tcp,self - --mca - btl_tcp_if_exclude - lo,docker0,veth_def_agent - /opt/nccl-tests/build/all_reduce_perf - -b - "8" - -e - "16G" - -f - "2" - -g - "1" - -c - "1" - -n - "100" Worker: replicas: 2 template: spec: nodeSelector: node.kubernetes.io/instance-type: "p5.48xlarge" containers: - image: public.ecr.aws/hpc-cloud/nccl-tests:latest imagePullPolicy: IfNotPresent name: nccl-tests-worker volumeMounts: - name: shmem mountPath: /dev/shm resources: limits: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi vpc.amazonaws.com/efa: 32 memory: 32000Mi requests: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi vpc.amazonaws.com/efa: 32 memory: 32000Mi volumes: - name: shmem hostPath: path: /dev/shm
    2. Wenden Sie das an NCCL-tests MPIJob

      Reichen Sie das ein, MPIJob indem Sie das Manifest anwenden. Dadurch werden zwei p5.48xlarge EC2 Amazon-Instances erstellt.

      kubectl apply -f nccl-tests.yaml

      Eine Beispielausgabe sieht wie folgt aus.

      mpijob.kubeflow.org/nccl-tests created
    3. Stellen Sie sicher, dass der Job Pods gestartet hat

      Sieh dir deinen Lauf an Pods.

      kubectl get pods

      Eine Beispielausgabe sieht wie folgt aus.

      NAME READY STATUS RESTARTS AGE nccl-tests-launcher-nbql9 0/1 Init:0/1 0 2m49s nccl-tests-worker-0 1/1 Running 0 2m49s nccl-tests-worker-1 1/1 Running 0 2m49s

      Der MPI Operator erstellt einen Launcher Pod und 2 Arbeiter Pods (einer auf jedem Knoten).

    4. Stellen Sie anhand der Protokolle sicher, dass der Job erfolgreich ausgeführt wird

      Sehen Sie sich das Protokoll für den an nccl-tests-launcher Pod. Ersetze es nbql9 durch den Wert aus deiner Ausgabe.

      kubectl logs -f nccl-tests-launcher-nbql9

Wenn der Test erfolgreich abgeschlossen wurde, können Sie Ihre Anwendungen bereitstellen, die Nvidia Collective Communication Library.