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:

YAML
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: 320

Aby uruchomić kontener Docker, musisz przekazać zmienną środowiskową YOLO_MODELS:

Bash
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-tensorrt

Zwróć 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ę:

YAML
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:

Text
preset-vaapi
present-nvidia

TensorRT 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:

YAML
detectors:
  coral:
    type: edgetpu
    device: usb

Najpierw jednak musisz go zainstalować i skonfigurować:

Bash
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-std

Możesz też uruchomić TPU w trybie wysokiej mocy:

Bash
sudo apt install libedgetpu1-max

Na koniec skonfiguruj USB:

Bash
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 trigger

Pamię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:

Text
lsusb

Na 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:

Wersja Markdown

Wszystkie treści na tej stronie są udostępniane na licencji Uznanie autorstwa – Użycie niekomercyjne – Bez utworów zależnych 4.0 Międzynarodowe (CC BY-NC-ND 4.0). Cytuj jako: Michał Sobczak, „Google Coral TPU i TensorRT (Frigate + NVIDIA GPU/TensorRT)”, 26 lutego 2025, https://michalasobczak.pl/pl/posts/google-coral-tpu-and-tensorrt.html