🧪 Stanno arrivando nuovi tutorial — dal braccio robotico al sensore
Vai al contenuto

Introduzione al deploy AI edge

Per sviluppatori che portano un modello «addestrato» su un dispositivo edge. Con la piattaforma NVIDIA Jetson come esempio.

1. Perché il deploy edge?

ConfrontoInferenza cloudInferenza edge
Latenzaandata/ritorno rete 50-500 mslocale <10 ms
Privacydati nel cloudi dati non escono dal dispositivo
Costospese GPU continuehardware una tantum
Offlineinutilizzabile senza retecompletamente offline

Per robotica (controllo in tempo reale), ispezione industriale (linea sensibile alla latenza) e scenari sensibili (medico/sicurezza), il deploy edge è indispensabile.

2. Panoramica dei percorsi di deploy

Modello PyTorch
   │  torch.onnx.export

Modello ONNX ──► Engine TensorRT ──► Applicazione di inferenza
   │              │
   └──► TorchScript (JIT) ──► Applicazione di inferenza (percorso semplice)
PercorsoAccelerazione (vs PyTorch nativo)Uso
TorchScript~1,5-2xdeploy rapido, poche modifiche
ONNX Runtime~2-4xmultipiattaforma, buon ecosistema
TensorRT5-10xprestazioni prima, ottimale su Jetson/edge

3. Avvio rapido: PyTorch → TensorRT

3.1 Esportare ONNX

python
import torch
# Caricamento sicuro: weights_only=True consente solo tensori/strutture semplici, previene attacchi di deserializzazione
model = torch.load('model.pt', map_location='cuda', weights_only=True)
model.eval()
dummy = torch.randn(1, 3, 224, 224).cuda()
torch.onnx.export(
    model, dummy, 'model.onnx',
    input_names=['input'], output_names=['output'],
    opset_version=17,
)

3.2 ONNX → Engine TensorRT

bash
# Conversione in engine con trtexec (eseguire sulla scheda Jetson)
trtexec --onnx=model.onnx \
        --saveEngine=model.engine \
        --fp16 \
        --workspace=2048

3.3 Inferenza Python

python
import tensorrt as trt
import pycuda.driver as cuda
import pycuda.autoinit
# Caricare l'engine
with open('model.engine', 'rb') as f:
    engine = trt.Runtime(trt.Logger()).deserialize_cuda_engine(f.read())
context = engine.create_execution_context()
# (Codice di inferenza completo: allocare buffer input/output, eseguire execute_v2)

4. Checklist prestazioni

  • [ ] Usare --fp16 (mezza precisione) invece di fp32 – grande accelerazione su Jetson
  • [ ] Ridurre la risoluzione di input al minimo accettabile
  • [ ] Misurare il framerate reale con trtexec
  • [ ] Elaborazione a batch (batch=1 di solito ottimale in robotica)
  • [ ] Verificare la modalità di potenza (sudo nvpmodel -m 0 piena potenza)

5. Domande frequenti

D: TensorRT segnala Unsupported layer? Il modello contiene operatori non supportati (flussi di controllo dinamici, ecc.). Rimedi: versione TensorRT più recente, strumento di semplificazione ONNX (onnx-simplifier), opset più basso.

D: La precisione fp16 risente? Quasi nessuna perdita per la maggior parte dei modelli CV; per detection/segmentazione conviene confrontare la mAP in pratica.

D: Memoria insufficiente (workspace)? Ridurre il workspace dell'engine o la risoluzione di input; la versione Orin 16 GB è più comoda.

D: Perché TensorRT è ancora lento? Verificare che si usi davvero la GPU (nvidia-smi); assicurarsi che non ci siano copie ripetute tra GPU e CPU.


Supporto tecnico