Ćwiczenie — uruchamianie aplikacji referencyjnej narzędzia NVIDIA DeepStream Graph Composer

Ukończone

Przyjrzyjmy się bliżej przepływowi pracy aplikacji IVA, który jest włączony przez program DeepStream Graph Composer. Wspomnieliśmy wcześniej, że repozytorium w chmurze firmy NVIDIA lub inny rejestr zewnętrzny może zapewnić składniki przeciągania i upuszczania do użycia w aplikacji DeepStream Composer.

Za pomocą tych rozszerzeń można dodawać funkcje i funkcje do aplikacji Composer. Ostatecznie możesz użyć tego narzędzia do spakowania i dystrybuowania obciążeń IVA przy użyciu dołączonego konstruktora kontenerów. Na poniższym diagramie przedstawiono ten proces.

Diagram that shows the NVIDIA DeepStream workflow revisited.

  1. Aby rozpocząć, zsynchronizuj z publicznym repozytorium chmury firmy NVIDIA, aby udostępnić najnowsze dostępne rozszerzenia. Aby wykonać ten proces, uruchom następujące polecenie w terminalu na maszynie hosta:

    registry repo sync -n ngc-public
    

    To polecenie generuje dane wyjściowe podobne do następujących danych wyjściowych:

    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. Sprawdź, czy rozszerzenia są zainstalowane i dostępne przy użyciu tego polecenia:

    registry extn list
    

    Można zauważyć, że wiele z tych rozszerzeń zaczyna się od prefiksów mapowanych na wtyczkę GStreamer zoptymalizowaną pod kątem firmy NVIDIA zawartą w zestawie SDK deepstream. Na przykład rozszerzenie NvDsMuxDemuxExt udostępnia składnik wizualny do interakcji z usługą Gst-nvstreamdemux.

  3. Teraz otwórz aplikację Composer przy użyciu tego polecenia:

    composer
    

    Screenshot that shows NVIDIA DeepStream Graph Composer opening.

    Zwróć uwagę, że lista składników jest wypełniana po prawej stronie interfejsu użytkownika aplikacji. Składniki są pogrupowane według nazwy rozszerzenia. Jeśli lista nie zostanie wyświetlona, może być konieczne ponowne zsynchronizowanie z repozytorium ncg-public przy użyciu kroków wykonanych wcześniej. Wybierz nazwę rozszerzenia, aby wyświetlić podane składniki, jak pokazano poniżej:

    Screenshot that shows NVIDIA DeepStream Graph Composer components.

    Poniższe wskazówki ułatwiają zrozumienie sposobu interakcji z aplikacją Composer w celu tworzenia niestandardowych aplikacji:

    • Aby dodać nowe wystąpienie składnika, wybierz i przytrzymaj nazwę składnika. Następnie przeciągnij go do obszaru edytora grafów.
    • Aby wyświetlić nazwę składnika, przyjrzyj się nagłówkowi w obszarze grafu. Składnik może również zawierać dojścia dla portów wejściowych/wyjściowych.
    • Aby połączyć składniki ze sobą, wybierz uchwyt i narysuj połączenie między zgodnymi portami wejściowymi/wyjściowymi.
    • Aby wyświetlić szczegóły składnika, wybierz składnik. Szczegóły są wyświetlane w oknie Szczegóły po prawej stronie aplikacji. Właściwości w tym oknie można edytować, aby dostosować zachowanie składnika.
  4. Przyjrzyjmy się aplikacji referencyjnej, aby pokazać, co można utworzyć, postępując zgodnie z poprzednimi wytycznymi. Wcześniej po zainstalowaniu pakietu grafów odwołań DeepStream wiele przykładów zostało zainstalowanych w następującej ścieżce:

    /opt/nvidia/deepstream/deepstream/reference_graphs/
    
    1. W aplikacji Composer wybierz pozycję Plik>Otwórz graf i przejdź do ścieżki /opt/nvidia/deepstream/reference_graphs/deepstream-test1. Wybierz plik deepstream-test1.yaml. Następnie wybierz pozycję Ok.

      Screenshot that shows NVIDIA DeepStream Graph Composer opening Test1 application.

    2. Wybierz składnik NvDsSingleSrcInput, a okienko Szczegóły zostanie otwarte po prawej stronie aplikacji. Przewiń w dół w okienku Szczegóły i zwróć uwagę na właściwość identyfikatora URI , w której ustawimy plik wideo, który będzie używany jako dane wejściowe w tym potoku IVA.

      Screenshot that shows NVIDIA DeepStream Graph Composer Test1 application properties.

    3. Jeśli chcesz zmodyfikować właściwość URI , aby używać strumienia RTSP, ustaw typ równy 4. Podaj rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov ścieżki RTSP. Ta akcja ma taki sam efekt jak wpis grupy konfiguracji DeepStream [source0] pokazany tutaj:

      [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. Następnie przyjrzyj się ogólnej przepływowi potoku IVA przedstawionego w tym przykładzie. Po zapoznaniu się z ogólnym przepływem pracy i oczekiwanym zachowaniem grafu utworzysz to obciążenie jako konteneryzowane obciążenie na potrzeby redystrybucji i wykonywania.

    Screenshot that shows NVIDIA DeepStream Graph Composer Test1 application full.

    Ta aplikacja przyjmuje źródło wideo jako dane wejściowe przy użyciu metody NvDsSingleSrcInput, która jest przekazywana NvDsStreamMux (co może technicznie przetwarzać wiele danych wejściowych wideo). Dane wyjściowe elementu NvDsStreamMux udostępnia ramkę z każdego wejścia wideo, które są wysyłane do przetwarzania w programie NvDsInferVideo. Wnioskowanie jest stosowane za pomocą detektora obiektów klasy ResNet 4, takiego jak rower, samochód, osoba lub znak drogowy. Wyniki NvDsInferVideo wnioskowania są przekazywane do obu NvDsPerClassObjectCounting, aby wyświetlić liczbę dla każdej wykrytej klasy i NvsOSD, która generuje wykrycia na ekranie z polami ograniczenia. Pola są wyświetlane przez końcowe połączenie z NvDsVideoRenderer.

  6. Aby zweryfikować to zachowanie i zobaczyć je w akcji, wywołaj dołączony execute_graph.sh skrypt i przekaż niezbędne parametry w pliku parameters.yaml. Aby wykonać graf dla pliku deepstream-test1.yaml na hoście opartym na x86, uruchom następujące polecenia w terminalu:

    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
    

    Powinny zostać wyświetlone dane wyjściowe podobne do pokazanych tutaj:

    Screenshot that shows NVIDIA DeepStream Graph Composer Test1 running.

    Uwaga

    Jeśli zamierzasz użyć maszyny wirtualnej do spełnienia wymagań dotyczących maszyny hosta, mogą wystąpić problemy podczas próby uruchomienia aplikacji DeepStream, która używa ujścia EGL do wizualizowania danych wyjściowych. Aby obejść to ograniczenie, zmień typ źródła identyfikatora URI na 1 dla aplikacji FakeSink. Należy pamiętać, że usługa FakeSink nie zapewni żadnych danych wyjściowych wizualizacji. Umożliwia wykonywanie obciążenia, ale bez skojarzonego na ekranie wyświetlania przetworzonych wyników.