Egyedi Python-plugin gyorsítja a DeepStream videóelemzését
A Python-alapú megoldás lehetővé teszi a fejlesztők számára, hogy egyedi inference-modelleket integráljanak a DeepStream-be anélkül, hogy a teljesítmény csökkenne.

Az NVIDIA DeepStream egy produktor-kész, hardveresen gyorsított videóelemzési folyamatot kínál, amely GStreamer-en keresztül kapcsolódik össze. Alapértelmezetten a TensorRT-re exportált detektormodellekhez a nvinfer elem kezeli a folyamatot. Azonban ez a megoldás korlátos lehet olyan esetekben, mint a vision-language modellek, egyedi utófeldolgozás, forgatott bounding boxok, vagy modellváltás futásidőben.
A cikk egy új megközelítést mutat be: egyedi GStreamer-plugin írása Pythonban, a pyservicemaker segítségével. Ez lehetővé teszi a fejlesztők számára, hogy a már meglévő, gondosan finomhangolt PyTorch inference-stackjukat használják, anélkül, hogy azt újra implementálnák konfigurációs fájlokban. A kulcsfontosságú felismerés, hogy a DeepStream későbbi elemei, mint a nvtracker, nvdsosd és nvmsgconv, nem igényelnek specifikus forrást a metaadatokhoz. Ha a metaadat-struktúrát helyesen írjuk meg, a többi elem úgy működik, mintha a nvinfer lett volna a képben.
Kapcsolódó: chatbot-tesztelés GPU-val
A DeepStream minden feldolgozott pufferéhez egy NvDsBatchMeta struktúra kapcsolódik. Ez a struktúra tartalmazza a kötegszintű (NvDsUserMeta), a streamszintű (NvDsFrameMeta) és az objektumszintű (NvDsObjectMeta) metaadatokat. A NvDsObjectMeta minden egyes detektált objektumot reprezentál. Fontos megérteni, hogy ezek a metaadatok nem a nvinfer tulajdonát képezik, hanem egy megosztott szerződést jelentenek. Bármely GStreamer elem olvashat belőle vagy írhat bele.
Kapcsolódó: CUDA fordítás Rustból
Egy fontos korlátozás, hogy a NvDsObjectMeta példányokat nem lehet közvetlenül Pythonból létrehozni. A DeepStream memóriapoolokat használ a hatékonyság érdekében, és ezeket a poolokat a C-oldal kezeli. A Python-kötések csak a poolokhoz biztosítanak hozzáférést, de nem engedélyezik az új példányok közvetlen létrehozását Pythonból. A helyes módszer a batch metaadatokból való lekérés: `batch_meta.acquire_object_meta()`. Az elem a keret befejezése után automatikusan visszakerül a poolba.
Kapcsolódó: GPU flottafelügyelet
A DeepStream metaadataihoz Pythonból a pyservicemaker SDK segítségével férhetünk hozzá. Ez az eszköz lehetővé teszi a `BatchMetadataOperator` alosztályozását, amely a `handle_metadata(batch_meta)` metóduson keresztül hozzáférést biztosít a teljes NvDsBatchMeta-hoz minden pufferhez. A `Buffer` wrapper pedig lehetővé teszi a keret GPU memóriájának elérését, ami nulla-másolásos inference-t tesz lehetővé.
Kapcsolódó: föderált tanulás egyszerűsítése
A cikk szerint a Python-alapú plugin megvalósítható anélkül, hogy áldoznánk a teljesítményből, bár ehhez nincsenek teljesítményteszt adatok. A downstream elemek nem foglalkoznak azzal, hogy melyik elem hozta létre a detektálási metaadatokat – ez az SDK dokumentációjának értelmezésén alapul. A fejlesztőknek a `GST_PLUGIN_PATH` környezeti változóban kell megadniuk a plugin könyvtárát, hogy a GStreamer felismerje az új, Python-alapú elemet.
Kapcsolódó: LLM-motor C++-ban