Übung: Packen einer NVIDIA DeepStream Graph Composer-Anwendung in eine containerisierte Workload
Sie haben gesehen, wie der NVIDIA DeepStream Graph Composer bei der Entwicklung von IVA-Anwendungen helfen kann. Nun zeigen wir, wie zusätzliche Tools helfen können, diese Anwendungen in Rechenzentrums- und Edgeumgebungen zu verteilen.
Die Containerisierung bietet auch bei der Entwicklung und beim Testen viele Vorteile. Beispiele:
- Konsistentes Verhalten, wenn Sie eine Workload auf homogener Hardware ausführen.
- Inkrementelle Updates aufgrund von Dateisystemebenen, durch die sich die Bereitstellungszeit möglicherweise reduzieren lässt.
- Klare Dokumentation von Abhängigkeiten aufgrund der selbstdokumentierenden Natur.
Zum Erreichen dieser Vorteile verwenden Sie das Container-Builder-Tool zum Verpacken des vorherigen Beispiels als Container.
Bevor Sie beginnen, müssen Sie ein Konto beim NVIDIA GPU-Containerdienst (NGC) einrichten. Dieser Dienst ist das offizielle Repository von NVIDIA für die Verteilung von Containern mit GPU-Beschleunigung. Ihre Workload benötigt Zugriff auf dieses Repository, um den DeepStream-Basiscontainer zu pullen, der von unserer Containerworkload verwendet wird. Informationen zum Erstellen eines Kontos oder zum Anmelden bei einem vorhandenen Konto finden Sie auf der NVIDIA NGC-Anmeldeseite.
Melden Sie sich an, oder erstellen Sie ein neues Konto, indem Sie zur NVIDIA NGC-Anmeldeseite wechseln. Nachdem Sie sich bei NVIDIA NGC angemeldet haben, wählen Sie in der oberen rechten Ecke Ihren Benutzernamen und dann Setup aus. Die folgenden Optionen werden angezeigt:
Wählen Sie API-Schlüssel abrufen aus. Wählen Sie auf dem dann angezeigten Bildschirm rechts oben API-Schlüssel generieren aus. Wählen Sie dann in der resultierenden Eingabeaufforderung Bestätigen aus.
Geben Sie die Anmeldeinformationen für die Docker-Runtime an, indem Sie die folgenden Befehle in einem Terminal auf dem Hostcomputer ausführen:
sudo docker login nvcr.io
Wenn Sie zur Eingabe des Benutzernamens aufgefordert werden, geben Sie $oauthtoken ein, genau wie dargestellt. Wenn Sie zur Eingabe des Kennworts aufgefordert werden, geben Sie den Wert Ihres generierten API-Schlüssels ein. Sie sollten die Meldung „Anmeldung erfolgreich“ empfangen.
Nachdem Sie nun Zugriff auf nvcr.io haben, können Sie mit dem Erstellen von Containern beginnen, die die über NVIDIA NGC bereitgestellten Basisimages verwenden. Das Container-Builder-Tool kann Images erstellen, wenn ihm eine Konfigurationsdatei übergeben wird. Sie verwenden eines der Beispiele aus dem Referenzdiagrammpaket.
Führen Sie die folgenden Befehle auf dem Hostcomputer aus, um den Container-Builder zum Verpacken der deepstream-test1-Anwendung aufzurufen:
cd /opt/nvidia/deepstream/deepstream-6.0/reference_graphs/deepstream-test1 sudo container_builder -c ds_test1_container_builder_dgpu.yaml -d /opt/nvidia/graph-composer/config/target_x86_64_cuda_11_4.yaml
Nach erfolgreichem Abschluss sollte die Ausgabe mit der Meldung „Successfully tagged deepstream_test1_dgpu:latest“ angezeigt werden.
Hinweis
Wenn beim Ausführen der vorstehenden Befehle der Fehler „docker.errors.DockerException“ angezeigt wird, kann dies darauf hindeuten, dass die Docker-Runtime nicht auf dem Hostcomputer installiert ist. Wenn Sie fortfahren möchten, lesen Sie die Anweisungen im Abschnitt „Installieren von NVIDIA DeepStream Graph Composer-Abhängigkeiten“ dieses Moduls zur Installation von Docker.
Hinweis
Wenn Sie die Meldung „docker.errors.BuildError: unauthorized: authentication required“ empfangen, weist dies darauf hin, dass Sie Ihr NVIDIA NGC-Konto möglicherweise nicht ordnungsgemäß für die Verwendung mit Docker authentifiziert haben.
Bevor Sie diese containerisierte Workload ausführen, müssen Sie Zugriff auf die X11-Anzeigeumgebung erteilen, wenn sie aufgrund der Workload aus einem Container ausgeführt wird, indem Sie eine Ausgabesenke vom Typ EGL (Typ = 2) verwenden.
Führen Sie die folgenden Befehle über ein Terminal auf dem Hostcomputer aus, um den Zugriff auf die X11-Dienste zu ermöglichen:
sudo xhost +
Vergewissern Sie sich, dass die Containerworkload erwartungsgemäß ausgeführt wird, indem Sie den folgenden Code in einem Terminal auf dem Hostcomputer ausführen:
sudo docker run -it --rm --gpus all -v /tmp/.X11-unix/:/tmp/.X11-unix/ -e DISPLAY=:0 deepstream_test1_dgpu
Mit diesem Befehl wird eine Instanz des Containerimages
deepstream_test1_dgpu
gestartet und der Zugriff auf alle verfügbare GPU-Hardware auf dem Computer ermöglicht, während zugleich Zugriff auf den X11-Socket und das aktuelleDISPLAY
erteilt wird. Die Ausgabe sollte der von der vorherigen Ausführung ähnlich sein, die mithilfe vonexecute_graph.sh
aufgerufen wurde.
Nun können Sie Ihre funktionierende Workload in Containern zur Verteilung in einer sicheren Containerregistrierung veröffentlichen.