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 Inferentia
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, kanneksctl
auch einen Cluster für Sie erstellen. -
Version
2.12.3
oder höher oder Version1.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
. Paketmanager wieaws --version | cut -d / -f2 | cut -d ' ' -f1
yum
,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 beispielsweise1.30
ist, können Siekubectl
-Version1.29
,1.30
, oder1.31
damit verwenden. Informationen zum Installieren oder Aktualisieren vonkubectl
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
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.
-
Ermitteln Sie, welche EC2 Amazon-Instance-Typen, die unterstützt EFA werden, in AWS-Region denen Sie Knoten bereitstellen möchten, verfügbar sind.
Ersetzen Sie durch AWS-Region die, in der Sie Ihre Knotengruppe bereitstellen möchten.region-code
aws ec2 describe-instance-types --region
region-code
\ --filters Name=network-info.efa-supported,Values=true \ --query "InstanceTypes[*].[InstanceType]" --output textWenn Sie Knoten bereitstellen, muss der Instanztyp, den Sie bereitstellen möchten, in dem sich Ihr Cluster befindet AWS-Region , verfügbar sein.
-
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,
ersetzen Sie ihn durch einen beliebigen Instanztyp, der im vorherigen Schritt zurückgegeben wurde.p5.48xlarge
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 textEine 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.
-
Erstellen Sie eine Knotengruppe mit
eksctl
.Voraussetzung
Version
0.191.0
oder höher deseksctl
-Befehlszeilen-Tools, das auf Ihrem Computer oder in der AWS CloudShell installiert ist. Informationen zum Installieren und Aktualisieren voneksctl
finden Sie in der Dokumentation zueksctl
unter Installation. -
Kopieren Sie den folgenden Inhalt in eine Datei namens
. Ersetzen Sie dasefa-cluster.yaml
durch Ihr eigenes. Sie könnenexample values
mit einer anderen Instance ersetzen. Wenn Sie dies tun, stellen Sie sicher, dass die Werte fürp5.48xlarge
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 -
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.
-
-
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 Ressourcenin 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 NCCLTestsaws-samples/awsome-distributed-training
Repository am verwenden GitHub. NCCLTests
-
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. -
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-2Mi
EFAs, vier und 8000 Mi Arbeitsspeicher an, was praktisch bedeutet, dass jeder Worker alle Ressourcen einer Instanz verbraucht.p5.48xlarge
-
Erstellen Sie den MPIJob Manifest
Kopieren Sie Folgendes in eine Datei mit dem Namen
nccl-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
-
Wenden Sie das an NCCL-tests MPIJob
Reichen Sie das ein,
MPIJob
indem Sie das Manifest anwenden. Dadurch werden zweip5.48xlarge
EC2 Amazon-Instances erstellt.kubectl apply -f nccl-tests.yaml
Eine Beispielausgabe sieht wie folgt aus.
mpijob.kubeflow.org/nccl-tests created
-
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 2m49sDer MPI Operator erstellt einen Launcher Pod und 2 Arbeiter Pods (einer auf jedem Knoten).
-
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
durch den Wert aus deiner Ausgabe.nbql9
kubectl logs -f nccl-tests-launcher-
nbql9
-
Wenn der Test erfolgreich abgeschlossen wurde, können Sie Ihre Anwendungen bereitstellen, die Nvidia Collective Communication Library.