Model osiągający najwyższą dokładność na zestawie testowym nie kwalifikuje się automatycznie do wdrożenia polowego. Modele badawcze trenowane są na klastrach GPU z obfitą pamięcią i mocą obliczeniową. Wdrożone modele muszą działać na sprzęcie brzegowym z rygorystycznymi budżetami mocy, ograniczoną pamięcią i wymaganiami dotyczącymi opóźnień w czasie rzeczywistym. ONNX i TensorRT są dwiema kluczowymi technologiami w potoku optymalizacji modeli dla wdrożenia Jetson.

Przepaść między treningiem a wnioskowaniem

Uruchomienie modelu badawczego w PyTorch na Jetson Orin NX bez optymalizacji daje wnioskowanie przy ~8–15 kl./s dla modelu detekcji średniej złożoności — znacznie poniżej docelowych 30 kl./s. Trzy źródła tej przepaści: narzut pamięci (stan optymalizatora, bufory gradientów), narzut obliczeniowy (dynamiczne grafy) i niedopasowanie precyzji (FP32 vs INT8).

ONNX jako universal interchange: eksport z PyTorch

Funkcja `torch.onnx.export` śledzi graf obliczeń modelu, uruchamiając go z przykładowymi tensorami wejściowymi. Kluczowe parametry: opset_version (używaj opset 16 lub 17 dla maksymalnego pokrycia z TensorRT); dynamic_axes (wymiar wsadu powinien być dynamiczny). Częste pułapki: głowica NMS detekcji YOLOv8 jest najczęstszym obszarem problemowym — zawsze waliduj wyeksportowany model ONNX przed kompilacją TensorRT.

Kompilacja TensorRT: kalibracja INT8, fuzja warstw, automatyczne dostrajanie jądra

TensorRT przyjmuje model ONNX jako wejście i produkuje plik silnika zoptymalizowany dla konkretnej architektury GPU. Kompilacja obejmuje: (1) parsowanie sieci; (2) przebiegi optymalizacji — fuzja warstw, optymalizacja układu tensorów; (3) kalibrację precisji — dla INT8 TensorRT uruchamia procedurę kalibracji na 500–1 000 reprezentatywnych obrazów. Krok automatycznego dostrajania jądra trwa 30–90 minut, ale wykonuje się tylko raz. Pliki silnika są specyficzne dla architektury GPU — silnik skompilowany na Orin NX nie zadziała poprawnie na AGX Orin.

Opóźnienie vs przepustowość: rozmiar wsadu 1 dla wnioskowania w czasie rzeczywistym

Przy rozmiarze wsadu 1, YOLOv8-medium INT8 na Jetson AGX Orin działa przy ~1,8 ms opóźnienia. Dla systemu czterokamerowego przy 30 kl./s, rozmiar wsadu 4 umożliwia jednoczesne przetwarzanie jednej klatki z każdego strumienia kamery w ~5 ms.

Kluczowa obserwacja: Pliki silnika TensorRT nie są przenośne między architekturami GPU. Buduj potok optymalizacji do kompilacji silników na docelowej klasie urządzeń zgodnie z wymaganiami MON dla konkretnego systemu uzbrojenia.

Wersjonowanie modeli i potok aktualizacji dla urządzeń polowych

Przepływ aktualizacji: nowy model trenowany centralnie → eksportowany do ONNX → ONNX przesyłany na urządzenie przez bezpieczny kanał → kompilacja TensorRT na urządzeniu → skompilowany silnik aktywowany → stary silnik archiwizowany dla przywracania. Każde wydanie modelu ONNX powinno zawierać identyfikator wersji semantycznej, skrót SHA-256 i podpis kryptograficzny.