Verwenden Sie ein AWS Deep Learning-AMI - Amazon Elastic Compute Cloud

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.

Verwenden Sie ein AWS Deep Learning-AMI

Die folgenden Schritte helfen Ihnen bei den ersten Schritten mit einem der folgenden AWS Deep Learning-AMIs:

  • Deep-Learning-AMI (Amazon Linux 2)

  • Deep-Learning-AMI (Ubuntu 20.04)

Weitere Informationen finden Sie im AWS Deep Learning AMI -Benutzerhandbuch.

Anmerkung

Nur die p3dn.24xlarge- und p4d.24xlarge-Instance-Typen werden unterstützt.

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 ein- und ausgehenden Datenverkehr der Gruppe sowie eingehenden SSH-Datenverkehr von jeder IPv4-Adresse zwecks SSH-Konnektivität zulässt.

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:
  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie im Navigationsbereich Security Groups (Sicherheitsgruppen) und anschließend Create Security Group (Sicherheitsgruppe erstellen) aus.

  3. Führen Sie im Fenster Create Security Group Folgendes aus:

    1. Geben Sie für Security group name (Name der Sicherheitsgruppe) einen beschreibenden Namen für die Sicherheitsgruppe ein, wie etwa EFA-enabled security group.

    2. (Optional:) Geben Sie unter Description (Beschreibung) eine kurze Beschreibung der Sicherheitsgruppe ein.

    3. Wählen Sie bei VPC die VPC aus, in der Sie Ihre EFA-fähigen Instances starten möchten.

    4. Wählen Sie Sicherheitsgruppe erstellen aus.

  4. Wählen Sie die von Ihnen erstellte Sicherheitsgruppe aus und kopieren Sie dann auf der Registerkarte Details die Security group ID (Sicherheitsgruppen-ID).

  5. Bei noch ausgewählter Sicherheitsgruppe wählen Sie Actions (Aktionen), Edit inbound rules (Eingangsregeln bearbeiten) aus und gehen dann folgendermaßen vor:

    1. Wählen Sie Regel hinzufügen aus.

    2. Wählen Sie für Type (Typ) die Option All traffic (Gesamter Datenverkehr) aus.

    3. Wählen Sie bei Source type (Quellentyp) Custom (Benutzerdefiniert) aus und fügen Sie die Sicherheitsgruppen-ID, die Sie kopiert hatten, ins Feld ein.

    4. Wählen Sie Regel hinzufügen aus.

    5. Wählen Sie unter Typ die Option SSH aus.

    6. Wählen Sie unter Source (Quelle) die Option Anywhere-IPv4 (Alle IPv4) aus.

    7. Wählen Sie Save rules (Regeln speichern) aus.

  6. Bei noch ausgewählter Sicherheitsgruppe wählen Sie Actions (Aktionen), Edit outbound rules (Ausgangsregeln bearbeiten) aus und gehen dann folgendermaßen vor:

    1. Wählen Sie Regel hinzufügen aus.

    2. Wählen Sie für Type (Typ) die Option All traffic (Gesamter Datenverkehr) aus.

    3. Wählen Sie bei Destination type (Zieltyp) Custom (Benutzerdefiniert) aus und fügen Sie die Sicherheitsgruppen-ID, die Sie kopiert hatten, ins Feld ein.

    4. 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
  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie im Navigationsbereich Instances und dann Instances starten aus, um den Launch Instance Wizard zu öffnen.

  3. (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=EFA-instance) zugewiesen.

  4. Wählen Sie im Bereich Application and OS Images (Anwendungs- und Betriebssystem-Images) eine unterstützte AWS Deep Learning AMI Version 25.0 oder neuer aus.

  5. Wählen Sie im Bereich Instance type (Instance-Typ) entweder p3dn.24xlarge oder p4d.24xlarge aus.

  6. Wählen Sie im Bereich Key pair (Schlüsselpaar) das Schlüsselpaar aus, das für die Instance verwendet werden soll.

  7. Wählen Sie im Bereich Network settings (Netzwerkeinstellungen) Edit (Bearbeiten) aus und führen Sie dann Folgendes aus:

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

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

    3. Erweitern Sie den Bereich Advanced network configuration (Erweiterte Netzwerkkonfiguration) und wählen Sie bei Elastic Fabric Adapter Enable (Aktivieren) aus.

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

  9. Wählen Sie im Bereich Summary (Zusammenfassung) rechts Launch instance (Instance starten) aus.

Schritt 3: 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
  1. 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.

    IMDSv2
    [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
    IMDSv1
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
  2. Führen Sie den Test aus und geben Sie die Host-Datei (--hostfile) und die Anzahl zu verwendender GPUs (-n) an. Der folgende Befehl führt den Test all_reduce_perf auf 8 GPUs in der Instance selbst aus und gibt die folgenden Umgebungsvariablen an.

    • FI_EFA_USE_DEVICE_RDMA=1 – (nur p4d.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 auch VERSION angeben, damit nur die NCCL-Version am Anfang des Tests ausgegeben wird oder WARN, 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/aws-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

      $ /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/aws-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
  3. 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 4: 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 Linux-Instance.

Anmerkung

In der Dokumentation Ihrer Machine-Learning-Anwendung finden Sie Installationsanleitungen.

Schritt 5: 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:
  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie im Navigationsbereich Instances aus.

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

  4. Gehen Sie bei Create Image (Image erstellen) wie folgt vor:

    1. Geben Sie unter Image name (Image-Name) einen beschreibenden Namen für das AMI ein.

    2. (Optional:) Geben Sie bei Image description (Image-Beschreibung) eine kurze Beschreibung des Zwecks des AMI ein.

    3. Wählen Sie Create Image (Image erstellen) aus.

  5. Wählen Sie im Navigationsbereich die Option AMIs.

  6. Suchen Sie das AMI, das Sie erstellt haben, in der Liste. Warten Sie, bis der Status von pending zu available wechselt, bevor Sie mit dem nächsten Schritt fortfahren.

Schritt 6: 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:
  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie im Navigationsbereich Instances aus.

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

  4. Wählen Sie Terminate (Kündigen) aus, wenn Sie zur Bestätigung aufgefordert werden.

Schritt 7: 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-Placement-Gruppe 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.

New console
So starten Sie eine temporäre Instance
  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie im Navigationsbereich Instances und dann Instances starten aus, um den Launch Instance Wizard zu öffnen.

  3. (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=EFA-instance) zugewiesen.

  4. Wählen Sie im Bereich Application and OS Images (Anwendungs- und Betriebssystem-Images) My AMIs (Meine AMIs) und dann das AMI aus, das Sie im vorherigen Schritt erstellt haben.

  5. Wählen Sie im Bereich Instance type (Instance-Typ) entweder p3dn.24xlarge oder p4d.24xlarge aus.

  6. Wählen Sie im Bereich Key pair (Schlüsselpaar) das Schlüsselpaar aus, das für die Instance verwendet werden soll.

  7. Wählen Sie im Bereich Network settings (Netzwerkeinstellungen) Edit (Bearbeiten) aus und führen Sie dann Folgendes aus:

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

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

    3. Erweitern Sie den Bereich Advanced network configuration (Erweiterte Netzwerkkonfiguration) und wählen Sie bei Elastic Fabric Adapter Enable (Aktivieren) aus.

  8. (Optional) Konfigurieren Sie im Bereich Storage (Speicher) die Volumes nach Bedarf.

  9. 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).

  10. 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).

Old console
So starten Sie EFA- und NCCL-fähige Instances in einer Cluster-Placement-Gruppe:
  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie Launch Instance aus.

  3. Wählen Sie auf der Seite Choose an AMI (AMI auswählen) die Option My AMIs (Meine AMIs), suchen Sie das AMI, das Sie zuvor erstellt haben, und wählen Sie anschließend Select (Auswählen) aus.

  4. Wählen Sie auf der Seite Choose an Instance Type (Instance-Typ auswählen) die Option p3dn.24xlarge und dann Next: Configure Instance Details (Weiter: Instance-Details konfigurieren) aus.

  5. Führen Sie auf der Seite Configure Instance Details (Instance-Details konfigurieren) die folgenden Schritte aus:

    1. Geben Sie bei Number of instances (Anzahl der Instances) die Anzahl der EFA- und NCCL-fähigen Instances ein, die gestartet werden sollen.

    2. Wählen Sie für Network (Netzwerk) und Subnet (Subnetz) die VPC und das Subnetz an, in das Sie die Instances starten möchten.

    3. Wählen Sie für Placement group (Placement-Gruppe) die Option Add instance to placement group (Instance der Placement-Gruppe hinzufügen) aus.

    4. Wählen Sie bei Placement group name (Name der Placement-Gruppe) die Option Add to a new placement group (Zu neuer Placement-Gruppe hinzufügen) aus und geben Sie dann einen beschreibenden Namen für die Placement-Gruppe ein. Wählen Sie dann bei Placement group strategy (Strategie für Placement-Gruppe) cluster aus.

    5. Wählen Sie für EFA Enable (Aktivieren) aus.

    6. Wählen Sie im Abschnitt Network Interfaces (Netzwerkschnittstellen für das Gerät eth0 die Option New network interface (Neue Netzwerkschnittstelle) aus. Sie können zudem optional eine primäre IPv4-Adresse und eine oder mehrere sekundäre IPv4-Adressen eingeben. Wenn Sie die Instance in einem Subnetz starten, dem ein IPv6-CIDR-Block zugeordnet ist, können Sie optional eine primäre IPv6-Adresse und eine oder mehrere sekundäre IPv6-Adressen angeben.

    7. Wählen Sie Next: Add Storage aus.

  6. Geben Sie auf der Seite Add Storage (Speicher hinzufügen) die Volumes an, die an die Instances angefügt werden sollen, ergänzend zu den Volumes, die vom AMI angegeben werden (z. B. der Root-Gerät-Volume). Wählen Sie dann Next: Add Tags (Weiter: Tags (Markierungen) hinzufügen) aus.

  7. Geben Sie auf der Seite Add Tags (Tags (Markierungen) hinzufügen) Tags (Markierungen) für die Instances an, z. B. einen benutzerfreundlichen Namen, und wählen Sie anschließend Next: Configure Security Group (Weiter: Sicherheitsgruppe konfigurieren).

  8. Wählen Sie auf der Seite Configure Security Group (Sicherheitsgruppe konfigurieren) bei Assign a security group (Sicherheitsgruppe zuweisen) die Option Select an existing security group (Vorhandene Sicherheitsgruppe auswählen) und dann die Sicherheitsgruppe aus, die Sie zuvor erstellt haben.

  9. Klicken Sie auf Review and Launch.

  10. Überprüfen Sie auf der Seite Review Instance Launch (Instance-Start überprüfen) Ihre Einstellungen und wählen Sie anschließend Launch (Starten) aus, um ein Schlüsselpaar auszuwählen und Ihre Instance zu starten.

Schritt 8: 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:
  1. Wählen Sie eine Instance im Cluster als Führungsknoten aus und stellen Sie eine Verbindung zu ihr her.

  2. Deaktivieren Sie strictHostKeyChecking und aktivieren Sie ForwardAgent 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
  3. Generieren Sie ein RSA-Schlüsselpaar.

    $ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

    Das Schlüsselpaar wird im $HOME/.ssh/-Verzeichnis erstellt.

  4. Ändern Sie die Berechtigungen des privaten Schlüssels auf dem Führungsknoten.

    $ chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config
  5. Öffnen Sie ~/.ssh/id_rsa.pub mit Ihrem bevorzugten Texteditor und kopieren Sie den Schlüssel.

  6. Gehen Sie für jeden Mitgliedsknoten im Cluster wie folgt vor:

    1. Stellen Sie eine Verbindung mit der Instance her.

    2. Öffnen Sie ~/.ssh/authorized_keys mit Ihrem bevorzugten Texteditor und fügen Sie den öffentlichen Schlüssel hinzu, den Sie zuvor kopiert haben.

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

    $ ssh member_node_private_ip

    Sie sollten eine Verbindung zum Mitgliedsknoten herstellen können, ohne zur Eingabe eines Schlüssels oder Passworts aufgefordert zu werden.