Google Coral TPU i TensorRT (Frigate + NVIDIA GPU/TensorRT)
Przetłumaczone automatycznie z angielskiego. Przeczytaj oryginał
To dwa główne rozwiązania pozwalające uruchamiać modele detekcji obiektów. Google Coral TPU to fizyczny moduł, który może mieć postać pendrive’a USB. TensorRT to funkcja środowiska uruchomieniowego GPU. Oba pozwalają uruchamiać na nich modele detekcji.

Coral TPU:

Oraz TensorRT:

Wymagania dotyczące Compute Capability #
Do uruchomienia DeepStack i TensorRT wymagane jest CC 5.0, ale do uruchomienia Ollama moondream:1.8b już 7.0. Nawet GPU z CC 5.0, czyli minimum wymaganym np. przez TensorRT, może nie wystarczyć ze względu na drobne różnice w implementacji. Lepiej uruchamiać na GPU z wyższym CC. Co więcej, CC 5.0 oznacza starsze GPU, co prowadzi do spadku wydajności już przy zaledwie 2 lub 3 strumieniach z kamer do analizy.
Uruchomienie (popularnych) modeli detekcji TensorRT wymaga niewiele pamięci VRAM, 300 – 500 MB, ale potrzeba dużej liczby rdzeni GPU i dodatkowych fizycznych komponentów w takim GPU, pracujących z wysokim taktowaniem. Innymi słowy, te modele zmieszczą się w starszych GPU, ale nie będą działać wydajnie.
Druga strona medalu to uruchomienie Ollamy, czyli GenAI wymagającego CC 7.0 lub wyższego. Ollama z moondream:1.8b, najmniejszym dostępnym modelem detekcji, i tak wymaga nieco ponad 3GB VRAM.
TensorRT na Geforce MX940 #
Detektor obiektów TensorRT z Frigate da się uruchomić na NVIDIA Geforce 940MX z CC 5.0, ale karta nagrzewa się w tym samym momencie, w którym go uruchomisz. Działało to na sterowniku 550 z CUDA 12.4 w następujący sposób, przy zaledwie jednym strumieniu RTSP z kamery:

Nie jest to więc dobra opcja, bo możemy szybko spalić GPU w tym laptopie. Konfiguracja dla TensorRT:
detectors:
tensorrt:
type: tensorrt
device: 0
model:
path: /config/model_cache/tensorrt/yolov7-320.trt
input_tensor: nchw
input_pixel_format: rgb
width: 320
height: 320Aby uruchomić kontener Docker, musisz przekazać zmienną środowiskową YOLO_MODELS:
docker run -d \
--name frigate \
--restart=unless-stopped \
--stop-timeout 30 \
--mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
--shm-size=1024m \
--device /dev/bus/usb:/dev/bus/usb \
--device /dev/dri/renderD128 \
-v ./frigate-media:/media/frigate \
-v ./frigate-config:/config \
-v /etc/localtime:/etc/localtime:ro \
-e FRIGATE_RTSP_PASSWORD='password' \
-e YOLO_MODELS=yolov7x-640 \
-p 8971:8971 \
-p 8554:8554 \
-p 8555:8555/tcp \
-p 8555:8555/udp \
--gpus all \
ghcr.io/blakeblackshear/frigate:stable-tensorrtZwróć uwagę, że obraz Docker jest inny, jeśli chcesz używać GPU z TensorRT, niż bez niego. Na 940MX nie da się też uruchomić sprzętowo akcelerowanego dekodera FFMPEG, więc wyłącz go, przekazując pustą tablicę:
cameras:
myname:
enabled: true
ffmpeg:
inputs:
- path: rtsp://user:pass@addr:port/main
roles:
- detect
- record
hwaccel_args: []Jeśli jednak chcesz wypróbować dekoder sprzętowy z innym GPU lub CPU, poeksperymentuj z tymi wartościami:
preset-vaapi
present-nvidiaTensorRT na „nowoczesnym” GPU #
Najlepiej uruchamiać TensorRT na nowoczesnym GPU z jak najwyższym zestawem funkcji CC. Detekcja będzie działać szybko, a karta nie będzie się tak szybko nagrzewać. Co więcej, będzie miała sprzętowe wsparcie dekodowania wideo. A do tego na tej samej maszynie można uruchomić GenAI.

Minimum dla detekcji obiektów z opisami GenAI to więc 4 GB VRAM. W moim przypadku jest to NVIDIA RTX 3050 Ti Mobile, obciążona maksymalnie w 25% przy 4 – 5 strumieniach z kamer.
Moduł USB Google Coral TPU #
Aby uruchomić detektor Coral:
detectors:
coral:
type: edgetpu
device: usbNajpierw jednak musisz go zainstalować i skonfigurować:
sudo apt install python3-pip python3-dev python3-venv libusb-1.0-0
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt update
sudo apt install libedgetpu1-stdMożesz też uruchomić TPU w trybie wysokiej mocy:
sudo apt install libedgetpu1-maxNa koniec skonfiguruj USB:
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1a6e", GROUP="plugdev", MODE="0666"' | sudo tee /etc/udev/rules.d/99-edgetpu-accelerator.rules
sudo udevadm control --reload-rules && sudo udevadm triggerPamiętaj, aby podłączać Coral przez USB 3.0, bo przez USB 2.0 wydajność spadnie dwu-, a nawet trzykrotnie. Druga rzecz: aby uruchomić Coral, najpierw go podłącz. Poczekaj, aż zostanie rozpoznany przez system:
lsusbNa początku nie zobaczysz Google, tylko 1a6e Global Unichip. Po zainicjowaniu TPU zobaczysz 1da1 Google Inc:

Coral TPU można przekazać przez urządzenie USB w Proxmoxie, ale po każdym restarcie Proxmoxa trzeba zadbać o inicjalizację TPU:
