Übung: Ausführen einer NVIDIA DeepStream Graph Composer-Referenzanwendung

Abgeschlossen

Werfen wir einen genaueren Blick auf den Workflow der IVA-Anwendung, der durch den DeepStream Graph Composer ermöglicht wird. Wir haben bereits erwähnt, dass das NVIDIA-Cloudrepository oder eine andere externe Registrierung Drag & Drop-Komponenten für die Verwendung in der DeepStream-Composer-Anwendung bereitstellen kann.

Mithilfe dieser Erweiterungen können Sie der Composer-Anwendung Features und Funktionen hinzufügen. Letztendlich können Sie dieses Tool verwenden, um IVA-Workloads mithilfe des gebündelten Containergenerators zu verpacken und zu verteilen. Im folgenden Diagramm wird der Prozess veranschaulicht.

Diagram that shows the NVIDIA DeepStream workflow revisited.

  1. Synchronisieren Sie zunächst mit dem öffentlichen Cloudrepository von NVIDIA, um die neuesten verfügbaren Erweiterungen zu nutzen. Führen Sie hierzu den folgenden Befehl in einem Terminal auf dem Hostcomputer aus:

    registry repo sync -n ngc-public
    

    Dieser Befehl erzeugt eine Ausgabe ähnlich der folgenden:

    2021-09-13 21:32:39,127 - Registry - INFO - Syncing repo ngc-public ...
    2021-09-13 21:32:41,022 - Registry - INFO - Syncing extension NvDsBaseExt version 0.0.1
    2021-09-13 21:32:45,833 - Registry - INFO - Syncing extension NvDsAnalyticsExt version 0.0.1
    2021-09-13 21:32:50,676 - Registry - INFO - Syncing extension NvDsCloudMsgExt version 0.0.1
    2021-09-13 21:32:55,743 - Registry - INFO - Syncing extension NvDsConverterExt version 0.0.1
    2021-09-13 21:33:00,579 - Registry - INFO - Syncing extension NvDsDewarperExt version 0.0.2
    2021-09-13 21:33:05,283 - Registry - INFO - Syncing extension NvDsDewarperExt version 0.0.1
    2021-09-13 21:33:10,300 - Registry - INFO - Syncing extension NvDsInferenceExt version 0.0.1
    2021-09-13 21:33:15,899 - Registry - INFO - Syncing extension NvDsInferenceUtilsExt version 0.0.2
    2021-09-13 21:33:20,574 - Registry - INFO - Syncing extension NvDsInferenceUtilsExt version 0.0.1
    2021-09-13 21:33:25,722 - Registry - INFO - Syncing extension NvDsInterfaceExt version 0.0.1
    2021-09-13 21:33:30,814 - Registry - INFO - Syncing extension NvDsMuxDemuxExt version 0.0.1
    Repository synced
    
  2. Überprüfen Sie mithilfe dieses Befehls, ob die Erweiterungen installiert und verfügbar sind:

    registry extn list
    

    Möglicherweise fällt Ihnen auf, dass viele dieser Erweiterungen mit Präfixen beginnen, die den von NVIDIA optimierten GStreamer-Plug-Ins im DeepStream SDK zugeordnet sind. Beispielsweise stellt die NvDsMuxDemuxExt-Erweiterung eine visuelle Komponente für die Interaktion mit Gst-nvstreamdemux zur Auswahl.

  3. Öffnen Sie nun die Composer-Anwendung mithilfe dieses Befehls:

    composer
    

    Screenshot that shows NVIDIA DeepStream Graph Composer opening.

    Beachten Sie, dass auf der rechten Seite der Benutzeroberfläche der Anwendung eine Liste mit Komponenten aufgefüllt wird. Die Komponenten werden nach dem Namen der Erweiterung gruppiert. Wenn keine Liste angezeigt wird, müssen Sie möglicherweise mithilfe der zuvor ausgeführten Schritte eine erneute Synchronisierung mit dem ncg-public-Repository vornehmen. Wählen Sie den Namen der Erweiterung aus, um die von ihr angebotenen Komponenten anzuzeigen, wie hier gezeigt:

    Screenshot that shows NVIDIA DeepStream Graph Composer components.

    Die folgenden Richtlinien helfen Ihnen zu verstehen, wie Sie mit der Composer-Anwendung interagieren, um benutzerdefinierte Anwendungen zu entwickeln:

    • Zum Hinzufügen einer neuen Komponenteninstanz wählen Sie den Namen einer Komponente aus, und halten Sie ihn gedrückt. Ziehen Sie ihn dann auf den Diagramm-Editor-Bereich.
    • Zum Anzeigen des Namens einer Komponente sehen Sie auf den Header im Diagrammbereich. Die Komponente kann außerdem Handles für Eingabe -/Ausgabeports enthalten.
    • Zum Verbinden von Komponenten miteinander wählen Sie ein Handle aus, und zeichnen Sie eine Verbindung zwischen kompatiblen Eingabe-/Ausgabeports.
    • Wählen Sie die Komponente aus, um Komponentendetails anzuzeigen. Details werden in einem Fenster Details auf der rechten Seite der Anwendung angezeigt. Sie können die Eigenschaften in diesem Fenster bearbeiten, um das Verhalten der Komponente anzupassen.
  4. Sehen wir uns eine Referenzanwendung an, um zu zeigen, was Sie erstellen können, indem Sie die oben genannten Richtlinien befolgen. Als Sie zuvor das DeepStream-Referenzdiagrammpaket installiert haben, wurden viele Beispiele im folgenden Pfad installiert:

    /opt/nvidia/deepstream/deepstream/reference_graphs/
    
    1. Wählen Sie in der Composer-Anwendung File>Open Graph (Datei > Diagramm öffnen) aus, und navigieren Sie zum Pfad /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1. Wählen Sie die Datei deepstream-test1.yaml aus. Wählen Sie anschließend Okay aus.

      Screenshot that shows NVIDIA DeepStream Graph Composer opening Test1 application.

    2. Wählen Sie die Komponente NvDsSingleSrcInput aus, und der Bereich Details wird auf der rechten Seite der Anwendung geöffnet. Scrollen Sie im Detailbereich nach unten, und beachten Sie die URI-Eigenschaft, in der wir die Videodatei festlegen, die in dieser IVA-Pipeline als Eingabe verwendet wird.

      Screenshot that shows NVIDIA DeepStream Graph Composer Test1 application properties.

    3. Wenn Sie die URI-Eigenschaft so ändern möchten, dass sie einen RTSP-Stream verwendet, legen Sie type (Typ) auf 4 fest. Geben Sie den RTSP-Pfad rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov an. Diese Aktion hat die gleiche Wirkung wie der hier gezeigte DeepStream [source0]-Konfigurationsgruppeneintrag:

      [source0]
      enable=1
      #Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
      type=4
      uri=rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov
      num-sources=1
      #drop-frame-interval=2
      gpu-id=0
      # (0): memtype_device   - Memory type Device
      # (1): memtype_pinned   - Memory type Host Pinned
      # (2): memtype_unified  - Memory type Unified
      cudadec-memtype=0
      
  5. Sehen Sie sich als Nächstes den Gesamtablauf der IVA-Pipeline an, der in diesem Beispiel dargestellt ist. Nachdem Sie die Gesamtworkflow und das erwartete Verhalten des Diagramms verstanden haben, richten Sie diese Workload für die Weiterverteilung und Ausführung als Containerworkload ein.

    Screenshot that shows NVIDIA DeepStream Graph Composer Test1 application full.

    Diese Anwendung nimmt mithilfe von NvDsSingleSrcInput eine Videoquelle als Eingabe an, die an NvDsStreamMux übergeben wird (technisch gesehen können mehrere Videoeingaben verarbeitet werden). Die Ausgabe von NvDsStreamMux stellt einen Frame aus jeder Videoeingabe zur Verfügung, der zur Verarbeitung an NvDsInferVideo gesendet wird. Der Rückschluss wird mithilfe einer ResNet 4-Klassenobjekterkennung angewendet, z. B. Fahrrad, Auto, Person oder Straßenschild. Die Rückschlussergebnisse von NvDsInferVideo werden sowohl an NvDsPerClassObjectCounting übergeben, um eine Anzahl für jede erkannte Klasse anzuzeigen, als auch an NvsOSD, wodurch die Erkennungen auf dem Bildschirm mit Begrenzungsfeldern generiert werden. Die Felder werden von der endgültigen Verbindung mit NvDsVideoRenderer angezeigt.

  6. Wenn Sie dieses Verhalten überprüfen und in Aktion sehen möchten, rufen Sie das enthaltene Skript execute_graph.sh auf, und übergeben Sie die erforderlichen Parameter in parameters.yaml. Zum Ausführen des Diagramms für deepstream-test1.yaml auf dem x86-basierten Host führen Sie die folgenden Befehle in einem Terminal aus:

    cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1
    /opt/nvidia/graph-composer/execute_graph.sh deepstream-test1.yaml parameters.yaml -d /opt/nvidia/graph-composer/config/target_x86_64_cuda_11_4.yaml
    

    Die Ausgabe sollte der hier dargestellten ähnlich sein:

    Screenshot that shows NVIDIA DeepStream Graph Composer Test1 running.

    Hinweis

    Wenn Sie beabsichtigen, einen virtuellen Computer zu verwenden, um die Anforderungen an den Hostcomputer zu erfüllen, können beim Ausführen einer DeepStream-Anwendung, die eine EGL-Senke für die visualisierte Ausgabe verwendet, Probleme auftreten. Zum Umgehen dieser Einschränkung ändern Sie den type (Typ) Ihrer URI-Quelle für FakeSink in 1. Beachten Sie, dass FakeSink keine visuelle Ausgabe bietet. Es ermöglicht die Ausführung Ihrer Workload, jedoch ohne eine zugehörige Anzeige der verarbeiteten Ergebnisse auf dem Bildschirm.