
Robotmaskinen din har ingen GPU. Plasser GR00T-policy-serveren på en leid sky-GPU, strøm handlingsbiter til armen, og lær nøyaktig hva nettverket koster deg.
En Raspberry Pi er nok til å drive en SO-100 over en seriell buss og hente rammer fra to USB-kameraer. Det er ikke nok til å kjøre en tre milliarder parameter syn-språk-handlingsmodell: NVIDIAs README angir GR00T N1.7 inferens til én GPU med 16 GB eller mer VRAM. For å se hva din finjusterte GR00T N1.7 sjekkpunkt gjør på armen uten å kjøpe et kort, plasser policyen på en leid sky-GPU, hold robotloopen på maskinen med USB-portene, og send observasjoner og handlingsbiter over nettverket.
Det fungerer, det er ikke gratis, og prisen er ikke jevnt fordelt over oppgavene. Nedenfor: NVIDIAs egen policy-server, lerobots asynkrone stack, regnestykket som på forhånd sier om opplinken din er rask nok, og plattformruten. Alt sjekket mot Isaac-GR00T main branch (N1.7 GA) og lerobot 0.6.1 den 23. august 2026.
Hva du trenger å vite
- •GR00T N1.7, GR00T N1.5 og Pi0.5 er modeller med omtrent 3 milliarder parametere. Ingen passer på en robotkontroller uten en diskret GPU.
- •Isaac-GR00T og lerobot leverer begge en klient-server-deling. Du skriver ikke transportlaget.
- •Observasjoner dominerer nettverkskostnaden, ikke handlinger: to ukomprimerte 640x480 RGB-rammer er 1 843 200 byte, omtrent 14.7 Mbit per kall, og ingen av stackene komprimerer dem.
- •AY-Robots lister 20 til 485 ms per handlingstrinn per modell. Internett-tur-retur-tider kommer i tillegg til dette.
- •Fjerninferens passer for langsom pick-and-place, ikke rask reaktiv bevegelse. En lengre utførelseshorisont kjøper tid og koster observasjonsfriskhet.
- •Ingen av serverne er sikre på en offentlig IP slik de leveres, og lerobots har en uoppdatert RCE. Tunnel den.
Hvorfor policyen ikke vil passe på robotmaskinen
To av de fem policyene AY-Robots kan trene kjører på et arbeidsstasjonskort, tre gjør det ikke. Kolonnen for nedenfor er per handlingstrinn, og det er tallet som konkurrerer med nettverkets rundturtid.
| Policy | Parametre | Inferens per handlingstrinn | GPU-nivå for trening | Min. episoder | Datasettformat |
|---|---|---|---|---|---|
| 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 |

Les dette som en beslutning, ikke trivia. på 20 ms per trinn kjører på robotmaskinen, og du trenger aldri å tenke på det igjen. på 485 ms har brukt en tredjedel av et sekund før en pakke forlater bygningen din. og legger til nøyaktighetssiden.
GR00T N1.7, GR00T N1.5 og Pi0.5 starter fra et leverandør-sjekkpunkt (nvidia/GR00T-N1.7-3B, nvidia/GR00T-N1.5-3B, lerobot/pi05_base). ACT eksisterer ikke før du trener den på din egen oppgave, så det er ingenting å tilby eksternt før en treningsjobb har kjørt. Se ACT på SO-100.
De to klient-server-stakkene som allerede eksisterer
Isaac-GR00T leverer en ZeroMQ forespørsel-svar-server; lerobot leverer en gRPC-server bygget rundt asynkron inferens. Begge aksepterer et GR00T sjekkpunkt. lerobots støttede policy-liste i async_inference/constants.py er act, smolvla, diffusion, tdmpc, vqbet, pi0, pi05 og groot; dens robotliste er so100_follower, so101_follower, bi_so_follower og omx_follower.
| Isaac-GR00T PolicyServer | lerobot asynkron inferens | |
|---|---|---|
| Inngangspunkt | gr00t/eval/run_gr00t_server.py | python -m lerobot.async_inference.policy_server |
| Transport | ZeroMQ REQ/REP | gRPC, add_insecure_port / insecure_channel |
| Serialisering | msgpack + msgpack_numpy, allow_pickle=False enforced | pickle.dumps / pickle.loads, marked # nosec |
| Standardport | 5555 | 8080 |
| Standard binding | 0.0.0.0, alle grensesnitt | localhost |
| Autentisering | api_token supported by the class, not passed by the CLI | ingen |
| Klient-tidsavbrudd | 15000 ms (PolicyClient timeout_ms) | 2 s tidsavbrudd for observasjonskø |
| Utførelsesmodell | synkron: blokker, deretter utfør biten | asynkron: utfør mens neste bit beregnes |
Serialiseringsraden betyr mer enn den ser ut til. GR00T's MsgSerializer nekter object-dtype ndarray-nyttelast i begge retninger, fordi msgpack_numpy ellers ville overlevert dem til pickle. lerobot bruker pickle i stedet: policy_server.py kaller pickle.loads på forespørselsdata, robot_client.py pickler observasjonen den sender. Forsvarlig på et betrodd LAN, uforsvarlig når porten er tilgjengelig fra internett.
Rute A: NVIDIAs egen GR00T policy-server
Dette er stien NVIDIA dokumenterer for SO-100 og SO-101 maskinvare, og den du skal bruke hvis sjekkpunktet ditt kom ut av examples/finetune.sh med --embodiment-tag NEW_EMBODIMENT. Trinnene legger til det den oppstrøms README utelater: å få porten til roboten uten å eksponere den for alle andre.
- 1Installer GR00T på den leide GPU-boksen
Submoduler er påkrevd, og git-lfs må eksistere før klonen, ellers vil parquet-filene i
demo_dataankomme som pekere. flash-attn og TensorRT følger med standardinstallasjonen. Fellen på et ferskt pod-image:torchcodec0.8.0 er den eneste støttede videobackenden og laster kun FFmpeg 4 til 7. Ubuntu 25.10 og 26.04 leveres med FFmpeg 8, så GR00T feiler medCould not load libtorchcodec. Installer en FFmpeg under 8 og legg bibliotekene dens påLD_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')" - 2Autentiser mot den gatede ryggraden
Hvert GR00T N1.7 sjekkpunkt, inkludert din egen finjustering, laster den gatede
nvidia/Cosmos-Reason2-2Bved første bruk. Be om tilgang på modellsiden og logg inn på pod-en, ellers vil lasting feile med enGatedRepoError.bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3Start policy-serveren
Pek
--model-pathtil sjekkpunktkatalogen din; på den stien ignorerer serveren--modality-config-path, som kun leses på replay-stien. Utelat--model-pathog send--dataset-pathpluss--execution-horizoni stedet for en ReplayPolicy som spiller av innspilte handlinger, den billigste måten å bevise at kablingen fungerer.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 - 4Tunnel port 5555 til robotmaskinen
Bind til loopback, som ovenfor, og overfør porten over SSH eller et WireGuard-lignende nett. Dette gir krypteringen og autentiseringen ZeroMQ-socketen ikke har, for omtrent et millisekund.
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 - 5Kjør robotklienten ved siden av servoene
Klienten trenger sitt eget uv-miljø: den ønsker lerobots robotdrivere, ikke treningsstakken.
eval_so100.pyimporterer so100_follower, so101_follower og koch_follower, så send--robot.typesom samsvarer med armen din (den oppstrøms README bruker so101_follower). Kameranøkler må samsvare med treningen: adapteren leser nøyaktigfrontogwrist, og å bytte dem viser policyen feil visning.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 bruker som standard --host 0.0.0.0, som binder alle grensesnitt: på en pod med en offentlig IP er dette et åpent inferens-endepunkt. Og PolicyServer-klassen aksepterer en api_token og validerer den per forespørsel, men run_gr00t_server.py sender aldri en, så CLI-serveren er uautentisert uansett hva du konfigurerer. Bind til 127.0.0.1 og tunnel. En ZMQError: Address already in use betyr at port 5555 er opptatt; send med --port.
Rute B: lerobot asynkron inferens
lerobot løser et annet problem. I stedet for å blokkere roboten mens modellen tenker, fortsetter klienten å behandle køen den allerede har mens serveren beregner neste del (chunk). Dette er handlings-chunking tatt videre, den asynkrone stakken introdusert med SmolVLA. Det fungerer også med et GR00T-sjekkpunkt.
# 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=TrueServeren starter tom: den vet ikke hvilken policy den betjener før klientens første håndtrykk forteller den det, noe som er praktisk på en leid pod. De to innstillingene som avgjør om armen beveger seg jevnt er actions_per_chunk og chunk_size_threshold (lerobot-dokumentasjonen kaller den andre g, etter SmolVLA-artikkelen), og de dokumenterte verdiene og de leverte verdiene stemmer ikke overens.
| Parameter | Verdi i lerobot 0.6.1-kode | Hva den gjør | Merknad |
|---|---|---|---|
| actions_per_chunk | ingen standard, påkrevd | Handlinger returnert per kall | Dokumentasjonstabellen lister 50; dataclass-feltet har ingen standardverdi, så CLI krever en verdi |
| chunk_size_threshold | 0.5 | Køfyllingsforhold ved eller under hvilket klienten sender en ny observasjon | Dokumentasjonstabellen sier 0.7; koden og dokumentasjonens eget eksempel sier 0.5 |
| fps | 30 | Klientkontrollrate, setter environment_dt = 1/fps | Senk den hvis køen fortsetter å tømmes |
| inference_latency | 1/30 s (33.3 ms) | Mål for inferenslatens på serveren | Et mål, ikke en måling |
| obs_queue_timeout | 2 s | Hvor lenge serveren venter på observasjonskøen | En treg opplink viser seg her først |
| aggregate_fn_name | weighted_average | Hvordan overlappende chunk-regioner blandes | 0.3 gammel + 0.7 ny; latest_only, average og conservative leveres også. Registeret er AGGREGATE_FUNCTIONS i configs.py, ikke robot_client.py som dokumentasjonen hevder |
CVE-2026-25874 er uautentisert fjernkjøring av kode i lerobots asynkrone inferenspipeline: pickle.loads() på data mottatt over en uautentisert gRPC-kanal uten TLS, tilgjengelig via kallene SendPolicyInstructions, SendObservations og GetActions. CWE-502, CVSS 3.1 grunnscore 9.8 fra NVD, 4.0 grunnscore 9.3 fra den tildelende CNA. Posten lister LeRobot til og med 0.5.1 som berørt og nevner både policy-serveren og robotklienten, så maskinen ved siden av armen din er innenfor omfanget. Oppgradering er ikke løsningen: posten siterer oppstrøms problem 3047 og patchen, PR 3048, som bytter pickle med safetensors pluss JSON, og den 23. august 2026 er begge fortsatt åpne. policy_server.py på main kaller fortsatt pickle.loads på forespørselsdata mens serve() binder med add_insecure_port. Bind til loopback og aldri port-videresend 8080.
Aritmetikken som avgjør om koblingen din er rask nok
Folk hopper over dette og bruker deretter en dag på en policy som fryser midt i bevegelsen. Det tar to minutter og er nesten alltid avgjørende.
Den kommenterte observasjons-dicten i NVIDIAs eval_so100.py sier hva som går over nettverket: to arrays med form (480, 640, 3) i uint8, seks ledd-floats, en språkstreng. Det er 921,600 bytes per bilde, 1,843,200 bytes for to kameraer, omtrent 14.7 Mbit, og ingen av stakkene JPEG-komprimerer det. Datapakken som kommer tilbake er noen titalls trinn med 6 floats. Din opplasting bestemmer alt, ikke din nedlasting.
| Opplastingsbåndbredde | Tid for å sende én observasjon (14.7 Mbit) | Dom for en 30 FPS arm |
|---|---|---|
| 10 Mbit/s, typisk hjemmeopplasting | ~1.47 s | Ubrukbart. Armen stopper mellom hver datapakke. |
| 25 Mbit/s | ~0.59 s | Kun sakte pick-and-place, med lang utførelseshorisont. |
| 50 Mbit/s | ~0.29 s | Brukelig for bevisste oppgaver. |
| 100 Mbit/s | ~0.15 s | Greit for pick-and-place, synlig ved rask bevegelse. |
| 1 Gbit/s fiber eller datasenter | ~0.015 s | Modellen blir flaskehalsen i stedet. |
Budsjettet du må holde deg innenfor
GR00T SO-100-klienten er synkron: den kaller policy.get_action(obs), utfører de første action_horizon trinn av blokken med 30 FPS, og kaller deretter igjen. Blokkstørrelse og horisont er forskjellige tall: NVIDIAs distribusjonsguide anbefaler en handlingsblokkstørrelse på 16, minst 32 når kombinert med sanntids-chunking, mens eval_so100.py leverer en utførelseshorisont på 8. Åtte trinn med 30 FPS er 267 ms bevegelse per kall, og alt annet må passe innenfor det.
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Å heve horisonten er en grov løsning og ikke en gratis en: armen handler basert på en observasjon som nå er gammel. Den prinsippielle løsningen er sanntids-chunking (RTC), som beregner neste blokk mens den nåværende kjører, fryser handlingene som garantert vil utføres og fyller inn resten; RTC-artikkelen rapporterer den som robust mot inferensforsinkelse uten omskolering. Sjekk hvor det står først. NVIDIA merker RTC som eksperimentell, en lavnivå modellprimitiv som er tilgjengelig via action_head.get_action(..., options={"rtc_overlap_steps": ..., "rtc_frozen_steps": ...}), ikke koblet inn i Gr00tPolicy eller server-klient-banen, der options er ubrukt, uten tester og uten eksempel. Over en policy-server får du asynkron utførelse, ikke RTC.
NVIDIA benchmarktester GR00T N1.7 ende-til-ende med 4 denoising-trinn og ett kamera. På en H100 80GB HBM3: 85.8 ms (11.7 Hz) i PyTorch eager, 48.6 ms (20.6 Hz) med torch.compile, 27.9 ms (35.9 Hz) med TensorRT full pipeline. En L40 i eager-modus tar 128.3 ms (7.8 Hz). NVIDIA kaller 10 Hz det anbefalte minimum for typisk manipulering, og under 10 Hz kun egnet for langsomme, ikke-reaktive oppgaver. Dette er replannings-rater: en 10 Hz policy kan fortsatt drive en 30 FPS arm gjennom action chunking. Et andre kamera beveger deg i feil retning.
Mål det før du stoler på det
Hvert tall ovenfor er en prediksjon. Fire kommandoer gjør det om til en måling, verdt å kjøre før du forplikter en pod-time til en oppgave som aldri kom til å fungere.
- 1Få den rå rundturen
Mot pod-en, ikke en CDN. Følg avviket like nøye som gjennomsnittet: jitter får en arm til å hakke, ikke gjennomsnittlig latens.
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2Mål opplastingen du har, ikke den du betaler for
Opplasting i boligområder er vanligvis en brøkdel av nedlasting, og det er tallet i båndbreddetabellen ovenfor.
bash# on the pod iperf3 -s # on the robot machine, -R omitted so this measures upload iperf3 -c <pod-host> -t 30 - 3Les klientens egen latenslogg
LeRobot-robotklienten logger server-til-klient-latens og deserialiseringstid for hver chunk. På rute B trenger du ingen eksterne verktøy.
textReceived action chunk for step #240 | Latest action: #232 | Incoming actions: 240:289 | Network latency (server->client): 187.44ms | Deserialization time: 3.10ms - 4Se handlingskøen tømmes
Send med
--debug_visualize_queue_size=Trueog klienten plotter køstørrelsen under kjøring. Hvis den gjentatte ganger treffer null, er du tom for budsjett: senk fps, øk actions_per_chunk, eller øk chunk_size_threshold slik at observasjoner sendes ut oftere.bashpython -m lerobot.async_inference.robot_client \ ... \ --debug_visualize_queue_size=True
Hva fjerninferens faktisk er bra for
- Du kan evaluere en policy med 3 milliarder parametere på ekte maskinvare uten å eie et kort som koster mer enn armen.
- GPU-en leies per time, så et mislykket sjekkpunkt koster et par dollar.
- Robotsiden forblir liten: lerobot-drivere, to kameraer, en seriell port, og du bytter sjekkpunkter uten å røre den.
- Ukomprimerte observasjoner dominerer nettverkskostnaden, og boligopplasting er den begrensende faktoren.
- Jitter skader mer enn latens: en forbindelse med et gjennomsnitt på 40 ms med topper til 300 ms hakker der en stabil 120 ms forbindelse ikke gjør det.
- Raske reaktive oppgaver overlever ikke rundturen uansett horisont.
- Begge serverne leveres uautentisert i CLI-form, så tunnelarbeidet er ditt.
- En tapt forbindelse midt i en datapakke etterlater armen med en utdatert handling. Legg til din egen vakthund på robotsiden.
| Oppgave | Fungerer over det offentlige internett? | Hvorfor |
|---|---|---|
| Pick a static object, place it in a bin | Ja | Ingenting beveger seg mellom observasjon og handling. |
| Stack blocks at a deliberate pace | Ja, ved action_horizon 16 eller mer | Feil akkumuleres sakte nok til å fikses i neste datapakke. |
| Open a drawer, insert an object | Vanligvis | Kontaktrikt, men sakte. Se etter stopp-og-start ved kontakt. |
| Follow a moving object | Nei | Policyen handler basert på en observasjon som er 300 ms til 1 s gammel. |
| Catch, balance, or recover from a slip | Nei | Korreksjonsvinduet er kortere enn én rundtursreise. |
| A 30 Hz synchronous closed loop | Nei | Budsjettet er 33 ms ende-til-ende. Selv et LAN sliter. |
Hvis en fjernkjøring hakker på samme punkt i hver episode, er nettverket sannsynligvis ikke årsaken. En policy som nøler ved samme leddvinkel hver gang, er vanligvis et dataproblem; se feilmodussidene, spesielt en policy som bare fungerer i ett oppsett og tapet faller, men policyen gjør ingenting.
Gjøre det selv vs. gjøre det på AY-Robots
- Lei en GPU på et spotmarked og vent på nok VRAM til en pris du liker.
- Installer CUDA, uv, en ffmpeg torchcodec aksepterer, og GR00T-stakken med submoduler.
- Be om tilgang til den lukkede `nvidia/Cosmos-Reason2-2B`-ryggraden og plasser en token på podden.
- Trekk din checkpoint til podden.
- Start serveren på loopback, og bygg deretter en SSH-tunnel fra robotmaskinen.
- Installer et andre miljø på robotmaskinen for klienten og driverne.
- Match kameranøkler, leddnavn og språkinstruksjonen med det checkpointet så.
- Overvåk podden. En glemt A100 som kjører over natten koster mer enn eksperimentet.
GPU-regningen stopper ikke når roboten stopper. Mesteparten av pengene tapt på fjerninferens går til en server som forble aktiv etter at alle gikk. Sett en alarm, eller automatiser nedstengningen.
- Velg den trente policyen du vil kjøre.
/api/inference/podauto-provisionerer en sky-GPU-pod som serverer den policyen.- Den lokale robotklienten kommuniserer med dette endepunktet. Grunnleggende checkpoints er leverandørenes egne:
nvidia/GR00T-N1.7-3B,nvidia/GR00T-N1.5-3B,lerobot/pi05_base. ACT har ingen. - Podder har en inaktiv vaktbikkje og ødelegger seg selv etter en inaktiv periode, slik at ingenting fortsetter å fakturere i det stille.
- De samme operasjonene er tilgjengelige fra en terminal og for AI-agenter, slik at loopen kan skriptes.
Auto-provisionering fjerner oppsettarbeidet og regningen for glemte podder, ikke fysikken. Inferens må fortsatt sitte ved siden av servoene for raske oppgaver: kontrollsløyfen er 20 til 485 ms per handlingstrinn avhengig av modellen, og offentlige internett-rundturer på toppen av det gjør en fungerende policy om til en nølende en.
- Klientguide for den lokale siden av tilkoblingen
- Kjør din første policy for gjennomgangen
- CLI og MCP-server for den skriptede versjonen
- Sikkerhetsdokumenter

Hva en fjerninferensøkt koster
To tall er viktige: timeprisen for kortet, og hvor lenge du lar det kjøre. Det første er publisert; det andre overrasker folk.
| Kort | Runpod fellesskapssky | Runpod sikker sky | Passende for |
|---|---|---|---|
| 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 | Det samme, litt raskere |
| H100 PCIe 80 GB | 1.99 USD/h | 2.89 USD/h | Raskeste nivå; NVIDIAs 11.7 Hz eager-tall er for en H100 80GB HBM3 |
| L40S 48 GB | 0.79 USD/h | 0.99 USD/h | Kun inferens, over 16 GB-grensen |
| RTX 4090 24 GB | 0.34 USD/h | 0.74 USD/h | SmolVLA, ACT |
Disse prisene ble lest fra Runpods prisside den 23. august 2026, og spotmarkedene er i bevegelse. AY-Robots oppgir en hel kjøring i stedet: 3 til 6 timer til 1.20 til 2.00 USD per time på A100- eller H100-nivået, omtrent 4 til 12 USD for en GR00T- eller Pi0.5-kjøring; 2 til 5 timer til 0.30 til 0.60 USD per time på 24 GB-nivået, 1 til 3 USD for SmolVLA eller ACT. En inferensøkt slår en treningskjøring på kostnad bare hvis du stopper den, noe som er formålet med den inaktive vakthunden. Se faktureringsdokumentasjon og prissiden.

Hvis du heller ikke vil ha nettverket i loopen
Fjerninferens løser et maskinvareproblem og skaper et latensproblem. Noen ganger er det bedre svaret en policy som passer maskinvaren du har.
- ACT, omtrent 80 M parametere og 20 ms per handlingstrinn, 50 episoder minimum, ethvert 24 GB-kort. I et repeterende enkelt-oppsett slår den ofte en ekstern 3 B-modell, fordi den aldri venter på en pakke.
- SmolVLA, omtrent 450 M parametere og 245 ms per handlingstrinn, 30 episoder minimum. Den beholder språkkondisjoneringen som ACT mangler, og lerobot-dokumentene anslår den til omtrent 2 GB ved inferenstid mot omtrent 14 GB for PI0.
- ACT vs GR00T N1.7 for nøyaktighetshalvdelen av avveiningen.
Det finnes også en mellomvei: tren i skyen, evaluer lokalt. Finjustering trenger 80 GB-kortet og bryr seg ikke om latens, så trening av GR00T N1.7 på en SO-100 eksternt er ukontroversielt. Bare evalueringssløyfen har en sanntidsbegrensning; treningsdokumentasjonen og modell- og armmatrisen dekker den halvdelen.
Ingen arm på pulten ennå?
Kjør en ekte SO-100 i nettleseren uten registrering, sammenlign de fem trenbare policyene med deres reelle latensnumre, eller lei en GPU og tren en. Tre måter å starte på, ingen krever maskinvare du ikke eier.
Prøv det uten maskinvareOfte stilte spørsmål
Kan jeg kjøre GR00T N1.7 på en Raspberry Pi hvis GPU-en er ekstern?▾
Ja, det er det klient-server-splitten er til for. Pi-en kjører lerobot-driverne, leser to kameraer og en seriell buss, og sender observasjoner til policy-serveren; den laster aldri modellen. Begrensningen flyttes fra VRAM til opplastingsbåndbredde: to ukomprimerte 640x480 RGB-rammer er 1 843 200 byte per kall, og ingen av stakkene komprimerer dem.
Hvor mye forsinkelse legger nettverket faktisk til?▾
Tur-retur-tid pluss observasjonsoverføringstid. Overføringstid er 14.7 Mbit delt på opplastingsbåndbredden din: omtrent 147 ms på en 100 Mbit/s-kobling, 1.47 s på en 10 Mbit/s-kobling. Begge kommer i tillegg til modellens egen inferenstid, som AY-Robots oppgir som 152 ms for GR00T N1.7 og 485 ms for Pi0.5. Mål med ping og iperf3 mot pod-en, ikke en hastighetstestserver.
Er ekstern inferens god nok for en reell oppgave?▾
For langsom, bevisst plukk-og-plassering, ja. For alt reaktivt, nei. NVIDIAs distribusjonsguide angir det synkrone enkelttrinnskravet til omtrent 33 ms ende-til-ende ved 30 FPS, og bemerker at fangst, nettverk, inferens og etterbehandling rutinemessig overskrider dette uten internett involvert.
Hvilken port bruker serverne, og er det trygt å åpne den?▾
Isaac-GR00Ts PolicyServer bruker som standard port 5555 over ZeroMQ og binder 0.0.0.0 i sin CLI. lerobot bruker som standard port 8080 over gRPC og binder localhost. Ingen av dem er trygge å eksponere: GR00T-klassen støtter en api_token, men run_gr00t_server.py sender aldri en, og lerobot pickler data over en usikker gRPC-kanal, som er CVE-2026-25874. Bind til loopback og bruk en SSH-tunnel.
Fikser oppgradering av lerobot CVE-2026-25874?▾
Ikke per 23. august 2026. CVE-posten lister LeRobot opp til 0.5.1 som berørt, og PyPI leverer 0.6.1, men pull-forespørselen som ville fjerne pickle fra den asynkrone pipelinen er fortsatt åpen, og policy_server.py på main kaller fortsatt pickle.loads på forespørselsdata. Behandle nettverksisolasjon som avbøtende tiltak, ikke en versjonsoppgradering, og anta at klienten på robotsiden også er innenfor omfanget.
Kan jeg bruke lerobots asynkrone klient med et GR00T sjekkpunkt?▾
Ja. lerobot 0.6.1 lister groot i SUPPORTED_POLICIES sammen med act, smolvla, diffusion, tdmpc, vqbet, pi0 og pi05, og både so100_follower og so101_follower er i SUPPORTED_ROBOTS. Send --policy_type=groot og pek --pretrained_name_or_path mot sjekkpunktet ditt. Du får asynkron utførelse, som GR00T SO-100-eksemplet ikke implementerer, på bekostning av pickle-transporten.
Kortversjonen
Ekstern inferens for en 3 B policy er et løst ingeniørproblem med et uløst fysikkproblem knyttet til. Ingeniørarbeidet er to kommandoer og en SSH-tunnel. Fysikken er at en 1.8 MB observasjon må nå en GPU i et annet land og komme tilbake før armen går tom for handlinger. Gjør regnestykket før du leier noe, velg en oppgave som tåler en utdatert observasjon, og øk utførelseshorisonten i stedet for å håpe at koblingen forbedres.
Hvis du ikke har spilt inn et datasett ennå, spill inn ditt første datasett og SO-100 oppsettguide kommer først, og LeRobot datasettformat oppføringen forklarer hva opptakeren skriver. Bakgrunn finnes i visjon-språk-handling-modeller og arbeidet med flyt-matching policy; arenaoppføringen lenker hvert benchmark-nummer til en kilde.
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
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