Ćwiczenie — uruchamianie aplikacji referencyjnej narzędzia NVIDIA DeepStream Graph Composer
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.
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
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.
Teraz otwórz aplikację Composer przy użyciu tego polecenia:
composer
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:
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.
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/
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.
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.
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
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.
Ta aplikacja przyjmuje źródło wideo jako dane wejściowe przy użyciu metody
NvDsSingleSrcInput
, która jest przekazywanaNvDsStreamMux
(co może technicznie przetwarzać wiele danych wejściowych wideo). Dane wyjściowe elementuNvDsStreamMux
udostępnia ramkę z każdego wejścia wideo, które są wysyłane do przetwarzania w programieNvDsInferVideo
. Wnioskowanie jest stosowane za pomocą detektora obiektów klasy ResNet 4, takiego jak rower, samochód, osoba lub znak drogowy. WynikiNvDsInferVideo
wnioskowania są przekazywane do obuNvDsPerClassObjectCounting
, aby wyświetlić liczbę dla każdej wykrytej klasy iNvsOSD
, która generuje wykrycia na ekranie z polami ograniczenia. Pola są wyświetlane przez końcowe połączenie zNvDsVideoRenderer
.Aby zweryfikować to zachowanie i zobaczyć je w akcji, wywołaj dołączony
execute_graph.sh
skrypt i przekaż niezbędne parametry w plikuparameters.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:
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.