
La tua macchina robotica non ha una GPU. Posiziona il server di policy GR00T su una GPU cloud noleggiata, trasmetti i chunk di azioni al braccio e scopri esattamente quanto ti costa la rete.
Un Raspberry Pi è sufficiente per pilotare un tramite un bus seriale e acquisire frame da due telecamere USB. Non è sufficiente per eseguire un modello con tre miliardi di parametri: il README di NVIDIA indica l'inferenza di GR00T N1.7 su una GPU con 16 GB o più di VRAM. Per vedere cosa fa il tuo checkpoint ottimizzato sul braccio senza acquistare una scheda, metti la policy su una GPU cloud noleggiata, mantieni il loop del robot sulla macchina con le porte USB e invia osservazioni e blocchi di azioni sulla rete.
Funziona, non è gratuito e il costo non è distribuito uniformemente tra i compiti. Di seguito: il server di policy di NVIDIA, lo stack asincrono di lerobot, l'aritmetica che indica in anticipo se il tuo uplink è abbastanza veloce e il percorso della piattaforma. Tutto verificato rispetto al branch principale di Isaac-GR00T (N1.7 GA) e lerobot 0.6.1 il 23 agosto 2026.
Cosa devi sapere
- •GR00T N1.7, GR00T N1.5 e Pi0.5 sono modelli con circa 3 miliardi di parametri. Nessuno di essi si adatta a un controller robotico senza una GPU discreta.
- •Isaac-GR00T e lerobot offrono entrambi una separazione client-server. Non scrivi tu il trasporto.
- •Le osservazioni dominano il costo di trasmissione, non le azioni: due frame RGB non compressi da 640x480 sono 1.843.200 byte, circa 14.7 Mbit per chiamata, e nessuno dei due stack li comprime.
- •AY-Robots elenca da 20 a 485 ms per passo d'azione per modello. I round trip di Internet si aggiungono a questo.
- •L'inferenza remota è adatta per operazioni lente di pick-and-place, non per movimenti reattivi veloci. Un orizzonte di esecuzione più lungo guadagna tempo e costa in termini di freschezza delle osservazioni.
- •Nessuno dei due server è sicuro su un IP pubblico così come fornito, e quello di lerobot presenta una RCE non patchata. Effettua il tunneling.
Perché la policy non si adatterà alla macchina del robot
Due delle cinque policy che AY-Robots può addestrare funzionano su una scheda workstation, tre no. La la colonna sottostante è per passo d'azione, ed è il numero che compete con il tempo di andata e ritorno della tua rete.
| Policy | Parametri | Inferenza per passo d'azione | Livello GPU per l'addestramento | Episodi minimi | Formato del dataset |
|---|---|---|---|---|---|
| GR00T N1.7 | ~3 B, ~40 M trained during fine-tuning | 152 ms | A100 80 GB or H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | ~3 B | 165 ms | A100 80 GB or H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | ~3 B, PaliGemma backbone | 485 ms | A100 80 GB or H100 80 GB | 50 | LeRobot v3.0 |
| SmolVLA | ~450 M | 245 ms | RTX 4090 or any 24 GB card | 30 | LeRobot v3.0 |
| ACT | ~80 M | 20 ms | RTX 4090 or any 24 GB card | 50 | LeRobot v3.0 |

Leggilo come una decisione, non come una curiosità. a 20 ms per passo, funziona sulla macchina del robot e non ci pensi più. a 485 ms ha impiegato un terzo di secondo prima che un pacchetto lasci il tuo edificio. Il e aggiungono il lato della precisione.
GR00T N1.7, GR00T N1.5 e Pi0.5 partono da un checkpoint del fornitore (nvidia/GR00T-N1.7-3B, nvidia/GR00T-N1.5-3B, lerobot/pi05_base). ACT non esiste finché non lo addestri sul tuo compito, quindi non c'è nulla da servire in remoto finché un lavoro di addestramento non è stato eseguito. Vedi ACT su SO-100.
I due stack client-server già esistenti
Isaac-GR00T fornisce un server request-reply ZeroMQ; lerobot fornisce un server gRPC costruito attorno all'inferenza asincrona. Entrambi accettano un GR00T checkpoint. L'elenco delle policy supportate da lerobot in async_inference/constants.py è act, smolvla, diffusion, tdmpc, vqbet, pi0, pi05 e groot; il suo elenco di robot è so100_follower, so101_follower, bi_so_follower e omx_follower.
| Isaac-GR00T PolicyServer | lerobot async inference | |
|---|---|---|
| Punto di ingresso | gr00t/eval/run_gr00t_server.py | python -m lerobot.async_inference.policy_server |
| Trasporto | ZeroMQ REQ/REP | gRPC, add_insecure_port / insecure_channel |
| Serializzazione | msgpack + msgpack_numpy, allow_pickle=False enforced | pickle.dumps / pickle.loads, marked # nosec |
| Porta predefinita | 5555 | 8080 |
| Bind predefinito | 0.0.0.0, tutte le interfacce | localhost |
| Autenticazione | api_token supported by the class, not passed by the CLI | nessuno |
| Timeout client | 15000 ms (PolicyClient timeout_ms) | 2 s observation queue timeout |
| Modello di esecuzione | sincrono: blocca, quindi esegue il chunk | asincrono: esegue mentre il chunk successivo viene calcolato |
La riga di serializzazione è più importante di quanto sembri. Il MsgSerializer di GR00T rifiuta payload ndarray con dtype oggetto in entrambe le direzioni, perché altrimenti msgpack_numpy li passerebbe a pickle. lerobot invece esegue il pickle: policy_server.py chiama pickle.loads sui dati della richiesta, robot_client.py esegue il pickle dell'osservazione che invia. Difendibile su una LAN fidata, indifendibile una volta che la porta è raggiungibile da internet.
Percorso A: il server di policy GR00T proprietario di NVIDIA
Questo è il percorso documentato da NVIDIA per l'hardware SO-100 e SO-101, e quello da usare se il tuo checkpoint è stato generato da examples/finetune.sh con --embodiment-tag NEW_EMBODIMENT. I passaggi aggiungono ciò che il README originale omette: portare la porta al robot senza esporla a tutti gli altri.
- 1Installa GR00T sulla macchina GPU noleggiata
I sottomoduli sono richiesti, e git-lfs deve esistere prima della clonazione o i file parquet in
demo_dataarriveranno come puntatori. flash-attn e TensorRT sono inclusi nell'installazione predefinita. La trappola su una nuova immagine del pod:torchcodec0.8.0 è l'unico backend video supportato e carica solo FFmpeg da 4 a 7. Ubuntu 25.10 e 26.04 distribuiscono FFmpeg 8, quindi GR00T fallisce conCould not load libtorchcodec. Installa un FFmpeg inferiore a 8 e metti le sue librerie suLD_LIBRARY_PATH.bashsudo apt install git-lfs && git lfs install curl -LsSf https://astral.sh/uv/install.sh | sh sudo apt-get update && sudo apt-get install -y ffmpeg git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T cd Isaac-GR00T uv sync --python 3.12 uv run python -c "import gr00t; print('GR00T installed successfully')" - 2Autenticati contro il backbone gated
Ogni checkpoint GR00T N1.7, inclusa la tua messa a punto, carica il modello gated
nvidia/Cosmos-Reason2-2Bal primo utilizzo. Richiedi l'accesso sulla pagina del modello ed effettua il login sul pod, altrimenti il caricamento fallirà con unGatedRepoError.bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3Avvia il server di policy
Punta
--model-pathalla tua directory del checkpoint; su quel percorso il server ignora--modality-config-path, che viene letto solo sul percorso di replay. Ometti--model-pathe passa invece--dataset-pathpiù--execution-horizonper una ReplayPolicy che riproduce azioni registrate, il modo più economico per dimostrare che il cablaggio funziona.bashuv run python gr00t/eval/run_gr00t_server.py \ --model-path /workspace/so100_finetune/checkpoint-10000 \ --embodiment-tag NEW_EMBODIMENT \ --device cuda:0 \ --host 127.0.0.1 --port 5555 - 4Tunnelizza la porta 5555 alla macchina del robot
Associa all'interfaccia di loopback, come sopra, e trasporta la porta tramite SSH o una mesh in stile WireGuard. Questo fornisce la crittografia e l'autenticazione che il socket ZeroMQ non offre, per circa un millisecondo.
bash# on the robot machine ssh -N -L 5555:127.0.0.1:5555 root@<pod-host> -p <pod-ssh-port> # sanity check that something answers nc -vz 127.0.0.1 5555 - 5Esegui il client del robot accanto ai servi
Il client necessita del proprio ambiente uv: vuole i driver del robot di lerobot, non lo stack di training.
eval_so100.pyimporta so100_follower, so101_follower e koch_follower, quindi passa il--robot.typecorrispondente al tuo braccio (il README originale usa so101_follower). Le chiavi della telecamera devono corrispondere all'addestramento: l'adattatore legge esattamentefrontewrist, e scambiarle mostra alla policy la vista sbagliata.bashcd gr00t/eval/real_robot/SO100 uv sync uv pip install --no-deps -e ../../../../ uv run --no-sync python eval_so100.py \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=orange_follower \ --robot.cameras="{ front: {type: opencv, index_or_path: 6, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \ --policy_host=127.0.0.1 \ --policy_port=5555 \ --lang_instruction="pick up the red block and put it in the bin"
`run_gr00t_server.py` usa di default `--host 0.0.0.0`, collegandosi a ogni interfaccia: su un pod con un IP pubblico questo è un endpoint di inferenza aperto. E la classe `PolicyServer` accetta un `api_token` e lo convalida per ogni richiesta, ma `run_gr00t_server.py` non ne passa mai uno, quindi il server CLI non è autenticato qualunque cosa tu configuri. Collega a `127.0.0.1` e crea un tunnel. Un `ZMQError: Address already in use` significa che la porta 5555 è occupata; passa `--port`.
Percorso B: inferenza asincrona lerobot
lerobot risolve un problema diverso. Invece di bloccare il robot mentre il modello elabora, il client continua a eseguire i passi della coda che ha già, mentre il server calcola il prossimo chunk. Questo è suddivisione delle azioni in chunk portato avanti, lo stack asincrono introdotto con SmolVLA. Funziona anche con un checkpoint GR00T.
# GPU machine
pip install -e ".[async]"
python -m lerobot.async_inference.policy_server \
--host=127.0.0.1 \
--port=8080
# robot machine, after tunnelling 8080
python -m lerobot.async_inference.robot_client \
--server_address=127.0.0.1:8080 \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=follower_so100 \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}}" \
--task="pick up the red block and put it in the bin" \
--policy_type=groot \
--pretrained_name_or_path=<user>/my_groot_finetune \
--policy_device=cuda \
--actions_per_chunk=50 \
--chunk_size_threshold=0.5 \
--debug_visualize_queue_size=TrueIl server si avvia vuoto: non sa quale policy serve finché il primo handshake del client non glielo comunica, il che è comodo su un pod noleggiato. I due parametri che decidono se il braccio si muove fluidamente sono actions_per_chunk e chunk_size_threshold (la documentazione di lerobot chiama il secondo g, dal paper SmolVLA), e i valori documentati e i valori forniti non concordano.
| Parametro | Valore nel codice lerobot 0.6.1 | Cosa fa | Nota |
|---|---|---|---|
| actions_per_chunk | nessun valore predefinito, richiesto | Azioni restituite per chiamata | La tabella della documentazione elenca 50; il campo della dataclass non ha un valore predefinito, quindi la CLI richiede un valore |
| chunk_size_threshold | 0.5 | Rapporto di riempimento della coda al di sotto o uguale al quale il client invia una nuova osservazione | La tabella della documentazione indica 0.7; il codice e l'esempio della documentazione stessa indicano 0.5 |
| fps | 30 | Frequenza di controllo del client, imposta environment_dt = 1/fps | Abbassalo se la coda continua a svuotarsi |
| inference_latency | 1/30 s (33.3 ms) | Latenza di inferenza target sul server | Un obiettivo, non una misurazione |
| obs_queue_timeout | 2 s | Quanto tempo il server attende sulla coda di osservazione | Un uplink lento si manifesta qui per primo |
| aggregate_fn_name | weighted_average | Come vengono fuse le regioni di chunk sovrapposte | 0.3 vecchio + 0.7 nuovo; anche latest_only, average e conservative sono forniti. Il registro è AGGREGATE_FUNCTIONS in configs.py, non robot_client.py come affermato dalla documentazione |
CVE-2026-25874 è un'esecuzione di codice remoto non autenticata nella pipeline di inferenza asincrona di lerobot: pickle.loads() su dati ricevuti tramite un canale gRPC non autenticato senza TLS, raggiungibile tramite le chiamate SendPolicyInstructions, SendObservations e GetActions. CWE-502, punteggio base CVSS 3.1 di 9.8 da NVD, punteggio base 4.0 di 9.3 dalla CNA assegnante. Il record elenca LeRobot fino alla versione 0.5.1 come affetto e nomina sia il server di policy che il client robot, quindi la macchina accanto al tuo braccio rientra nell'ambito. L'aggiornamento non è la soluzione: il record cita il problema upstream 3047 e la patch, PR 3048, che sostituisce pickle con safetensors più JSON, e al 23 agosto 2026 entrambi sono ancora aperti. policy_server.py su main chiama ancora pickle.loads sui dati della richiesta mentre serve() si lega con add_insecure_port. Collega a loopback e non inoltrare mai la porta 8080.
L'aritmetica che decide se il tuo collegamento è abbastanza veloce
Le persone saltano questo passaggio e poi passano un giorno su . Ci vogliono due minuti ed è quasi sempre decisivo.
Il dizionario di osservazione commentato in eval_so100.py di NVIDIA indica cosa viene trasmesso: due array di forma (480, 640, 3) in uint8, sei float per le giunture, una stringa di linguaggio. Sono 921.600 byte per frame, 1.843.200 byte per due telecamere, circa 14.7 Mbit, e nessuno stack lo comprime in JPEG. Il blocco che torna indietro è di poche decine di passi di 6 float. Il tuo upload decide tutto, non il tuo download.
| Larghezza di banda in upload | Tempo per inviare un'osservazione (14.7 Mbit) | Verdetto per un braccio a 30 FPS |
|---|---|---|
| 10 Mbit/s, upload domestico tipico | ~1.47 s | Inutilizzabile. Il braccio si ferma tra ogni blocco. |
| 25 Mbit/s | ~0.59 s | Solo pick-and-place lento, con un lungo orizzonte di esecuzione. |
| 50 Mbit/s | ~0.29 s | Funzionante per compiti deliberati. |
| 100 Mbit/s | ~0.15 s | Ottimo per pick-and-place, visibile su movimenti veloci. |
| Fibra da 1 Gbit/s o data center | ~0.015 s | Il modello diventa invece il collo di bottiglia. |
Il budget in cui devi rientrare
Il client GR00T SO-100 è sincrono: chiama policy.get_action(obs), esegue i primi action_horizon passi del chunk a 30 FPS, quindi richiama. La dimensione del chunk e l'orizzonte sono numeri diversi: la guida di deployment di NVIDIA raccomanda una dimensione del chunk di azione di 16, almeno 32 se combinata con il chunking in tempo reale, mentre eval_so100.py fornisce un orizzonte di esecuzione di 8. Otto passi a 30 FPS corrispondono a 267 ms di movimento per chiamata, e tutto il resto deve rientrare in questo intervallo.
observation upload 14.7 Mbit / 100 Mbit/s = 147 ms
network round trip = 30 ms
model inference (AY-Robots figure, N1.7) = 152 ms
action chunk return + deserialize = ~2 ms
-------
total per call 331 ms
budget at action_horizon = 8 -> 267 ms FAIL, arm pauses ~64 ms per chunk
budget at action_horizon = 16 -> 533 ms fits, with headroom
budget at action_horizon = 32 -> 1067 ms fits, observations now ~1 s staleAumentare l'orizzonte è una soluzione drastica e non priva di costi: il braccio agisce su un'osservazione che è ormai vecchia. La soluzione più rigorosa è il chunking in tempo reale (RTC), che calcola il chunk successivo mentre quello corrente è in esecuzione, blocca le azioni garantite per l'esecuzione e completa il resto; il paper sull'RTC lo riporta come robusto al ritardo di inferenza senza necessità di riaddestramento. Verificare prima lo stato di questa funzionalità. NVIDIA contrassegna l'RTC come sperimentale, una primitiva di modello di basso livello raggiungibile tramite action_head.get_action(..., options={"rtc_overlap_steps": ..., "rtc_frozen_steps": ...}), non integrata in Gr00tPolicy o nel percorso server-client, dove options non è utilizzato, senza test né esempi. Tramite un server di policy si ottiene l'esecuzione asincrona, non l'RTC.
NVIDIA esegue benchmark di GR00T N1.7 end-to-end con 4 passi di denoising e una telecamera. Su un H100 80GB HBM3: 85.8 ms (11.7 Hz) in PyTorch eager, 48.6 ms (20.6 Hz) con torch.compile, 27.9 ms (35.9 Hz) con la pipeline completa TensorRT. Una L40 in modalità eager impiega 128.3 ms (7.8 Hz). NVIDIA definisce 10 Hz il minimo raccomandato per la manipolazione tipica, e al di sotto di 10 Hz adatto solo per compiti lenti e non reattivi. Queste sono frequenze di riprogrammazione: una policy a 10 Hz può comunque pilotare un braccio a 30 FPS tramite il chunking delle azioni. Una seconda telecamera ti porta nella direzione sbagliata.
Misuralo prima di fidarti
Ogni numero sopra è una previsione. Quattro comandi lo trasformano in una misurazione, che vale la pena eseguire prima di dedicare un'ora di pod a un'attività che non avrebbe mai funzionato.
- 1Ottieni il tempo di andata e ritorno grezzo
Contro il pod, non una CDN. Osserva la deviazione con la stessa attenzione della media: il jitter fa balbettare un braccio, non la latenza media.
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2Misura l'uplink che hai, non quello per cui paghi
L'upload residenziale è solitamente una frazione del download, ed è il numero nella tabella della larghezza di banda sopra.
bash# on the pod iperf3 -s # on the robot machine, -R omitted so this measures upload iperf3 -c <pod-host> -t 30 - 3Leggi il log di latenza del client
Il client robot lerobot registra la latenza server-client e il tempo di deserializzazione per ogni chunk. Sulla rotta B non hai bisogno di strumenti esterni.
textReceived action chunk for step #240 | Latest action: #232 | Incoming actions: 240:289 | Network latency (server->client): 187.44ms | Deserialization time: 3.10ms - 4Guarda la coda delle azioni svuotarsi
Passa
--debug_visualize_queue_size=Truee il client traccia la dimensione della coda in fase di esecuzione. Se raggiunge ripetutamente lo zero, sei fuori budget: abbassa gli fps, aumenta actions_per_chunk o aumenta chunk_size_threshold in modo che le osservazioni vengano inviate più spesso.bashpython -m lerobot.async_inference.robot_client \ ... \ --debug_visualize_queue_size=True
A cosa serve realmente l'inferenza remota
- Puoi valutare una policy con 3 miliardi di parametri su hardware reale senza possedere una scheda che costa più del braccio.
- La GPU è noleggiata all'ora, quindi un checkpoint fallito costa un paio di dollari.
- Il lato robot rimane piccolo: driver lerobot, due telecamere, una porta seriale, e puoi scambiare i checkpoint senza toccarlo.
- Le osservazioni non compresse dominano il costo della trasmissione, e l'upload residenziale è il vincolo principale.
- Il jitter è più dannoso della latenza: un collegamento con una media di 40 ms e picchi a 300 ms balbetta, mentre un collegamento stabile a 120 ms no.
- Le attività reattive veloci non sopravvivono al round trip a nessun orizzonte.
- Entrambi i server vengono forniti non autenticati in forma CLI, quindi il lavoro di tunneling è a tuo carico.
- Una connessione interrotta a metà chunk lascia il braccio in possesso di un'azione obsoleta. Aggiungi il tuo watchdog lato robot.
| Compito | Funziona su internet pubblico? | Perché |
|---|---|---|
| Prendere un oggetto statico, posizionarlo in un contenitore | Yes | Nulla si muove tra osservazione e azione. |
| Impilare blocchi a un ritmo deliberato | Yes, at action_horizon 16 or more | Gli errori si accumulano abbastanza lentamente da poter essere corretti nel chunk successivo. |
| Aprire un cassetto, inserire un oggetto | Usually | Ricco di contatti ma lento. Attenzione agli stop-and-go al contatto. |
| Seguire un oggetto in movimento | No | La policy agisce su un'osservazione vecchia di 300 ms a 1 s. |
| Afferrare, bilanciare o recuperare da uno scivolamento | No | La finestra di correzione è più breve di un round trip. |
| Un loop chiuso sincrono a 30 Hz | No | Il budget è di 33 ms end-to-end. Anche una LAN fatica. |
Se un'esecuzione remota balbetta nello stesso punto in ogni episodio, la rete probabilmente non è la causa. Una policy che esita sempre allo stesso angolo di giunto è solitamente un problema di dati; vedi le pagine sulle modalità di fallimento, in particolare una policy che funziona solo in una configurazione e la loss diminuisce ma la policy non fa nulla.
Far da sé vs farlo su AY-Robots
- Noleggia una GPU su un mercato spot e attendi una VRAM sufficiente a un prezzo che ti aggrada.
- Installa CUDA, uv, un ffmpeg torchcodec accettato e lo stack GR00T con i sottomoduli.
- Richiedi l'accesso al backbone con restrizioni
nvidia/Cosmos-Reason2-2Be inserisci un token sul pod. - Scarica il tuo checkpoint sul pod.
- Avvia il server in loopback, quindi crea un tunnel SSH dalla macchina del robot.
- Installa un secondo ambiente sulla macchina del robot per il client e i driver.
- Fai corrispondere le chiavi della telecamera, i nomi delle giunture e l'istruzione linguistica a ciò che il checkpoint ha rilevato.
- Monitora il pod. Una A100 dimenticata in funzione per tutta la notte costa più dell'esperimento.
Il costo della GPU non si ferma quando il robot si ferma. La maggior parte del denaro perso nell'inferenza remota va a un server che è rimasto attivo dopo che tutti se ne sono andati. Imposta un allarme o automatizza lo smantellamento.
- Scegli la policy addestrata che desideri eseguire.
/api/inference/podeffettua l'auto-provisioning di un pod GPU cloud che serve quella policy.- Il client robot locale comunica con quell'endpoint. I checkpoint di base sono quelli dei fornitori:
nvidia/GR00T-N1.7-3B,nvidia/GR00T-N1.5-3B,lerobot/pi05_base. ACT non ne ha. - I pod includono un watchdog per l'inattività e si autodistruggono dopo un periodo di inattività, in modo che nulla continui a fatturare silenziosamente.
- Le stesse operazioni sono disponibili da un terminale e per gli agenti AI, quindi il ciclo può essere scriptato.
L'auto-provisioning elimina il lavoro di configurazione e il costo del pod dimenticato, non la fisica. L'inferenza deve comunque essere vicina ai servi per le attività veloci: il ciclo di controllo è di 20-485 ms per passo d'azione a seconda del modello, e i round trip su internet pubblico, in aggiunta a ciò, trasformano una policy funzionante in una esitante.
- Guida del client per il lato locale della connessione
- Esegui la tua prima policy per la procedura guidata
- CLI e server MCP per la versione scriptata
- Documenti di sicurezza

Quanto costa una sessione di inferenza remota
Due numeri contano: la tariffa oraria della scheda e per quanto tempo la lasci in funzione. Il primo è pubblicato; il secondo sorprende le persone.
| Scheda | Runpod community cloud | Runpod secure cloud | Adatto per |
|---|---|---|---|
| A100 PCIe 80 GB | 1.19 USD/h | 1.39 USD/h | GR00T N1.7, GR00T N1.5, Pi0.5 |
| A100 SXM 80 GB | 1.39 USD/h | 1.59 USD/h | Lo stesso, un po' più veloce |
| H100 PCIe 80 GB | 1.99 USD/h | 2.89 USD/h | Livello più veloce; il dato di 11.7 Hz di NVIDIA si riferisce a una H100 80GB HBM3 |
| L40S 48 GB | 0.79 USD/h | 0.99 USD/h | Solo inferenza, al di sopra del limite di 16 GB |
| RTX 4090 24 GB | 0.34 USD/h | 0.74 USD/h | SmolVLA, ACT |
Queste tariffe sono state lette dalla pagina dei prezzi di Runpod il 23 agosto 2026, e i mercati spot sono soggetti a variazioni. AY-Robots invece propone un'intera esecuzione: da 3 a 6 ore a 1.20 a 2.00 USD all'ora sul livello A100 o H100, circa da 4 a 12 USD per un'esecuzione GR00T o Pi0.5; da 2 a 5 ore a 0.30 a 0.60 USD all'ora sul livello da 24 GB, da 1 a 3 USD per SmolVLA o ACT. Una sessione di inferenza è più conveniente di un'esecuzione di training solo se la si interrompe, ed è a questo che serve il watchdog di inattività. Vedi la documentazione di fatturazione e la pagina dei prezzi.

Se preferisci non avere la rete nel ciclo
L'inferenza remota risolve un problema hardware e ne crea uno di latenza. A volte la risposta migliore è una policy che si adatta all'hardware che si possiede.
- ACT, circa 80 M parametri e 20 ms per passo d'azione, 50 episodi minimi, qualsiasi scheda da 24 GB. In una configurazione ripetitiva a singola attività, spesso supera un modello remoto da 3 B, perché non attende mai un pacchetto.
- SmolVLA, circa 450 M parametri e 245 ms per passo d'azione, 30 episodi minimi. Mantiene il condizionamento linguistico che manca ad ACT, e la documentazione di lerobot lo colloca a circa 2 GB al momento dell'inferenza contro circa 14 GB per PI0.
- ACT vs GR00T N1.7 per la metà dell'accuratezza del compromesso.
Esiste anche una via di mezzo: addestrare nel cloud, valutare localmente. Il fine-tuning richiede la scheda da 80 GB e non si preoccupa della latenza, quindi addestrare GR00T N1.7 su un SO-100 in remoto è incontestabile. Solo il ciclo di valutazione ha un vincolo in tempo reale; la documentazione sull'addestramento e la matrice modello-braccio coprono questa metà.
Ancora nessun braccio sulla scrivania?
Guida un vero SO-100 nel browser senza registrazione, confronta le cinque policy addestrabili con i loro numeri di latenza reali, oppure noleggia una GPU e addestrane una. Tre modi per iniziare, nessuno richiede hardware che non possiedi.
Provalo senza hardwareDomande frequenti
Posso eseguire GR00T N1.7 su un Raspberry Pi se la GPU è remota?▾
Sì, è a questo che serve la separazione client-server. Il Pi esegue i driver lerobot, legge due telecamere e un bus seriale, e invia le osservazioni al server delle policy; non carica mai il modello. Il vincolo si sposta dalla VRAM alla larghezza di banda di upload: due frame RGB 640x480 non compressi sono 1.843.200 byte per chiamata, e nessuno dei due stack li comprime.
Quanta latenza aggiunge effettivamente la rete?▾
Tempo di andata e ritorno più tempo di trasferimento dell'osservazione. Il tempo di trasferimento è 14.7 Mbit diviso per la tua larghezza di banda di upload: circa 147 ms su un link da 100 Mbit/s, 1.47 s su un link da 10 Mbit/s. Entrambi si aggiungono al tempo di inferenza del modello stesso, che AY-Robots elenca come 152 ms per GR00T N1.7 e 485 ms per Pi0.5. Misura con ping e iperf3 contro il pod, non un server di speed test.
L'inferenza remota è sufficiente per un compito reale?▾
Per operazioni lente e deliberate di pick-and-place, sì. Per qualsiasi cosa reattiva, no. La guida di deployment di NVIDIA indica un requisito di singolo passo sincrono di circa 33 ms end-to-end a 30 FPS, e nota che acquisizione, rete, inferenza e post-elaborazione superano regolarmente tale valore anche senza coinvolgimento di internet.
Quale porta usano i server ed è sicuro aprirla?▾
Il PolicyServer di Isaac-GR00T usa di default la porta 5555 su ZeroMQ e si lega a 0.0.0.0 nella sua CLI. lerobot usa di default la porta 8080 su gRPC e si lega a localhost. Nessuno dei due è sicuro da esporre: la classe GR00T supporta un api_token ma run_gr00t_server.py non ne passa mai uno, e lerobot serializza i dati tramite un canale gRPC insicuro, il che è CVE-2026-25874. Legarsi a loopback e usare un tunnel SSH.
L'aggiornamento di lerobot risolve CVE-2026-25874?▾
Non al 23 agosto 2026. Il record CVE elenca LeRobot fino alla versione 0.5.1 come affetto e PyPI distribuisce la 0.6.1, ma la pull request che rimuoverebbe pickle dalla pipeline asincrona è ancora aperta, e policy_server.py su main chiama ancora pickle.loads sui dati della richiesta. Tratta l'isolamento della rete come mitigazione, non un aggiornamento di versione, e assumi che anche il client lato robot sia coinvolto.
Posso usare il client asincrono di lerobot con un checkpoint GR00T?▾
Sì. lerobot 0.6.1 elenca groot in SUPPORTED_POLICIES insieme a act, smolvla, diffusion, tdmpc, vqbet, pi0 e pi05, ed entrambi so100_follower e so101_follower sono in SUPPORTED_ROBOTS. Passa --policy_type=groot e punta --pretrained_name_or_path al tuo checkpoint. Ottieni l'esecuzione asincrona, che l'esempio GR00T SO-100 non implementa, al costo del trasporto pickle.
La versione breve
L'inferenza remota per una 3 B policy è un problema di ingegneria risolto con un problema di fisica irrisolto annesso. L'ingegneria consiste in due comandi e un tunnel SSH. La fisica è che un'osservazione di 1.8 MB deve raggiungere una GPU in un altro paese e tornare prima che il braccio esaurisca le azioni. Fai i calcoli prima di noleggiare qualsiasi cosa, scegli un compito che tolleri un'osservazione obsoleta e aumenta l'orizzonte di esecuzione piuttosto che sperare che il link migliori.
Se non hai ancora registrato un dataset, e la vengono prima, e la voce spiega cosa scrive il registratore. Il contesto è in e il ; la collega ogni numero di benchmark a una fonte.
Sources
- NVIDIA Isaac-GR00T: repository N1.7 e README (soglia di inferenza di 16 GB, installazione, backbone Cosmos-Reason2-2B con accesso controllato, vincolo FFmpeg)
- run_gr00t_server.py: la CLI del server di policy GR00T, i valori predefiniti di ServerConfig (host 0.0.0.0, porta 5555) e il percorso di ReplayPolicy
- server_client.py: PolicyServer e PolicyClient, limite allow_pickle=False di MsgSerializer, api_token, timeout_ms
- eval_so100.py: il client di policy SO-100, i valori predefiniti di EvalConfig e il ciclo di controllo sincrono
- Isaac-GR00T SO100/SO101 example: conversione del dataset, finetune e comandi di valutazione a ciclo chiuso
- Isaac-GR00T Guida alla distribuzione nel mondo reale: il budget sincrono di 33 ms, stop-and-go, dimensione del chunk di azione, stato RTC
- Isaac-GR00T Raccomandazione hardware: frequenza di inferenza per GPU e il minimo di 10 Hz
- Isaac-GR00T Guida alla distribuzione e all'inferenza: risultati del benchmark di latenza per componente
- LeRobot: Tutorial sull'inferenza asincrona (PolicyServer, RobotClient, la tabella dei parametri documentata)
- lerobot async_inference/configs.py: valori predefiniti di PolicyServerConfig e RobotClientConfig, registro AGGREGATE_FUNCTIONS
- lerobot async_inference/policy_server.py: pickle.loads sui dati della richiesta, add_insecure_port, i nomi delle chiamate gRPC
- lerobot robot_client.py: trasporto gRPC, serializzazione pickle, registrazione della latenza
- CVE-2026-25874: esecuzione di codice remoto tramite deserializzazione non sicura di LeRobot via gRPC, interessato fino alla versione 0.5.1
- Black, Galliker e Levine, Esecuzione in tempo reale di policy di flusso con chunking delle azioni (chunking in tempo reale)
- Runpod prezzi GPU: tariffe orarie cloud comunitarie e sicure per A100, H100, L40S e RTX 4090
Sources
- NVIDIA Isaac-GR00T: N1.7 repository and README (16 GB inference floor, install, gated Cosmos-Reason2-2B backbone, FFmpeg constraint)
- run_gr00t_server.py: the GR00T policy server CLI, ServerConfig defaults (host 0.0.0.0, port 5555) and the ReplayPolicy path
- server_client.py: PolicyServer and PolicyClient, MsgSerializer's allow_pickle=False boundary, api_token, timeout_ms
- eval_so100.py: the SO-100 policy client, EvalConfig defaults and the synchronous control loop
- Isaac-GR00T SO100/SO101 example: dataset conversion, finetune and closed-loop eval commands
- Isaac-GR00T Real-World Deployment Guide: the 33 ms synchronous budget, stop-and-go, action chunk size, RTC status
- Isaac-GR00T Hardware Recommendation: inference frequency per GPU and the 10 Hz minimum
- Isaac-GR00T Deployment and Inference Guide: per-component latency benchmark results
- LeRobot: Asynchronous Inference tutorial (PolicyServer, RobotClient, the documented parameter table)
- lerobot async_inference/configs.py: PolicyServerConfig and RobotClientConfig defaults, AGGREGATE_FUNCTIONS registry
- lerobot async_inference/policy_server.py: pickle.loads on request data, add_insecure_port, the gRPC call names
- lerobot robot_client.py: gRPC transport, pickle serialization, latency logging
- CVE-2026-25874: LeRobot unsafe deserialization remote code execution via gRPC, affected through 0.5.1
- Black, Galliker and Levine, Real-Time Execution of Action Chunking Flow Policies (real-time chunking)
- Runpod GPU pricing: community and secure cloud hourly rates for A100, H100, L40S and RTX 4090
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started