La pagina di prova di AY-Robots: tre modi per iniziare senza possedere un robot, incluso il noleggio di una GPU per l'inferenza delle policy
GR00T N1.7Inferenza RemotaGPU CloudLeRobotSO-100Latenza

Eseguire l'Inferenza GR00T Senza una GPU Locale

AY-Robots ResearchAugust 23, 202619 min di lettura

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.

PolicyParametriInferenza per passo d'azioneLivello GPU per l'addestramentoEpisodi minimiFormato del dataset
GR00T N1.7~3 B, ~40 M trained during fine-tuning152 msA100 80 GB or H100 80 GB50LeRobot v2.0 or v2.1
GR00T N1.5~3 B165 msA100 80 GB or H100 80 GB50LeRobot v2.0 or v2.1
Pi0.5~3 B, PaliGemma backbone485 msA100 80 GB or H100 80 GB50LeRobot v3.0
SmolVLA~450 M245 msRTX 4090 or any 24 GB card30LeRobot v3.0
ACT~80 M20 msRTX 4090 or any 24 GB card50LeRobot v3.0
La pagina delle policy di AY-Robots che confronta le cinque policy addestrabili per parametri, livello GPU, latenza di inferenza ed episodi minimi
Le stesse cinque righe su /policies. La colonna della latenza decide se una policy sopravvive a un salto di rete.

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.

ACT non ha un modello base

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 PolicyServerlerobot async inference
Punto di ingressogr00t/eval/run_gr00t_server.pypython -m lerobot.async_inference.policy_server
TrasportoZeroMQ REQ/REPgRPC, add_insecure_port / insecure_channel
Serializzazionemsgpack + msgpack_numpy, allow_pickle=False enforcedpickle.dumps / pickle.loads, marked # nosec
Porta predefinita55558080
Bind predefinito0.0.0.0, tutte le interfaccelocalhost
Autenticazioneapi_token supported by the class, not passed by the CLInessuno
Timeout client15000 ms (PolicyClient timeout_ms)2 s observation queue timeout
Modello di esecuzionesincrono: blocca, quindi esegue il chunkasincrono: 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.

  1. 1
    Installa GR00T sulla macchina GPU noleggiata

    I sottomoduli sono richiesti, e git-lfs deve esistere prima della clonazione o i file parquet in demo_data arriveranno come puntatori. flash-attn e TensorRT sono inclusi nell'installazione predefinita. La trappola su una nuova immagine del pod: torchcodec 0.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 con Could not load libtorchcodec. Installa un FFmpeg inferiore a 8 e metti le sue librerie su LD_LIBRARY_PATH.

    bash
    sudo 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')"
  2. 2
    Autenticati contro il backbone gated

    Ogni checkpoint GR00T N1.7, inclusa la tua messa a punto, carica il modello gated nvidia/Cosmos-Reason2-2B al primo utilizzo. Richiedi l'accesso sulla pagina del modello ed effettua il login sul pod, altrimenti il caricamento fallirà con un GatedRepoError.

    bash
    uv run huggingface-cli login
    # or:  export HF_TOKEN=<your_token>
  3. 3
    Avvia il server di policy

    Punta --model-path alla tua directory del checkpoint; su quel percorso il server ignora --modality-config-path, che viene letto solo sul percorso di replay. Ometti --model-path e passa invece --dataset-path più --execution-horizon per una ReplayPolicy che riproduce azioni registrate, il modo più economico per dimostrare che il cablaggio funziona.

    bash
    uv 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
  4. 4
    Tunnelizza 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
  5. 5
    Esegui 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.py importa so100_follower, so101_follower e koch_follower, quindi passa il --robot.type corrispondente al tuo braccio (il README originale usa so101_follower). Le chiavi della telecamera devono corrispondere all'addestramento: l'adattatore legge esattamente front e wrist, e scambiarle mostra alla policy la vista sbagliata.

    bash
    cd 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"
Due impostazioni predefinite che ti creeranno problemi

`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.

bash
# 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=True
Server di policy sulla GPU, client robot sulla macchina con le porte USB

Il 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.

ParametroValore nel codice lerobot 0.6.1Cosa faNota
actions_per_chunknessun valore predefinito, richiestoAzioni restituite per chiamataLa tabella della documentazione elenca 50; il campo della dataclass non ha un valore predefinito, quindi la CLI richiede un valore
chunk_size_threshold0.5Rapporto di riempimento della coda al di sotto o uguale al quale il client invia una nuova osservazioneLa tabella della documentazione indica 0.7; il codice e l'esempio della documentazione stessa indicano 0.5
fps30Frequenza di controllo del client, imposta environment_dt = 1/fpsAbbassalo se la coda continua a svuotarsi
inference_latency1/30 s (33.3 ms)Latenza di inferenza target sul serverUn obiettivo, non una misurazione
obs_queue_timeout2 sQuanto tempo il server attende sulla coda di osservazioneUn uplink lento si manifesta qui per primo
aggregate_fn_nameweighted_averageCome vengono fuse le regioni di chunk sovrapposte0.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
Il server di policy di lerobot ha un RCE non patchato

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 uploadTempo per inviare un'osservazione (14.7 Mbit)Verdetto per un braccio a 30 FPS
10 Mbit/s, upload domestico tipico~1.47 sInutilizzabile. Il braccio si ferma tra ogni blocco.
25 Mbit/s~0.59 sSolo pick-and-place lento, con un lungo orizzonte di esecuzione.
50 Mbit/s~0.29 sFunzionante per compiti deliberati.
100 Mbit/s~0.15 sOttimo per pick-and-place, visibile su movimenti veloci.
Fibra da 1 Gbit/s o data center~0.015 sIl 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.

text
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 stale
Esempio pratico: uplink a 100 Mbit/s, round trip di 30 ms, GR00T N1.7

Aumentare 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.

Quanto costa il modello prima della rete

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.

  1. 1
    Ottieni 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.

    bash
    ping -c 50 <pod-host>
    # the mdev column is the number that predicts stutter
  2. 2
    Misura 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
  3. 3
    Leggi 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.

    text
    Received action chunk for step #240 | Latest action: #232 |
      Incoming actions: 240:289 |
      Network latency (server->client): 187.44ms |
      Deserialization time: 3.10ms
  4. 4
    Guarda la coda delle azioni svuotarsi

    Passa --debug_visualize_queue_size=True e 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.

    bash
    python -m lerobot.async_inference.robot_client \
        ... \
        --debug_visualize_queue_size=True

A cosa serve realmente l'inferenza remota

Policy su una GPU a noleggio, braccio sulla tua scrivania
Vantaggi
  • 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.
Compromessi
  • 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.
CompitoFunziona su internet pubblico?Perché
Prendere un oggetto statico, posizionarlo in un contenitoreYesNulla si muove tra osservazione e azione.
Impilare blocchi a un ritmo deliberatoYes, at action_horizon 16 or moreGli errori si accumulano abbastanza lentamente da poter essere corretti nel chunk successivo.
Aprire un cassetto, inserire un oggettoUsuallyRicco di contatti ma lento. Attenzione agli stop-and-go al contatto.
Seguire un oggetto in movimentoNoLa policy agisce su un'osservazione vecchia di 300 ms a 1 s.
Afferrare, bilanciare o recuperare da uno scivolamentoNoLa finestra di correzione è più breve di un round trip.
Un loop chiuso sincrono a 30 HzNoIl 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

  1. Noleggia una GPU su un mercato spot e attendi una VRAM sufficiente a un prezzo che ti aggrada.
  2. Installa CUDA, uv, un ffmpeg torchcodec accettato e lo stack GR00T con i sottomoduli.
  3. Richiedi l'accesso al backbone con restrizioni nvidia/Cosmos-Reason2-2B e inserisci un token sul pod.
  4. Scarica il tuo checkpoint sul pod.
  5. Avvia il server in loopback, quindi crea un tunnel SSH dalla macchina del robot.
  6. Installa un secondo ambiente sulla macchina del robot per il client e i driver.
  7. Fai corrispondere le chiavi della telecamera, i nomi delle giunture e l'istruzione linguistica a ciò che il checkpoint ha rilevato.
  8. Monitora il pod. Una A100 dimenticata in funzione per tutta la notte costa più dell'esperimento.
Il pod inattivo è il vero costo

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.

La pagina del server MCP di AY-Robots che elenca le operazioni della piattaforma esposte come strumenti per gli agenti AI
La pagina MCP: operazioni di provisioning e inferenza esposte come strumenti che un agente può richiamare.

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.

SchedaRunpod community cloudRunpod secure cloudAdatto per
A100 PCIe 80 GB1.19 USD/h1.39 USD/hGR00T N1.7, GR00T N1.5, Pi0.5
A100 SXM 80 GB1.39 USD/h1.59 USD/hLo stesso, un po' più veloce
H100 PCIe 80 GB1.99 USD/h2.89 USD/hLivello più veloce; il dato di 11.7 Hz di NVIDIA si riferisce a una H100 80GB HBM3
L40S 48 GB0.79 USD/h0.99 USD/hSolo inferenza, al di sopra del limite di 16 GB
RTX 4090 24 GB0.34 USD/h0.74 USD/hSmolVLA, 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.

La tabella dei costi di AY-Robots che mostra quale GPU richiede ogni policy, il tempo di esecuzione e il prezzo tipici, e gli episodi prima che una policy sia utile.
La tabella dei costi su /try: quale scheda richiede ogni modello e quanto costa tipicamente un'esecuzione.

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 hardware

Domande 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

Sources

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started