Il Jetson Nano Developer Kit annunciato oggi al GTC 2019 espone lo stesso nvcc, le stesse cuDNN e TensorRT che girano su una Tesla da datacenter, dentro un modulo da 5-10 W che costa 99 dollari (NVIDIA Developer Blog). Per chi progetta sistemi quello che conta non è il prezzo. È la continuità dello stack di compilazione fra l’hardware su cui si addestra una rete e quello su cui la rete gira al bordo.

Contesto

La famiglia Jetson esiste dal 2014: prima il TK1, poi TX1 e TX2, fino allo Xavier mostrato nel 2018. Erano moduli da 200 a oltre 600 dollari, pensati per la robotica e i prodotti industriali. La fascia d’ingresso del computing embedded era invece terreno di schede general purpose — Raspberry Pi 3, le varie board ARM — dove una rete convoluzionale gira in inferenza sulla CPU, con latenze che rendono impraticabile l’elaborazione video in tempo reale.

Il Jetson Nano si colloca sotto al TX1 nella gerarchia e ne riusa buona parte del SoC. La continuità con il resto della linea è dichiarata: lo stesso JetPack (versione 4.2 al lancio, su base Ubuntu 18.04) scrive l’immagine su Nano, TX2 e Xavier (NVIDIA Developer Blog).

Architettura

Le specifiche dichiarate al lancio:

  • GPU: 128 core CUDA Maxwell a 921 MHz, 472 GFLOPS in FP16
  • CPU: quad-core ARM Cortex-A57 a 1.43 GHz
  • RAM: 4 GB LPDDR4 a 1600 MHz, 25.6 GB/s di banda
  • Quattro porte USB 3.0, Gigabit Ethernet, HDMI e DisplayPort
  • Header GPIO a 40 pin con piedinatura compatibile Raspberry Pi (3× I2C, 2× SPI, UART, I2S)
  • Due connettori MIPI CSI-2 a 15 pin per le camere
  • Encode hardware fino a 4Kp30, decode fino a 4Kp60
  • Alimentazione 5 V, modalità a 5 W e 10 W

I 128 core Maxwell sono la stessa microarchitettura delle GeForce 900 del 2014-2015. Qui sta il punto: un kernel CUDA compilato per sm_53 (la compute capability del Tegra X1) usa lo stesso modello di esecuzione — warp, shared memory, registri per blocco — di una qualsiasi Maxwell discreta. La differenza è quantitativa — 128 core contro le migliaia di una GPU desktop — non qualitativa.

Lo stack software al lancio comprende CUDA Toolkit 10.0, cuDNN 7.3 e TensorRT 5, più OpenCV e ROS nell’immagine JetPack (NVIDIA Developer Blog). I framework di training utilizzabili per l’inferenza vanno da TensorFlow e PyTorch a Caffe, Keras e MXNet.

Il punto critico

Il valore pratico sta nella catena training-deployment senza riscrivere il kernel di calcolo. Un modello addestrato su una GPU desktop produce pesi che TensorRT ottimizza per il target Nano: fonde i layer, sceglie i kernel per la sm_53, quantizza da FP32 a FP16. La GPU Maxwell del Tegra X1 esegue l’FP16 a frequenza doppia, e su questo hardware diventa la precisione di riferimento per l’inferenza.

Non c’è compatibilità binaria già pronta: il modello va comunque passato per TensorRT, oppure caricato dal framework e ricompilato per il target. La compatibilità è a livello di stack — le stesse API, lo stesso compilatore, lo stesso modello di memoria che si usa sul server. Chi ha già una pipeline CUDA non deve adottare un runtime separato per portare l’inferenza al bordo, come succederebbe spostandosi su un acceleratore con toolchain proprietaria.

Da qui nascono i due vincoli reali del Nano. Il primo è la memoria: i 4 GB di LPDDR4 sono condivisi fra CPU e GPU. Una rete come ResNet-50 in FP16 sta larga nel budget, ma i modelli di detection più grandi, o più reti in parallelo, costringono a profilare l’occupazione e spesso ad abbassare la risoluzione d’ingresso. Il secondo è la banda: 25.6 GB/s stanno un ordine di grandezza sotto la banda di una GPU desktop, quindi i layer legati alla memoria — pooling, normalizzazioni, attivazioni elemento per elemento — non scalano come quelli legati al calcolo.

Implicazioni

Per i carichi di computer vision al bordo il Nano sposta l’equilibrio fra elaborazione locale e invio al cloud. Una camera IP che oggi spedisce lo stream a un server per la detection può far girare la stessa rete in locale e mandare solo gli eventi. Cala la banda di rete, cala la latenza, cala l’esposizione del dato grezzo — e quest’ultima conta quando lo stream contiene volti o targhe e si preferisce non trasmetterli.

Il prezzo a 99 dollari sposta anche dove conviene prototipare. Una tesi di laurea, un proof-of-concept industriale, un esperimento di robotica con ROS girano su hardware vero invece che su un emulatore o su tempo GPU affittato. Visto che lo stack è lo stesso, il codice che gira sul Nano del prototipo girerà su uno Xavier in produzione, salvo riprofilare le prestazioni.

Conviene distinguere il marketing tecnico dalla realtà operativa. I 472 GFLOPS dichiarati sono un picco teorico in FP16. Il throughput vero su una rete reale dipende dall’efficienza dei kernel, dall’occupazione della memoria e dalla modalità di alimentazione: a 5 W la frequenza della GPU scende sotto i 921 MHz nominali, e i numeri di frame al secondo pubblicati danno per scontata la modalità a 10 W con l’ottimizzazione TensorRT applicata.

Limiti

Il Nano non è una piattaforma di training: 128 core e 4 GB bastano per il fine-tuning di reti piccole, non per addestrare da zero modelli di dimensione realistica. Maxwell, poi, è una microarchitettura del 2014: le manca il Tensor Core arrivato con Volta nel 2017, quindi l’accelerazione INT8 e le operazioni a precisione mista dedicate degli acceleratori più recenti non ci sono. La camera richiede sensori compatibili MIPI CSI-2, altrimenti si passa per USB, e il Wi-Fi non è integrato — va aggiunto un modulo M.2.

Resta il fatto verificabile a oggi: la stessa toolchain CUDA che compila per un datacenter compila per un modulo da 5 watt, e questo è il primo punto della linea Jetson in cui quella toolchain costa meno di una scheda grafica entry-level.


https://developer.nvidia.com/blog/jetson-nano-ai-computing/ https://developer.nvidia.com/embedded/jetson-nano https://www.cnx-software.com/2019/03/19/nvidia-jetson-nano-developer-kit/ https://www.noze.it/insights/nvidia-jetson-nano/

Immagine di copertina: Scheda di sviluppo NVIDIA Jetson Nano vista dall’alto: PCB con dissipatore nero ad alette al centro, header GPIO a 40 pin, porte USB,… — foto di SparkFun Electronics, CC BY 2.0 — https://commons.wikimedia.org/wiki/File:NVIDIA_Jetson_Nano_Developer_Kit_(47616885631)_(cropped).jpg