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.
Die NVIDIA Collective Communications Library (NCCL) ist eine Bibliothek mit standardmäßigen kollektiven Kommunikationsroutinen für mehrere Benutzer GPUs über einen einzelnen Knoten oder mehrere Knoten. Die NCCL kann zusammen mit EFA, libfabric und MPI verwendet werden, um verschiedene Machine-Learning-Workloads zu unterstützen. Weitere Informationen finden Sie auf der NCCL
Die folgenden Schritte unterstützen Sie bei den ersten Schritten mit EFA und NCCL mithilfe eines AMIs für eines der unterstützten Basis-Betriebssysteme.
Anmerkung
-
Nur die Instance-Typen
p3dn.24xlarge
,p4d.24xlarge
undp5.48xlarge
werden unterstützt. -
Nur Amazon Linux 2 und Ubuntu 20.04/22.04 Base werden unterstützt. AMIs
-
Die NCCL wird erst ab Version 2.4.2 mit EFA unterstützt.
Weitere Informationen zum Ausführen von Machine-Learning-Workloads mit EFA und NCCL unter Verwendung von finden Sie unter AWS Deep Learning AMIs Using EFA on the DLAMI im Developer Guide.AWS Deep Learning AMIs
Schritte
Schritt 1: Vorbereiten einer EFA-aktivierten Sicherheitsgruppe
Ein EFA erfordert eine Sicherheitsgruppe, die allen ein- und ausgehenden Datenverkehr von und zur Sicherheitsgruppe zulässt. Mit dem folgenden Verfahren wird eine Sicherheitsgruppe erstellt, die den gesamten eingehenden und ausgehenden Datenverkehr zu und von sich selbst zulässt und die eingehenden SSH-Verkehr von einer beliebigen Adresse für SSH-Konnektivität zulässt. IPv4
Wichtig
Diese Sicherheitsgruppe dient nur zu Testzwecken. Für Produktionsumgebungen sollten Sie eine Regel für eingehenden SSH-Datenverkehr erstellen, die Datenverkehr nur von der IP-Adresse zulässt, von der aus Sie eine Verbindung herstellen, z. B. die IP-Adresse Ihres Computers oder einen Bereich von IP-Adressen im lokalen Netzwerk.
Weitere Szenarien finden Sie unter Sicherheitsgruppenregeln für verschiedene Anwendungsfälle.
So erstellen Sie eine EFA-fähige Sicherheitsgruppe:
Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/
. -
Wählen Sie im Navigationsbereich Security Groups (Sicherheitsgruppen) und anschließend Create Security Group (Sicherheitsgruppe erstellen) aus.
-
Führen Sie im Fenster Create Security Group Folgendes aus:
-
Geben Sie für Security group name (Name der Sicherheitsgruppe) einen beschreibenden Namen für die Sicherheitsgruppe ein, wie etwa
EFA-enabled security group
. -
(Optional:) Geben Sie unter Description (Beschreibung) eine kurze Beschreibung der Sicherheitsgruppe ein.
-
Wählen Sie bei VPC die VPC aus, in der Sie Ihre EFA-fähigen Instances starten möchten.
-
Wählen Sie Sicherheitsgruppe erstellen aus.
-
-
Wählen Sie die von Ihnen erstellte Sicherheitsgruppe aus und kopieren Sie dann auf der Registerkarte Details die Security group ID (Sicherheitsgruppen-ID).
-
Bei noch ausgewählter Sicherheitsgruppe wählen Sie Actions (Aktionen), Edit inbound rules (Eingangsregeln bearbeiten) aus und gehen dann folgendermaßen vor:
-
Wählen Sie Regel hinzufügen aus.
-
Wählen Sie für Type (Typ) die Option All traffic (Gesamter Datenverkehr) aus.
-
Wählen Sie bei Source type (Quellentyp) Custom (Benutzerdefiniert) aus und fügen Sie die Sicherheitsgruppen-ID, die Sie kopiert hatten, ins Feld ein.
-
Wählen Sie Regel hinzufügen aus.
-
Wählen Sie unter Typ die Option SSH aus.
-
Wählen Sie als Quelltyp die Option Anywhere- IPv4.
-
Wählen Sie Save rules (Regeln speichern) aus.
-
-
Bei noch ausgewählter Sicherheitsgruppe wählen Sie Actions (Aktionen), Edit outbound rules (Ausgangsregeln bearbeiten) aus und gehen dann folgendermaßen vor:
-
Wählen Sie Regel hinzufügen aus.
-
Wählen Sie für Type (Typ) die Option All traffic (Gesamter Datenverkehr) aus.
-
Wählen Sie bei Destination type (Zieltyp) Custom (Benutzerdefiniert) aus und fügen Sie die Sicherheitsgruppen-ID, die Sie kopiert hatten, ins Feld ein.
-
Wählen Sie Save rules (Regeln speichern) aus.
-
Schritt 2: Starten einer temporären Instance
Starten Sie eine temporäre Instance, die Sie verwenden können, um die EFA-Softwarekomponenten zu installieren und zu konfigurieren. Sie können mit dieser Instance ein EFA-aktiviertes AMI erstellen, von dem Sie Ihre EFA-aktivierten Instances starten können.
So starten Sie eine temporäre Instance
Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/
. -
Wählen Sie im Navigationsbereich Instances und dann Instances starten aus, um den Launch Instance Wizard zu öffnen.
-
(Optional) Geben Sie im Bereich Name and tags (Name und Tags) einen Namen für die Instance an, z. B.
EFA-instance
. Der Name wird der Instance als Ressourcen-Tag (Name=
) zugewiesen.EFA-instance
-
Wählen Sie im Bereich Application and OS Images (Anwendungs- und Betriebssystem-Images) ein AMI für eines der unterstützten Betriebssysteme aus. Es werden nur Amazon Linux 2, Ubuntu 20.04, und Ubuntu 22.04 unterstützt.
-
Wählen Sie im Bereich Instance-Typ entweder
p3dn.24xlarge
,p4d.24xlarge
oderp5.48xlarge
aus. -
Wählen Sie im Bereich Key pair (Schlüsselpaar) das Schlüsselpaar aus, das für die Instance verwendet werden soll.
-
Wählen Sie im Bereich Network settings (Netzwerkeinstellungen) Edit (Bearbeiten) aus und führen Sie dann Folgendes aus:
-
Wählen Sie unter Subnetz das Subnetz aus, in dem die Instance gestartet werden soll. Wenn Sie kein Subnetz auswählen, können Sie die Instance nicht für EFA aktivieren.
-
Wählen Sie bei Firewall (security groups) Firewall (Sicherheitsgruppen) Select existing security group (Vorhandene Sicherheitsgruppe auswählen) und dann die Sicherheitsgruppe aus, die Sie im vorherigen Schritt erstellt haben.
-
Erweitern Sie den Abschnitt Erweiterte Netzwerkkonfiguration.
Wählen Sie für Netzwerkschnittstelle 1 Netzwerkkartenindex = 0, Geräteindex = 0 und Schnittstellentyp = EFA mit ENA aus.
(Optional) Wenn Sie einen Instance-Typ mit mehreren Karten verwenden, z. B.
p4d.24xlarge
oderp5.48xlarge
, wählen Sie für jede weitere erforderliche Netzwerkschnittstelle die Option Netzwerkschnittstelle hinzufügen, wählen Sie für Netzwerkkartenindex den nächsten ungenutzten Index aus und wählen Sie dann Geräteindex = 1 und Schnittstellentyp = EFA mit ENA oder Nur-EFA aus.
-
-
Konfigurieren Sie im Bereich Storage (Speicher) die Volumes nach Bedarf.
Anmerkung
Sie müssen zusätzliche 10 bis 20 GiB Speicher für das Nvidia CUDA Toolkit bereitstellen. Wenn Sie nicht genügend Speicherplatz bereitstellen, erhalten Sie einen
insufficient disk space
-Fehler beim Versuch, die Nvidia-Treiber und das CUDA-Toolkit zu installieren. -
Wählen Sie im Bereich Summary (Zusammenfassung) rechts Launch instance (Instance starten) aus.
Schritt 3: Installieren der Nvidia-GPU-Treiber, des Nvidia-CUDA-Toolkits und cuDNN
Installieren der Nvidia GPU-Treiber, des Nvidia-CUDA-Toolkits und cuDNN
-
Um sicherzustellen, dass alle Ihre Softwarepakete aktuell sind, führen Sie ein schnelles Softwareupdate auf Ihrer Instance aus.
$
sudo yum upgrade -y && sudo rebootStellen Sie nach dem Neustart der Instance erneut eine Verbindung dazu her.
-
Installieren Sie die Dienstprogramme, die zum Installieren der Nvidia GPU-Treiber und des Nvidia CUDA-Toolkits benötigt werden.
$
sudo yum groupinstall 'Development Tools' -y -
Deaktivieren Sie die
nouveau
-Open-Source-Treiber.-
Installieren Sie die erforderlichen Dienstprogramme und das Kernel-Header-Paket für Ihre derzeit ausgeführte Kernel-Version.
$
sudo yum install -y wget kernel-devel-$(uname -r) kernel-headers-$(uname -r) -
Fügen Sie
nouveau
der Verweigerungsliste/etc/modprobe.d/blacklist.conf
hinzu.$
cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf blacklist vga16fb blacklist nouveau blacklist rivafb blacklist nvidiafb blacklist rivatv EOF -
Hängen Sie
GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
an diegrub
-Datei an und erstellen Sie die Grub-Konfiguration neu.$
echo 'GRUB_CMDLINE_LINUX="rdblacklist=nouveau"' | sudo tee -a /etc/default/grub \ && sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
-
Starten Sie die Instance neu und stellen Sie die Verbindung zur Instance wieder her.
-
Vorbereiten der erforderlichen Repositorys
-
Aktivieren Sie das EPEL-Repository und stellen Sie die Verteilung auf ein
rhel7
.$
sudo amazon-linux-extras install epel \ && distribution='rhel7' -
Richten Sie das CUDA Netzwerk-Repository ein und aktualisieren Sie den Repository-Cache.
$
ARCH=$( /bin/arch ) \ && sudo yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/$distribution/${ARCH}/cuda-$distribution.repo \ && sudo yum clean expire-cache -
(Nur Kernel-Version 5.10) Führen Sie diese Schritte nur aus, wenn Sie Amazon Linux 2 mit Kernel-Version 5.10 nutzen. Überspringen Sie dieses Schritte, wenn Sie Amazon Linux 2 mit Kernel-Version 4.12 verwenden. Um Ihre Kernel-Version zu überprüfen, führen Sie uname -r aus.
-
Erstellen Sie die Nvidia-Treiberkonfigurationsdatei mit dem Namen
/etc/dkms/nvidia.conf
.$
sudo mkdir -p /etc/dkms \ && echo "MAKE[0]=\"'make' -j2 module SYSSRC=\${kernel_source_dir} IGNORE_XEN_PRESENCE=1 IGNORE_PREEMPT_RT_PRESENCE=1 IGNORE_CC_MISMATCH=1 CC=/usr/bin/gcc10-gcc\"" | sudo tee /etc/dkms/nvidia.conf -
(Nur
p4d.24xlarge
undp5.48xlarge
) Kopieren Sie die Konfigurationsdatei des Nvidia-Treibers.$
sudo cp /etc/dkms/nvidia.conf /etc/dkms/nvidia-open.conf
-
-
-
Installieren Sie die Nvidia-GPU-Treiber, das NVIDIA CUDA-Toolkit und cuDNN.
$
sudo yum clean all \ && sudo yum -y install nvidia-driver-latest-dkms \ && sudo yum -y install cuda-drivers-fabricmanager cuda libcudnn8-devel -
Starten Sie die Instance neu und stellen Sie die Verbindung zur Instance wieder her.
-
(Nur
p4d.24xlarge
undp5.48xlarge
) Starten Sie den NVIDIA Fabric Manager Service und stellen Sie sicher, dass er beim Start der Instance automatisch gestartet wird. Nvidia Fabric Manager ist für das NV Switch Management erforderlich.$
sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager -
Stellen Sie sicher, dass die CUDA-Pfade bei jedem Start der Instance festgelegt werden.
-
Fügen Sie für Bash-Shells die folgenden Anweisungen zu
/home/
undusername
/.bashrc/home/
hinzu.username
/.bash_profileexport PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
Fügen Sie für tcsh-Shells die folgenden Anweisungen zu
/home/
hinzu.username
/.cshrcsetenv PATH=/usr/local/cuda/bin:$PATH setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
-
-
Führen Sie den folgenden Befehl aus, um zu bestätigen, dass die Nvidia GPU-Treiber funktionieren.
$
nvidia-smi -q | headDer Befehl sollte Informationen über die Nvidia- GPUs, Nvidia-GPU-Treiber und das Nvidia-CUDA-Toolkit zurückgeben.
Schritt 4: Installieren GDRCopy
Installieren Sie GDRCopy , um die Leistung von Libfabric zu verbessern. Weitere Informationen zu GDRCopy finden Sie im GDRCopy Repository
Um zu installieren GDRCopy
-
Installieren Sie die erforderlichen Abhängigkeiten.
$
sudo yum -y install dkms rpm-build make check check-devel subunit subunit-devel -
Laden Sie das Paket herunter und GDRCopy entpacken Sie es.
$
wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \ && tar xf v2.4.tar.gz ; cd gdrcopy-2.4/packages -
Erstellen Sie das GDRCopy RPM-Paket.
$
CUDA=/usr/local/cuda ./build-rpm-packages.sh -
Installieren Sie das GDRCopy RPM-Paket.
$
sudo rpm -Uvh gdrcopy-kmod-2.4-1dkms.noarch*.rpm \ && sudo rpm -Uvh gdrcopy-2.4-1.x86_64*.rpm \ && sudo rpm -Uvh gdrcopy-devel-2.4-1.noarch*.rpm
Schritt 5: Installieren der EFA-Software
Installieren Sie den EFA-fähigen Kernel, die EFA-Treiber, Libfabric, aws-ofi-nccl das Plugin und den Open MPI-Stack, der für die Unterstützung von EFA auf Ihrer Instance erforderlich ist.
So installieren Sie die EFA-Software
-
Stellen Sie eine Verbindung zu der Instance her, die Sie gestartet haben. Weitere Informationen finden Sie unter Herstellen einer Verbindung zu Ihrer Linux-Instance mit SSH.
-
Laden Sie die EFA-Software-Installationsdateien herunter. Die Software-Installationsdateien sind in einer komprimierten Tarball-Datei (
.tar.gz
) verpackt. Laden Sie die neueste stabile Version mit dem folgenden Befehl herunter.$
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.38.0.tar.gzSie erhalten die neueste Version auch, indem Sie anstelle der Versionsnummer im vorangegangenen Befehl
latest
eingeben. (Optional) Überprüfen Sie die Authentizität und Integrität der EFA-Tarball-Datei (
.tar.gz
).Diese Vorgehensweise wird empfohlen, um die Identität des Software-Publishers zu überprüfen und sicherzustellen, dass die Datei seit ihrer Veröffentlichung nicht verändert oder beschädigt wurde. Wenn Sie die Tarball-Datei nicht überprüfen möchten, überspringen Sie diesen Schritt.
Anmerkung
Falls Sie es vorziehen, die Tarball-Datei stattdessen mit einer Prüfsumme oder zu verifizieren, finden Sie weitere Informationen unter. MD5 SHA256 Überprüfen des EFA-Installationsprogramms mithilfe einer Prüfsumme
-
Laden Sie den öffentlichen GPG-Schlüssel herunter und importieren Sie ihn in Ihren Schlüsselbund.
$
wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.keyDer Befehl sollte einen Schlüsselwert zurückgeben. Notieren Sie sich den Schlüsselwert. Sie benötigen ihn im nächsten Schritt.
-
Überprüfen Sie den Fingerabdruck des GPG-Schlüssels. Führen Sie den folgenden Befehl aus und geben den Schlüsselwert aus dem vorherigen Schritt an.
$
gpg --fingerprintkey_value
Der Befehl sollte einen Fingerabdruck zurückgeben, der mit
4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
identisch ist. Wenn der Fingerabdruck nicht übereinstimmt, führen Sie das EFA-Installationsskript nicht aus und wenden Sie sich an den Support. -
Laden Sie die Signaturdatei herunter und überprüfen Sie die Signatur der EFA-Tarball-Datei.
$
wget https://efa-installer.amazonaws.com/aws-efa-installer-1.38.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.38.0.tar.gz.sigDas folgende Beispiel zeigt eine Ausgabe.
gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
Wenn das Ergebnis
Good signature
enthält und der Fingerabdruck mit dem Fingerabdruck übereinstimmt, der im vorherigen Schritt zurückgegeben wurde, fahren Sie mit dem nächsten Schritt fort. Wenn nicht, führen Sie das EFA-Installationsskript nicht aus und wenden Sie sich an den Support.
-
-
Extrahieren Sie die Daten aus der komprimierten
.tar.gz
-Datei und wechseln Sie in das extrahierte Verzeichnis.$
tar -xf aws-efa-installer-1.38.0.tar.gz && cd aws-efa-installer -
Führen Sie das EFA-Software-Installationsskript aus.
Anmerkung
Ab EFA 1.30.0 sind sowohl Open MPI 4 als auch Open MPI 5 standardmäßig installiert. Sofern Sie Open MPI 5 nicht benötigen, empfehlen wir, nur Open MPI 4 zu installieren. Mit dem folgenden Befehl wird nur Open MPI 4 installiert. Wenn Sie Open MPI 4 und Open MPI 5 installieren möchten, entfernen Sie
--mpi=openmpi4
.$
sudo ./efa_installer.sh -y --mpi=openmpi4Libfabric ist im Verzeichnis installiert.
/opt/amazon/efa
Das aws-ofi-nccl Plugin ist im/opt/amazon/ofi-nccl
Verzeichnis installiert. Open MPI ist im/opt/amazon/openmpi
Verzeichnis installiert. -
Wenn das EFA-Installationsprogramm Sie auffordert, die Instance neu zu starten, tun Sie dies und stellen Sie dann erneut eine Verbindung mit der Instance her. Melden Sie sich andernfalls von der Instance ab und wieder an, um die Installation abzuschließen.
-
Überprüfen Sie, ob die EFA-Softwarekomponenten erfolgreich installiert wurden.
$
fi_info -p efa -t FI_EP_RDMDer Befehl muss Informationen zu den Libfabric-EFA-Schnittstellen zurückgeben. Das folgende Beispiel zeigt die Befehlsausgabe.
-
p3dn.24xlarge
mit einer einzigen Netzwerkschnittstelleprovider: efa fabric: EFA-fe80::94:3dff:fe89:1b70 domain: efa_0-rdm version: 2.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
-
p4d.24xlarge
undp5.48xlarge
mit mehreren Netzwerkschnittstellenprovider: efa fabric: EFA-fe80::c6e:8fff:fef6:e7ff domain: efa_0-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::c34:3eff:feb2:3c35 domain: efa_1-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::c0f:7bff:fe68:a775 domain: efa_2-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::ca7:b0ff:fea6:5e99 domain: efa_3-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
-
Schritt 6: Installieren der NCCL
Installieren Sie die NCCL Weitere Informationen zur NCCL finden Sie im NCCL-Repository
So installieren Sie die NCCL
-
Navigieren Sie zum Verzeichnis
/opt
.$
cd /opt -
Klonen Sie das offizielle NCCL-Repository in die Instance und navigieren Sie zum lokal geklonten Repository.
$
sudo git clone https://github.com/NVIDIA/nccl.git -b v2.23.4-1 && cd nccl -
Erstellen und installieren Sie die NCCL und geben Sie das CUDA-Installationsverzeichnis an.
$
sudo make -j src.build CUDA_HOME=/usr/local/cuda
Schritt 7: Installieren der NCCL-Tests
Installieren Sie die NCCL-Tests. Mit den NCCL-Tests können Sie bestätigen, dass die NCCL richtig installiert wurde und wie erwartet funktioniert. Weitere Informationen zu den NCCL-Tests finden Sie unter nccl-tests repository
So installieren Sie die NCCL-Tests
-
Navigieren Sie zum Stammverzeichnis.
$
cd $HOME -
Klonen Sie das offizielle nccl-tests-Repository in die Instance und navigieren Sie zum lokal geklonten Repository.
$
git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests -
Fügen Sie das libfabric-Verzeichnis in die Variable
LD_LIBRARY_PATH
ein.-
Amazon Linux 2
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib64
:$LD_LIBRARY_PATH -
Ubuntu
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib
:$LD_LIBRARY_PATH
-
-
Installieren Sie die NCCL-Tests und geben Sie die Installationsverzeichnisse für MPI, NCCL und CUDA an.
$
make MPI=1 MPI_HOME=/opt/amazon/openmpi
NCCL_HOME=/opt/nccl/build
CUDA_HOME=/usr/local/cuda
Schritt 8: Testen der EFA- und NCCL-Konfiguration
Führen Sie einen Test durch, um sicherzustellen, dass Ihre temporäre Instance richtig für EFA und NCCL konfiguriert ist.
So testen Sie EFA- und NCCL-Konfiguration
-
Erstellen Sie eine Host-Datei, die die Hosts angibt, auf denen die Tests ausgeführt werden sollen. Der folgende Befehl erstellt eine Host-Datei namens
my-hosts
, die eine Referenz auf die Instance selbst enthält.[ec2-user ~]$
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
-
Führen Sie den Test aus und geben Sie die Host-Datei (
--hostfile
) und die Anzahl der GPUs zu verwendenden Dateien (-n
) an. Der folgende Befehl führt denall_reduce_perf
Test auf 8 GPUs auf der Instanz selbst aus und gibt die folgenden Umgebungsvariablen an.-
FI_EFA_USE_DEVICE_RDMA=1
– (nurp4d.24xlarge
) verwendet die RDMA-Funktion des Geräts für einseitige und zweiseitige Übertragungen. -
NCCL_DEBUG=INFO
: ermöglicht eine detaillierte Debugging-Ausgabe. Sie können auchVERSION
angeben, damit nur die NCCL-Version am Anfang des Tests ausgegeben wird oderWARN
, damit nur Fehlermeldungen ausgegeben werden.
Weitere Informationen zu den Argumenten für NCCL-Tests finden Sie unter NCCL Tests README
im offiziellen nccl-tests-Repository. -
p3dn.24xlarge
$
/opt/amazon/openmpi/bin/mpirun \ -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \ -x NCCL_DEBUG=INFO \ --hostfile my-hosts -n 8 -N 8 \ --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \ $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100 -
p4d.24xlarge
undp5.48xlarge
$
/opt/amazon/openmpi/bin/mpirun \ -x FI_EFA_USE_DEVICE_RDMA=1 \ -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \ -x NCCL_DEBUG=INFO \ --hostfile my-hosts -n 8 -N 8 \ --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \ $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
-
-
Sie können bestätigen, dass EFA als zugrunde liegender Anbieter für NCCL aktiv ist, wenn das
NCCL_DEBUG
-Protokoll gedruckt wird.ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Selected Provider is efa*
Die folgenden zusätzlichen Informationen werden angezeigt, wenn Sie eine
p4d.24xlarge
-Instance verwenden.ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Running on P4d platform, Setting NCCL_TOPO_FILE environment variable to /home/ec2-user/install/plugin/share/aws-ofi-nccl/xml/p4d-24xl-topo.xml
Schritt 9: Installieren der Machine-Learning-Anwendungen
Installieren Sie die Machine-Learning-Anwendungen auf der temporären Instance. Der Installationsvorgang variiert je nach Machine-Learning-Anwendung. Weitere Informationen zum Installieren von Software auf Ihrer Linux-Instance finden Sie unter Verwalten von Software auf einer Amazon-Linux-2-Instance.
Anmerkung
In der Dokumentation Ihrer Machine-Learning-Anwendung finden Sie Installationsanleitungen.
Schritt 10: Erstellen eines EFA- und NCCL-konformen AMI
Nachdem Sie die erforderlichen Softwarekomponenten installiert haben, erstellen Sie ein AMI, das Sie erneut verwenden können, um Ihre EFA-fähigen Instances zu starten.
So erstellen Sie ein AMI aus Ihrer temporären Instance:
Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/
. -
Wählen Sie im Navigationsbereich Instances aus.
-
Wählen Sie die temporäre Instance aus, die Sie erstellt haben, und wählen Sie anschließend Actions (Aktionen), Image und Create Image (Image erstellen) aus.
-
Gehen Sie bei Create Image (Image erstellen) wie folgt vor:
-
Geben Sie unter Image name (Image-Name) einen beschreibenden Namen für das AMI ein.
-
(Optional:) Geben Sie bei Image description (Image-Beschreibung) eine kurze Beschreibung des Zwecks des AMI ein.
-
Wählen Sie Create Image (Image erstellen) aus.
-
-
Wählen Sie im Navigationsbereich AMIs aus.
-
Suchen Sie das AMI, das Sie erstellt haben, in der Liste. Warten Sie, bis der Status von
pending
zuavailable
wechselt, bevor Sie mit dem nächsten Schritt fortfahren.
Schritt 11: Beenden der temporären Instance
An diesem Punkt benötigen Sie die temporäre Instance, die Sie gestartet haben, nicht mehr. Sie können die Instance beenden, damit keine weiteren Kosten dafür anfallen.
So beenden Sie die temporäre Instance:
Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/
. -
Wählen Sie im Navigationsbereich Instances aus.
-
Wählen Sie die temporäre instance aus, die Sie erstellt haben, und wählen Sie anschließend Actions (Aktionen), Instance state (Instance-Zustand) und Terminate instance (Instance beenden) aus.
-
Wählen Sie Terminate (Kündigen) aus, wenn Sie zur Bestätigung aufgefordert werden.
Schritt 12: Starten von EFA- und NCCL-konformen Instances in einer Cluster Placement-Gruppe
Starten Sie die EFA- und NCCL-fähigen Instances in einer Cluster-Placement-Gruppe, indem Sie das EFA-fähige AMI und die EFA-fähige Sicherheitsgruppe verwenden, die Sie zuvor erstellt haben.
Anmerkung
-
Es ist keine absolute Voraussetzung, Ihre EFA-aktivierten Instances in einer Cluster-Platzierungsgruppe zu starten. Wir empfehlen allerdings, Ihre EFA-Instances in einer Cluster-Placement-Gruppe zu starten, da die Instances dadurch in einer Gruppe mit niedriger Latenz in einer einzelnen Availability Zone gestartet werden.
-
Um die Verfügbarkeit von Kapazitäten sicherzustellen, wenn Sie die Instances Ihres Clusters skalieren, können Sie eine Kapazitätsreservierung für Ihre Cluster-Placement-Gruppe erstellen. Weitere Informationen finden Sie unter Kapazitätsreservierungen in Cluster-Placement-Gruppen erstellen.
So starten Sie eine temporäre Instance
Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/
. -
Wählen Sie im Navigationsbereich Instances und dann Instances starten aus, um den Launch Instance Wizard zu öffnen.
-
(Optional) Geben Sie im Bereich Name and tags (Name und Tags) einen Namen für die Instance an, z. B.
EFA-instance
. Der Name wird der Instance als Ressourcen-Tag (Name=
) zugewiesen.EFA-instance
-
Wählen Sie im Abschnitt Anwendungs- und Betriebssystemimages die Option My AMIs und dann das AMI aus, das Sie im vorherigen Schritt erstellt haben.
-
Wählen Sie im Bereich Instance type (Instance-Typ) entweder
p3dn.24xlarge
oderp4d.24xlarge
aus. -
Wählen Sie im Bereich Key pair (Schlüsselpaar) das Schlüsselpaar aus, das für die Instance verwendet werden soll.
-
Wählen Sie im Bereich Network settings (Netzwerkeinstellungen) Edit (Bearbeiten) aus und führen Sie dann Folgendes aus:
-
Wählen Sie unter Subnetz das Subnetz aus, in dem die Instance gestartet werden soll. Wenn Sie kein Subnetz auswählen, können Sie die Instance nicht für EFA aktivieren.
-
Wählen Sie bei Firewall (security groups) Firewall (Sicherheitsgruppen) Select existing security group (Vorhandene Sicherheitsgruppe auswählen) und dann die Sicherheitsgruppe aus, die Sie im vorherigen Schritt erstellt haben.
-
Erweitern Sie den Abschnitt Erweiterte Netzwerkkonfiguration.
Wählen Sie für Netzwerkschnittstelle 1 Netzwerkkartenindex = 0, Geräteindex = 0 und Schnittstellentyp = EFA mit ENA aus.
(Optional) Wenn Sie einen Instance-Typ mit mehreren Karten verwenden, z. B.
p4d.24xlarge
oderp5.48xlarge
, wählen Sie für jede weitere erforderliche Netzwerkschnittstelle die Option Netzwerkschnittstelle hinzufügen, wählen Sie für Netzwerkkartenindex den nächsten ungenutzten Index aus und wählen Sie dann Geräteindex = 1 und Schnittstellentyp = EFA mit ENA oder Nur-EFA aus.
-
-
(Optional) Konfigurieren Sie im Bereich Storage (Speicher) die Volumes nach Bedarf.
-
Wählen Sie im Bereich Advanced details (Erweiterte Details) bei Placement group name (Placement-Gruppen-Name) die Cluster-Placement-Gruppe aus, in der die Instance gestartet werden soll. Wenn Sie eine neue Cluster-Placement-Gruppe erstellen müssen, wählen Sie Create new placement group (Neue Placement-Gruppe erstellen).
-
Geben Sie im Bereich Summary (Zusammenfassung) rechts bei Number of instances (Anzahl der Instances) die Anzahl EFA-fähiger Instances ein, die Sie starten möchten, und wählen Sie dann Launch instance (Instance starten).
Schritt 13: Aktivieren von passwortlosem SSH
Damit Ihre Anwendungen auf allen Instances in Ihrem Cluster ausgeführt werden können, müssen Sie passwortlosen SSH-Zugriff vom Führungsknoten auf die Mitgliedsknoten aktivieren. Der Führungsknoten ist die Instance, von der aus Sie die Anwendungen ausführen. Die verbleibenden Instances im Cluster sind die Mitgliedsknoten.
So aktivieren Sie passwortloses SSH zwischen den Instances im Cluster:
-
Wählen Sie eine Instance im Cluster als Führungsknoten aus und stellen Sie eine Verbindung zu ihr her.
-
Deaktivieren Sie
strictHostKeyChecking
und aktivieren SieForwardAgent
für den Führungsknoten. Öffnen Sie~/.ssh/config
mit dem bevorzugten Texteditor und fügen Sie Folgendes hinzu.Host * ForwardAgent yes Host * StrictHostKeyChecking no
-
Generieren Sie ein RSA-Schlüsselpaar.
$
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsaDas Schlüsselpaar wird im
$HOME/.ssh/
-Verzeichnis erstellt. -
Ändern Sie die Berechtigungen des privaten Schlüssels auf dem Führungsknoten.
$
chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config -
Öffnen Sie
~/.ssh/id_rsa.pub
mit Ihrem bevorzugten Texteditor und kopieren Sie den Schlüssel. -
Gehen Sie für jeden Mitgliedsknoten im Cluster wie folgt vor:
-
Stellen Sie eine Verbindung mit der Instance her.
-
Öffnen Sie
~/.ssh/authorized_keys
mit Ihrem bevorzugten Texteditor und fügen Sie den öffentlichen Schlüssel hinzu, den Sie zuvor kopiert haben.
-
-
Um zu testen, ob das passwortlose SSH wie erwartet funktioniert, stellen Sie eine Verbindung zum Leaderknoten her und führen Sie den folgenden Befehl aus.
$
sshmember_node_private_ip
Sie sollten eine Verbindung zum Mitgliedsknoten herstellen können, ohne zur Eingabe eines Schlüssels oder Passworts aufgefordert zu werden.