Skip to main content
NetApp Solutions
Die deutsche Sprachversion wurde als Serviceleistung für Sie durch maschinelle Übersetzung erstellt. Bei eventuellen Unstimmigkeiten hat die englische Sprachversion Vorrang.

Lane-Erkennung – verteiltes Training mit RUN:AI

Beitragende

Dieser Abschnitt enthält Details zum Einrichten der Plattform für die Durchführung von Distributed Training zur Lane-Erkennung mithilfe des RUN: AI Orchestrator. Wir sprechen über die Installation aller Lösungselemente und die Durchführung der verteilten Schulungen auf der besagten Plattform. DIE ML-Versionierung erfolgt über NetApp Snapshot, die mit RUN verbunden ist: KI-Experimente zur Erzielung von Daten und Modellreproduzierbarkeit. DIE ML-Versionierung spielt eine entscheidende Rolle bei Tracking-Modellen, bei der gemeinsamen Arbeit zwischen Teammitgliedern, bei der Reproduzierbarkeit der Ergebnisse, bei der Einführung neuer Modellversionen in die Produktion und bei der Datenerzeugung. NetApp ML Version Control (Snapshot) erfasst zeitpunktgenaue Versionen der Daten, geschulte Modelle und Protokolle für jedes Experiment. Die umfassende API-Unterstützung erleichtert die Integration IN DIE RUN: KI Plattform. Aufgrund des Trainingsstatus muss ein Ereignis nur ausgelöst werden. Man muss auch den Status des gesamten Experiments erfassen, ohne im Code oder in den Containern, die auf Kubernetes (K8s) laufen, etwas zu ändern.

Abschließend wird in diesem technischen Bericht die Performance-Bewertung auf mehreren GPU-fähigen Knoten in AKS durchgeführt.

Verteiltes Training für Lane-Erkennung Anwendungsfall mit dem TuSimple-Datensatz

In diesem technischen Bericht werden verteilte Schulungen auf dem TuSimple-Datensatz zur Fahrspurerkennung durchgeführt. Horovod wird im Trainingscode für das verteilte Daten-Training auf mehreren GPU-Nodes gleichzeitig im Kubernetes Cluster über AKS verwendet. Code wird als Container-Images für TuSimple-Daten-Download und -Verarbeitung verpackt. Verarbeitete Daten werden auf persistenten Volumes gespeichert, die durch das NetApp Trident Plug-in zugewiesen werden. Für das Training wird ein weiteres Container-Image erstellt und die Daten, die in persistenten Volumes gespeichert sind, werden beim Herunterladen der Daten verwendet.

Um den Daten- und Schulungsauftrag zu übermitteln, verwenden SIE RUN: KI zur Koordinierung von Ressourcenzuweisung und -Management. RUN: AI ermöglicht die Durchführung von MPI-Operationen (Message Passing Interface), die für Horovod benötigt werden. Mit diesem Layout können mehrere GPU-Knoten miteinander kommunizieren, um die Trainingsgewichte nach jedem Training-Mini-Batch zu aktualisieren. Zudem ermöglicht es das Monitoring des Trainings über die Benutzeroberfläche und die CLI, sodass der Fortschritt der Experimente einfach überwacht werden kann.

NetApp Snapshot ist in den Trainingscode integriert und erfasst den Status der Daten und das trainierte Modell für jedes Experiment. Damit können Sie die Version und den verwendeten Code sowie das damit verbundene trainierte Modell nachverfolgen.

AKS-Einrichtung und Installation

Zur Einrichtung und Installation des AKS-Clusters gehen Sie zu "Erstellen Sie einen AKS-Cluster". Führen Sie dann die folgenden Schritte aus:

  1. Wählen Sie bei der Auswahl des Node-Typs (unabhängig davon, ob es sich um System- (CPU) oder „worker“-Nodes (GPU) handelt, Folgendes aus:

    1. Fügen Sie den primären System-Node mit dem Namen hinzu agentpool Am Standard_DS2_v2 Größe. Verwenden Sie die drei Standard-Nodes.

    2. Fügen Sie den Node Worker hinzu gpupool Mit the Standard_NC6s_v3 Pool-Größe. Verwenden Sie mindestens drei Nodes für GPU-Nodes.

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    Hinweis Implementierung dauert 5 bis 10 Minuten.
  2. Klicken Sie nach Abschluss der Bereitstellung auf mit Cluster verbinden. Um eine Verbindung mit dem neu erstellten AKS-Cluster herzustellen, installieren Sie das Kubernetes-Befehlszeilen-Tool aus Ihrer lokalen Umgebung (Laptop/PC). Besuchen Sie "Tools Installieren" So installieren Sie es nach Ihrem Betriebssystem.

  3. "Installieren Sie die Azure CLI in Ihrer lokalen Umgebung".

  4. Um über das Terminal auf den AKS-Cluster zuzugreifen, geben Sie zuerst ein az login Und geben Sie die Zugangsdaten ein.

  5. Führen Sie die folgenden beiden Befehle aus:

    az account set --subscription xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx
    aks get-credentials --resource-group resourcegroup --name aksclustername
  6. Geben Sie diesen Befehl in die Azure CLI ein:

    kubectl get nodes
    Hinweis Wenn alle sechs Knoten wie hier dargestellt betriebsbereit sind, ist Ihr AKS-Cluster bereit und mit Ihrer lokalen Umgebung verbunden.

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Erstellen Sie ein delegiertes Subnetz für Azure NetApp Files

Gehen Sie wie folgt vor, um ein delegiertes Subnetz für Azure NetApp Files zu erstellen:

  1. Navigieren Sie im Azure-Portal zu virtuellen Netzwerken. Suchen Sie Ihr neu erstelltes virtuelles Netzwerk. Es sollte ein Präfix wie Aaks-vnet haben, wie hier zu sehen. Klicken Sie auf den Namen des virtuellen Netzwerks.

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

  2. Klicken Sie auf Subnetze, und wählen Sie in der oberen Symbolleiste +Subnetz aus.

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

  3. Geben Sie dem Subnetz einen Namen an, z. B. ANF.sn Wählen Sie unter der Überschrift Subnet Delegation die Option Microsoft.NetApp/volumes aus. Ändern Sie nichts anderes. Klicken Sie auf OK.

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Azure NetApp Files Volumes werden dem Applikations-Cluster zugewiesen und als persistente Volume-Forderungen (PVCs) in Kubernetes genutzt. Diese Zuweisung wiederum bietet uns die Flexibilität, Volumes verschiedenen Services zuzuordnen, sei es bei Jupyter Notebooks, serverlosen Funktionen usw.

Benutzer von Services können Storage auf unterschiedliche Weise von der Plattform aus nutzen. Azure NetApp Files bietet folgende Hauptvorteile:

  • Bietet Benutzern die Möglichkeit, Snapshots zu verwenden.

  • Ermöglicht Benutzern die Speicherung großer Datenmengen auf Azure NetApp Files Volumes.

  • Beziehen Sie sich die Performance-Vorteile von Azure NetApp Files Volumes durch Ausführung ihrer Modelle auf große Dateimengen.

Einrichtung von Azure NetApp Files

Um die Einrichtung von Azure NetApp Files abzuschließen, müssen Sie sie zuerst wie in beschrieben konfigurieren "QuickStart: Azure NetApp Files einrichten und ein NFS-Volume erstellen".

Sie können jedoch die Schritte zur Erstellung eines NFS Volumes für Azure NetApp Files weglassen, wie Sie Volumes über Trident erstellen. Bevor Sie fortfahren, sollten Sie Folgendes beachten:

Peering von virtuellem AKS-Netzwerk und virtuellem Azure NetApp Files-Netzwerk

Führen Sie als Nächstes die folgenden Schritte aus, um das virtuelle AKS-Netzwerk (vnet) mit dem Azure NetApp Files vnet in Verbindung zu setzen:

  1. Geben Sie in das Suchfeld oben im Azure-Portal virtuelle Netzwerke ein.

  2. Klicken Sie auf vnet aks- vnet-Name, und geben Sie dann Peerings in das Suchfeld ein.

  3. Klicken Sie auf + Hinzufügen, und geben Sie die Informationen in der folgenden Tabelle ein:

    Feld

    Wert oder Beschreibung #

    Linkname des Peering-Links

    aks-vnet-Name_to_anf

    SubskriptionID

    Abonnement des Azure NetApp Files vnet, zu dem Sie spähen

    Vnet Peering-Partner

    Azure NetApp Files vnet

    Hinweis Lassen Sie alle nicht-Sternchen-Abschnitte standardmäßig unverändert
  4. Klicken Sie AUF HINZUFÜGEN oder OK, um das Peering zum virtuellen Netzwerk hinzuzufügen.

Weitere Informationen finden Sie unter "Virtuelles Netzwerk-Peering erstellen, ändern oder löschen".

Trident

Trident ist ein Open-Source-Projekt von NetApp für persistenten Storage für Applikations-Container. Trident wird als externer Controller für die bereitstellung implementiert, der selbst als Pod ausgeführt wird. Mit ihm werden Volumes überwacht und der Bereitstellungsprozess vollständig automatisiert.

NetApp Trident ermöglicht eine reibungslose Integration in K8s, indem persistente Volumes zum Speichern von Trainingsdatensätzen und trainierten Modellen erstellt und angehängt werden. So können Data Scientists und Data Engineers K8s einfacher verwenden – ohne die manuelle Speicherung und das manuelle Management von Datensätzen. Mit Trident müssen Data Scientists zudem keine Erfahrung mehr mit dem Management neuer Datenplattformen machen, da die Datenmanagement-Aufgaben durch die Integration der logischen API integriert werden.

Installation Von Trident

So installieren Sie die Trident Software:

  1. "Zuerst Helm einbauen".

  2. Laden Sie das Trident 21.01.1-Installationsprogramm herunter und extrahieren Sie es.

    wget https://github.com/NetApp/trident/releases/download/v21.01.1/trident-installer-21.01.1.tar.gz
    tar -xf trident-installer-21.01.1.tar.gz
  3. Ändern Sie das Verzeichnis in trident-installer.

    cd trident-installer
  4. Kopieren tridentctl In ein Verzeichnis im System $PATH.

    cp ./tridentctl /usr/local/bin
  5. Installation von Trident auf K8s Cluster mit Helm:

    1. Verzeichnis in Steuerverzeichnis ändern.

      cd helm
    2. Installation Von Trident:

      helm install trident trident-operator-21.01.1.tgz --namespace trident --create-namespace
    3. Überprüfen Sie den Status von Trident Pods die übliche K8s Art und Weise:

      kubectl -n trident get pods
    4. Wenn alle Pods in Betrieb sind, ist Trident installiert und Sie können gut aufgestellt werden.

Richten Sie das Azure NetApp Files Back-End und die Storage-Klasse ein

Gehen Sie wie folgt vor, um das Azure NetApp Files Back-End und die Storage-Klasse einzurichten:

  1. Wechseln Sie zurück zum Home-Verzeichnis.

    cd ~
  2. Klonen Sie die "Projekt-Repository" lane-detection-SCNN-horovod.

  3. Wechseln Sie zum trident-config Verzeichnis.

    cd ./lane-detection-SCNN-horovod/trident-config
  4. Erstellung eines Azure-Serviceprinzips (das Service-Prinzip besteht darin, wie Trident mit Azure kommuniziert, um auf Ihre Azure NetApp Files-Ressourcen zuzugreifen).

    az ad sp create-for-rbac --name

    Die Ausgabe sollte wie im folgenden Beispiel aussehen:

    {
      "appId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
       "displayName": "netapptrident",
        "name": "http://netapptrident",
        "password": "xxxxxxxxxxxxxxx.xxxxxxxxxxxxxx",
        "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
     }
  5. Erstellen Sie das Trident backend json Datei:

  6. Füllen Sie mithilfe Ihres bevorzugten Texteditors die folgenden Felder aus der Tabelle unten im aus anf-backend.json Datei:

    Feld Wert

    SubskriptionID

    Ihre Azure-Abonnement-ID

    TenantID

    Ihre Azure Mandanten-ID (aus der Ausgabe von az ad sp im vorherigen Schritt)

    Client-ID

    Ihre appID (aus der Ausgabe von az ad sp im vorherigen Schritt)

    ClientSecret

    Ihr Kennwort (aus der Ausgabe von az ad sp im vorherigen Schritt)

    Die Datei sollte wie das folgende Beispiel aussehen:

    {
        "version": 1,
        "storageDriverName": "azure-netapp-files",
        "subscriptionID": "fakec765-4774-fake-ae98-a721add4fake",
        "tenantID": "fakef836-edc1-fake-bff9-b2d865eefake",
        "clientID": "fake0f63-bf8e-fake-8076-8de91e57fake",
        "clientSecret": "SECRET",
        "location": "westeurope",
        "serviceLevel": "Standard",
        "virtualNetwork": "anf-vnet",
        "subnet": "default",
        "nfsMountOptions": "vers=3,proto=tcp",
        "limitVolumeSize": "500Gi",
        "defaults": {
        "exportRule": "0.0.0.0/0",
        "size": "200Gi"
    }
  7. Weisen Sie Trident an, das Azure NetApp Files-Back-End im zu erstellen trident Namespace verwenden anf-backend.json Die Konfigurationsdatei ist wie folgt:

    tridentctl create backend -f anf-backend.json -n trident
  8. Speicherklasse erstellen:

    1. K8 Benutzer stellen Volumes mithilfe von PVCs bereit, die eine Storage-Klasse nach Namen angeben. Weisen Sie K8s an, eine Speicherklasse zu erstellen azurenetappfiles Diese Referenz wird auf das im vorherigen Schritt erstellte Azure NetApp Files Back-End verweisen:

      kubectl create -f anf-storage-class.yaml
    2. Überprüfen Sie, ob Storage-Klassen mit folgendem Befehl erstellt werden:

      kubectl get sc azurenetappfiles

      Die Ausgabe sollte wie im folgenden Beispiel aussehen:

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Bereitstellen und Einrichten von Volume Snapshot-Komponenten auf AKS

Wenn Ihr Cluster nicht mit den korrekten Volume-Snapshot-Komponenten vorinstalliert wird, können Sie diese Komponenten manuell installieren, indem Sie die folgenden Schritte ausführen:

Hinweis AKS 1.18.14 verfügt nicht über einen vorinstallierten Snapshot-Controller.
  1. Installieren Sie Snapshot Beta-CRDs unter Verwendung der folgenden Befehle:

    kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
  2. Installieren Sie Snapshot Controller mithilfe der folgenden Dokumente von GitHub:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-3.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
  3. K8s einrichten volumesnapshotclass: Vor der Erstellung eines Volume-Snapshot, a "Volume Snapshot-Klasse" Muss eingerichtet werden. Erstellen Sie einen Volume-Snapshot für Azure NetApp Files, und erstellen Sie mit dieser Technologie eine ML-Versionierung. Erstellen volumesnapshotclass netapp-csi-snapclass Und stellen Sie ihn als Standard `volumesnapshotclass `wie folgt ein:

    kubectl create -f netapp-volume-snapshot-class.yaml

    Die Ausgabe sollte wie im folgenden Beispiel aussehen:

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

  4. Überprüfen Sie, ob die Klasse der Volume Snapshot Kopien mithilfe des folgenden Befehls erstellt wurde:

    kubectl get volumesnapshotclass

    Die Ausgabe sollte wie im folgenden Beispiel aussehen:

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

RUN:AI Installation

So installieren SIE RUN:AI:

  1. "Installieren SIE RUN:AI Cluster auf AKS".

  2. Gehen Sie zu app.runai.ai, klicken Sie auf Neues Projekt erstellen und benennen Sie es Lane-Detection. Es wird einen Namespace auf einem K8s-Cluster erstellen, der mit beginnt runai- Gefolgt vom Projektnamen. In diesem Fall wäre der erstellte Namespace Runai-Lane-Erkennung.

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

  3. "INSTALLIEREN SIE RUN:AI CLI".

  4. Stellen Sie auf Ihrem Terminal standardmäßig die Lane-Detection ein: AI-Projekt mit folgendem Befehl:

    `runai config project lane-detection`

    Die Ausgabe sollte wie im folgenden Beispiel aussehen:

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

  5. ClusterRole und ClusterRoleBinding für den Projekt-Namespace erstellen (z. B. lane-detection) Also das Standard-Servicekonto, das zu gehört runai-lane-detection Namespace hat die Berechtigung zum Ausführen volumesnapshot Operationen während der Jobausführung:

    1. Listen Sie Namespaces auf, um das zu überprüfen runai-lane-detection Existiert durch Verwendung dieses Befehls:

      kubectl get namespaces

      Die Ausgabe sollte wie im folgenden Beispiel erscheinen:

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

  6. ClusterCole erstellen netappsnapshot Und ClusterRoleBending netappsnapshot Verwenden der folgenden Befehle:

    `kubectl create -f runai-project-snap-role.yaml`
    `kubectl create -f runai-project-snap-role-binding.yaml`

Den TuSimple-Datensatz als RUN:AI-Job herunterladen und verarbeiten

Der Prozess zum Herunterladen und Verarbeiten des TuSimple-Datensatzes als RUN: AI-Job ist optional. Sie umfasst folgende Schritte:

  1. Erstellen und Drücken Sie das Docker-Bild, oder lassen Sie diesen Schritt aus, wenn Sie ein vorhandenes Docker-Bild verwenden möchten (z. B. muneer7589/download-tusimple:1.0)

    1. Zum Home-Verzeichnis wechseln:

      cd ~
    2. Gehen Sie zum Datenverzeichnis des Projekts lane-detection-SCNN-horovod:

      cd ./lane-detection-SCNN-horovod/data
    3. Ändern build_image.sh Shell-Skript und ändern Docker-Repository zu Ihrem. Beispiel: Ersetzen muneer7589 Mit dem Namen des Docker-Repositorys. Sie können auch den Namen und DAS TAG des Docker-Images ändern (z. B. download-tusimple Und 1.0):

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    4. Führen Sie das Skript aus, um das Docker-Image zu erstellen und es mithilfe folgender Befehle in das Docker-Repository zu verschieben:

      chmod +x build_image.sh
      ./build_image.sh
  2. Senden Sie DEN RUN: AI Job zum Herunterladen, Extrahieren, Vorverarbeiten und Speichern der TuSimple Lane Detection Dataset in a pvc, Das von NetApp Trident dynamisch erstellt wird:

    1. Übermitteln Sie den JOB „RUN: AI“ mithilfe der folgenden Befehle:

      runai submit
      --name download-tusimple-data
      --pvc azurenetappfiles:100Gi:/mnt
      --image muneer7589/download-tusimple:1.0
    2. Geben Sie die Informationen aus der Tabelle unten ein, um den JOB RUN:AI einzureichen:

      Feld Wert oder Beschreibung

      -Name

      Name des Jobs

      -pvc

      PVC des Formats [StorageClassName]:Größe:ContainerMountPath in der oben genannten Jobeinreichung erstellen Sie ein PVC-basiertes On-Demand mit Trident mit Speicherklasse azurenetappfiles. Persistente Volumen Kapazität hier ist 100Gi und es ist an Pfad /mnt montiert.

      -Image

      Das Docker-Image sollte beim Erstellen des Containers für diesen Job verwendet werden

      Die Ausgabe sollte wie im folgenden Beispiel aussehen:

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    3. Listen Sie die eingereichten RUN:AI-Jobs auf.

      runai list jobs

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    4. Überprüfen Sie die eingereichten Jobprotokolle.

      runai logs download-tusimple-data -t 10

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    5. Listen Sie die auf pvc Erstellt. Verwenden Sie diese Option pvc Befehl für Training im nächsten Schritt.

      kubectl get pvc | grep download-tusimple-data

      Die Ausgabe sollte wie im folgenden Beispiel aussehen:

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    1. Prüfen Sie DEN Job ausgeführt: KI-UI (oder app.run.ai).

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Führen Sie mithilfe von Horovod eine Schulung zur Erkennung verteilter Fahrspuren durch

Das Training zur Distributed Lane Detection mit Horovod ist ein optionaler Prozess. Hier sind jedoch die Schritte zu beachten:

  1. Erstellen und Drücken Sie das Docker-Bild, oder überspringen Sie diesen Schritt, wenn Sie das vorhandene Docker-Bild verwenden möchten (z. B. muneer7589/dist-lane-detection:3.1):

    1. Wechseln Sie zum Home Directory.

      cd ~
    2. Rufen Sie das Projektverzeichnis auf lane-detection-SCNN-horovod.

      cd ./lane-detection-SCNN-horovod
    3. Ändern Sie die build_image.sh Shell-Skript und ändern Docker-Repository zu Ihrem (z. B. Ersetzen muneer7589 Mit dem Namen des Docker-Repository). Sie können auch den Namen und DAS TAG des Dockers ändern (dist-lane-detection Und 3.1, for example).

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    4. Führen Sie das Skript aus, um das Docker-Image zu erstellen, und drücken Sie zum Docker-Repository.

      chmod +x build_image.sh
      ./build_image.sh
  2. RUN: AI Job zur Durchführung von Distributed Training (MPI):

    1. Verwendung von Run: AI zur automatischen Erstellung von PVC im vorherigen Schritt (zum Herunterladen von Daten) ermöglicht nur RWO-Zugriff, sodass nicht mehrere Pods oder Knoten zum verteilten Training auf dasselbe PVC zugreifen können. Aktualisieren Sie den Zugriffsmodus auf ReadWriteManche und verwenden Sie dazu den Kubernetes-Patch.

    2. Erhalten Sie zunächst den Volume-Namen des PVC durch Ausführen des folgenden Befehls:

      kubectl get pvc | grep download-tusimple-data

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    3. Patchen des Volume und Aktualisieren des Zugriffsmodus auf ReadWriteManche (ersetzen Sie den Datenträgernamen durch Ihren im folgenden Befehl):

      kubectl patch pv pvc-bb03b74d-2c17-40c4-a445-79f3de8d16d5 -p '{"spec":{"accessModes":["ReadWriteMany"]}}'
    4. Senden Sie DEN JOB RUN: AI MPI zur Ausführung des Jobs für verteilte Schulungen` mithilfe von Informationen aus der folgenden Tabelle:

      runai submit-mpi
      --name dist-lane-detection-training
      --large-shm
      --processes=3
      --gpu 1
      --pvc pvc-download-tusimple-data-0:/mnt
      --image muneer7589/dist-lane-detection:3.1
      -e USE_WORKERS="true"
      -e NUM_WORKERS=4
      -e BATCH_SIZE=33
      -e USE_VAL="false"
      -e VAL_BATCH_SIZE=99
      -e ENABLE_SNAPSHOT="true"
      -e PVC_NAME="pvc-download-tusimple-data-0"
      Feld Wert oder Beschreibung

      Name

      Name des Distributed Training Job

      Großer shm

      Ein großes /dev/shm-Gerät mounten Es ist ein auf RAM montiertes Shared-Dateisystem und bietet genügend gemeinsamen Speicher für mehrere CPU-Mitarbeiter, um Batches in CPU-RAM zu verarbeiten und zu laden.

      Prozessen

      Anzahl der verteilten Trainingsprozesse

      gpu

      Anzahl der GPUs/Prozesse, die für die Aufgabe in diesem Job zugewiesen werden sollen, es gibt drei GPU-Worker-Prozesse (--processes=3), die jeweils über eine einzelne GPU (--gpu 1) zugewiesen sind.

      pvc

      Verwenden Sie das vorhandene persistente Volume (pvc-download-tusimple-Data-0), das von einem vorherigen Job erstellt wurde (download-tusimple-Data), und es wird in Pfad /mnt bereitgestellt

      Bild

      Das Docker-Image sollte beim Erstellen des Containers für diesen Job verwendet werden

      Definieren Sie Umgebungsvariablen, die im Container festgelegt werden sollen

      VERWENDEN VON MITARBEITERN

      Wenn Sie das Argument auf true setzen, wird das Laden von mehreren Prozessdaten aktiviert

      NUM_WORKERS

      Anzahl der Data Loader Worker Prozesse

      BATCH_SIZE

      Batch-Größe für Training

      NUTZUNG_VAL

      Wenn Sie das Argument auf true setzen, kann die Validierung aktiviert werden

      VAL_BATCH_SIZE

      Batch-Größe der Validierung

      AKTIVIEREN_SNAPSHOT

      Wenn Sie das Argument auf true setzen, können Sie Daten und trainierte Modellschnappschüsse für ML-Versionierung erstellen

      PVC-NAME

      Name des pvc, von dem ein Snapshot erstellt werden soll. In der oben genannten Jobsendung erstellen Sie eine Momentaufnahme von pvc-Download-Tusimple-Data-0, bestehend aus Datensatz und trainierten Modellen

      Die Ausgabe sollte wie im folgenden Beispiel aussehen:

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    5. Geben Sie den eingereichten Job an.

      runai list jobs

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    6. Eingereichte Jobprotokolle:

      runai logs dist-lane-detection-training

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    7. Prüfen Sie den Trainingsjob IN AUSFÜHRUNG: AI GUI (oder app.runai.ai): RUN: AI Dashboard, wie in den Abbildungen unten zu sehen. Die erste Abbildung zeigt drei GPUs, die für den verteilten Trainingsjob auf drei Knoten auf AKS verteilt sind, und den zweiten DURCHLAUF:KI-Jobs:

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    8. Prüfen Sie nach Abschluss des Trainings die NetApp Snapshot Kopie, die erstellt wurde und mit RUN: KI-Job verknüpft ist.

      runai logs dist-lane-detection-training --tail 1

      Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

    kubectl get volumesnapshots | grep download-tusimple-data-0

Wiederherstellung von Daten aus der NetApp Snapshot Kopie

Um Daten aus der NetApp Snapshot Kopie wiederherzustellen, gehen Sie wie folgt vor:

  1. Wechseln Sie zum Home Directory.

    cd ~
  2. Rufen Sie das Projektverzeichnis auf lane-detection-SCNN-horovod.

    cd ./lane-detection-SCNN-horovod
  3. Ändern restore-snaphot-pvc.yaml Und Aktualisierung dataSource name Feld zur Snapshot Kopie, aus der Sie Daten wiederherstellen möchten. Sie können auch den PVC-Namen ändern, in dem die Daten wiederhergestellt werden, in diesem Beispiel ist restored-tusimple.

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

  4. Erstellen Sie mithilfe von ein neues PVC restore-snapshot-pvc.yaml.

    kubectl create -f restore-snapshot-pvc.yaml

    Die Ausgabe sollte wie im folgenden Beispiel aussehen:

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

  5. Wenn Sie die gerade wiederhergestellten Daten für die Schulung verwenden möchten, bleibt die Bewerbung gleich wie zuvor; ersetzen Sie nur die PVC_NAME Mit dem wiederhergestellten PVC_NAME Beim Einreichen des Schulungsjobs, wie in den folgenden Befehlen zu sehen:

    runai submit-mpi
    --name dist-lane-detection-training
    --large-shm
    --processes=3
    --gpu 1
    --pvc restored-tusimple:/mnt
    --image muneer7589/dist-lane-detection:3.1
    -e USE_WORKERS="true"
    -e NUM_WORKERS=4
    -e BATCH_SIZE=33
    -e USE_VAL="false"
    -e VAL_BATCH_SIZE=99
    -e ENABLE_SNAPSHOT="true"
    -e PVC_NAME="restored-tusimple"

Performance-Bewertung

Um die lineare Skalierbarkeit der Lösung zu zeigen, wurden Performance-Tests für zwei Szenarien durchgeführt: Eine GPU und drei GPUs. GPU-Zuweisung, GPU- und Arbeitsspeicherauslastung sowie verschiedene Single- und drei-Node-Metriken wurden während des Trainings im TuSimple Lane-Erkennungsdatensatz erfasst. Die Datenmenge wird um das fünf- fache erhöht, nur um die Ressourcenauslastung während der Trainingsprozesse zu analysieren.

Die Lösung ermöglicht es Kunden, mit einem kleinen Datensatz und einigen GPUs zu beginnen. Wenn die Datenmenge und der Bedarf der GPUs steigen, können Kunden die Terabyte im Standard-Tier dynamisch horizontal skalieren und schnell auf die Premium-Tier skalieren. So wird der vierfache Durchsatz pro Terabyte erzielt, ohne Daten zu verschieben. Dieser Prozess wird im Abschnitt weiter erläutert. "Azure NetApp Files Service-Level".

Die Verarbeitungszeit auf einer GPU betrug 12 Stunden und 45 Minuten. Die Verarbeitungszeit von drei GPUs auf drei Nodes betrug etwa 4 Stunden und 30 Minuten.

Die im verbleibenden Teil dieses Dokuments veranschaulichen Beispiele für Performance und Skalierbarkeit basierend auf den individuellen Geschäftsanforderungen.

Die Abbildung unten zeigt 1 GPU-Zuweisung und Arbeitsspeicherauslastung.

Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Die Abbildung unten zeigt die GPU-Auslastung mit einem Node.

Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Die Abbildung unten zeigt die Größe des Single-Node-Speichers (16 GB).

Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Die Abbildung unten zeigt die GPU-Anzahl einzelner Nodes (1).

Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Die Abbildung unten zeigt die GPU-Zuweisung eines einzelnen Node (%).

Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Die Abbildung unten zeigt drei GPUs in drei Nodes: GPU-Zuweisung und Arbeitsspeicher.

Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Die Abbildung unten zeigt drei GPUs für eine Auslastung von drei Nodes (%).

Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Die Abbildung unten zeigt drei GPUs über die Speicherauslastung mit drei Nodes (%).

Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Azure NetApp Files Service-Level

Sie können den Service-Level eines vorhandenen Volumes ändern, indem Sie das Volume in einen anderen Kapazitätspool verschieben, der den verwendet "Service-Level" Sie wollen für das Volume. Bei dieser bestehenden Service-Level-Änderung für das Volume müssen Sie keine Daten migrieren. Er hat auch keinen Einfluss auf den Zugriff auf das Volume.

Profitieren Sie von einer dynamischen Änderung des Service-Levels eines Volumes

Um den Service-Level eines Volumes zu ändern, gehen Sie wie folgt vor:

  1. Klicken Sie auf der Seite Volumes mit der rechten Maustaste auf das Volume, dessen Service-Level Sie ändern möchten. Wählen Sie Pool Ändern.

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

  2. Wählen Sie im Fenster Pool ändern den Kapazitätspool aus, in den Sie das Volume verschieben möchten. Klicken Sie anschließend auf OK.

    Die Abbildung zeigt den Input/Output-Dialog oder die Darstellung des schriftlichen Inhalts

Automatisieren Sie Service Level Change

Die dynamische Änderung des Service-Levels befindet sich derzeit noch in der öffentlichen Vorschau, ist aber standardmäßig nicht aktiviert. Um diese Funktion auf dem Azure-Abonnement zu aktivieren, folgen Sie diesen Schritten im Dokument “ "Profitieren Sie von einer dynamischen Änderung des Service-Levels eines Volumes".“

  • Für Azure können Sie auch die folgenden Befehle verwenden: CLI. Weitere Informationen zum Ändern der Pool-Größe von Azure NetApp Files finden Sie unter "az netappfiles-Volume: Managt Azure NetApp Files (ANF) Volume-Ressourcen".

    az netappfiles volume pool-change -g mygroup
    --account-name myaccname
    -pool-name mypoolname
    --name myvolname
    --new-pool-resource-id mynewresourceid
  • Der set- aznetappfilesvolumepool Cmdlet, das hier angezeigt wird, kann den Pool eines Azure NetApp Files Volume ändern. Weitere Informationen zum Ändern der Volume-Pool-Größe und Azure PowerShell finden Sie unter "Ändern Sie den Pool für ein Azure NetApp Files-Volume".

    Set-AzNetAppFilesVolumePool
    -ResourceGroupName "MyRG"
    -AccountName "MyAnfAccount"
    -PoolName "MyAnfPool"
    -Name "MyAnfVolume"
    -NewPoolResourceId 7d6e4069-6c78-6c61-7bf6-c60968e45fbf