
Din robotmaskine har ingen GPU. Placer GR00T politikserveren på en lejet cloud GPU, stream handlingsklumper til armen, og lær præcis hvad netværket koster dig.
En Raspberry Pi er nok til at drive en over en seriel bus og trække billeder fra to USB-kameraer. Den er ikke nok til at køre en tre milliarder parameter : NVIDIAs README angiver GR00T N1.7 inferens til én GPU med 16 GB eller mere VRAM. For at se, hvad dit finjusterede checkpoint gør på armen uden at købe et kort, skal du placere politikken på en lejet cloud-GPU, holde robotløkken på maskinen med USB-portene og sende observationer og handlingssegmenter over netværket.
Det virker, det er ikke gratis, og prisen er ikke jævnt fordelt på tværs af opgaver. Nedenfor: NVIDIAs egen politikserver, lerobots asynkrone stak, den aritmetik, der på forhånd fortæller, om din uplink er hurtig nok, og platformruten. Alt sammen kontrolleret mod Isaac-GR00T main-grenen (N1.7 GA) og lerobot 0.6.1 den 23. august 2026.
Hvad du skal vide
- •GR00T N1.7, GR00T N1.5 og Pi0.5 er modeller med ca. 3 milliarder parametre. Ingen af dem passer på en robotcontroller uden en diskret GPU.
- •Isaac-GR00T og lerobot leverer begge en klient-server-opdeling. Du skriver ikke transportlaget.
- •Observationer dominerer netværksomkostningerne, ikke handlinger: to ukomprimerede 640x480 RGB-billeder er 1.843.200 bytes, ca. 14,7 Mbit pr. kald, og ingen af stakkene komprimerer dem.
- •AY-Robots angiver 20 til 485 ms pr. handlingstrin pr. model. Internet-roundtrips kommer oveni.
- •Fjerninferens passer til langsom pick-and-place, ikke hurtig reaktiv bevægelse. En længere eksekveringshorisont køber tid og koster friskhed af observationer.
- •Ingen af serverne er sikre på en offentlig IP som leveret, og lerobots indeholder en uoprettet RCE. Tunnel den.
Hvorfor politikken ikke passer på robotmaskinen
To af de fem politikker AY-Robots kan træne, kører på et arbejdsstationskort, tre gør ikke. Kolonnen nedenfor er pr. handlingstrin, og det er det tal, der konkurrerer med din netværks-roundtrip.
| Politik | Parametre | Inferens pr. handlingstrin | GPU-niveau for træning | Min. episoder | Datasætformat |
|---|---|---|---|---|---|
| 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 |

Læs det som en beslutning, ikke som trivia. på 20 ms pr. trin kører på robotmaskinen, og du tænker aldrig over det igen. på 485 ms har brugt en tredjedel af et sekund, før en pakke forlader din bygning. Sammenligningen af og tilføjer nøjagtighedsaspektet.
GR00T N1.7, GR00T N1.5 og Pi0.5 starter fra et leverandør-checkpoint (nvidia/GR00T-N1.7-3B, nvidia/GR00T-N1.5-3B, lerobot/pi05_base). ACT eksisterer ikke, før du træner den på din egen opgave, så der er intet at servere eksternt, før et træningsjob er kørt. Se ACT på SO-100.
De to klient-server-stakke, der allerede eksisterer
Isaac-GR00T leverer en ZeroMQ request-reply server; lerobot leverer en gRPC server bygget omkring asynkron inferens. Begge accepterer et GR00T checkpoint. lerobots understøttede politikliste 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 | |
|---|---|---|
| Indgangspunkt | 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 |
| Standardbinding | 0.0.0.0, alle grænseflader | localhost |
| Godkendelse | api_token supported by the class, not passed by the CLI | ingen |
| Klient-timeout | 15000 ms (PolicyClient timeout_ms) | 2 s observation queue timeout |
| Eksekveringsmodel | synkron: bloker, udfør derefter chunken | asynkron: udfør, mens den næste chunk beregnes |
Serialiseringsrækken betyder mere, end den ser ud til. GR00T's MsgSerializer afviser object-dtype ndarray-nyttelast i begge retninger, fordi msgpack_numpy ellers ville give dem videre til pickle. lerobot bruger pickle i stedet: policy_server.py kalder pickle.loads på anmodningsdata, robot_client.py bruger pickle til den observation, den sender. Forsvarligt på et betroet LAN, uforsvarligt når porten er tilgængelig fra internettet.
Rute A: NVIDIAs egen GR00T policy-server
Dette er den sti, NVIDIA dokumenterer for SO-100 og SO-101 hardware, og den du skal bruge, hvis dit checkpoint kom fra examples/finetune.sh med --embodiment-tag NEW_EMBODIMENT. Trinene tilføjer, hvad den oprindelige README udelader: at få porten til robotten uden at eksponere den for alle andre.
- 1Installer GR00T på den lejede GPU-boks
Submoduler er påkrævet, og git-lfs skal eksistere før kloningen, ellers ankommer parquet-filerne i
demo_datasom pointere. flash-attn og TensorRT følger med standardinstallationen. Fælden på et nyt pod-image:torchcodec0.8.0 er den eneste understøttede video-backend og indlæser kun FFmpeg 4 til 7. Ubuntu 25.10 og 26.04 leveres med FFmpeg 8, så GR00T fejler medCould not load libtorchcodec. Installer en FFmpeg under 8 og placer dens biblioteker 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')" - 2Autentificer mod den gatede backbone
Hvert GR00T N1.7 checkpoint, inklusive din egen finjustering, indlæser den gatede
nvidia/Cosmos-Reason2-2Bved første brug. Anmod om adgang på modelsiden og log ind på pod'en, ellers mislykkes indlæsningen med enGatedRepoError.bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3Start policy-serveren
Peg
--model-pathmod din checkpoint-mappe; på den sti ignorerer serveren--modality-config-path, som kun læses på replay-stien. Udelad--model-pathog send i stedet--dataset-pathplus--execution-horizonfor en ReplayPolicy, der afspiller optagede handlinger, den billigste måde at bevise, at forbindelsen virker.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 via SSH eller et WireGuard-lignende mesh. Det leverer den kryptering og autentificering, som ZeroMQ-socket'en ikke gør, for omkring 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 - 5Kør robotklienten ved siden af servoerne
Klienten har brug for sit eget uv-miljø: den ønsker lerobots robotdrivere, ikke træningsstakken.
eval_so100.pyimporterer so100_follower, so101_follower og koch_follower, så send--robot.type, der matcher din arm (den oprindelige README bruger so101_follower). Kameranøgler skal matche træningen: adapteren læser præcisfrontogwrist, og at bytte dem viser policy'en den forkerte 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 bruger som standard --host 0.0.0.0, hvilket binder alle grænseflader: på en pod med en offentlig IP er dette et åbent inferens-slutpunkt. Og PolicyServer-klassen accepterer en api_token og validerer den pr. anmodning, men run_gr00t_server.py sender aldrig en, så CLI-serveren er uautentificeret, uanset hvad du konfigurerer. Bind til 127.0.0.1 og tunnel. En ZMQError: Address already in use betyder, at port 5555 er optaget; brug --port.
Rute B: lerobot asynkron inferens
lerobot løser et andet problem. I stedet for at blokere robotten, mens modellen tænker, fortsætter klienten med at behandle den kø, den allerede har, mens serveren beregner den næste del. Dette er handlings-chunking taget videre, den asynkrone stak introduceret med SmolVLA. Det virker også med et GR00T checkpoint.
# 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 ved ikke, hvilken politik den skal betjene, før klientens første handshake fortæller den det, hvilket er praktisk på en lejet pod. De to parametre, der afgør, om armen bevæger sig jævnt, er actions_per_chunk og chunk_size_threshold (lerobot-dokumentationen kalder den anden g, efter SmolVLA-papiret), og de dokumenterede værdier og de leverede værdier stemmer ikke overens.
| Parameter | Værdi i lerobot 0.6.1-kode | Hvad den gør | Bemærk |
|---|---|---|---|
| actions_per_chunk | ingen standard, påkrævet | Handlinger returneret pr. kald | Dokumentationstabellen angiver 50; dataclass-feltet har ingen standard, så CLI'en kræver en værdi |
| chunk_size_threshold | 0.5 | Køfyldningsforhold ved eller under hvilket klienten sender en ny observation | Dokumentationstabellen siger 0.7; koden og dokumentationens eget eksempel siger 0.5 |
| fps | 30 | Klientkontrolrate, sætter environment_dt = 1/fps | Sænk den, hvis køen fortsætter med at 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 længe serveren venter på observationskøen | En langsom uplink viser sig først her |
| aggregate_fn_name | weighted_average | Hvordan overlappende chunk-regioner blandes | 0.3 gammel + 0.7 ny; latest_only, average og conservative leveres også. Registret er AGGREGATE_FUNCTIONS i configs.py, ikke robot_client.py som dokumentationen hævder |
CVE-2026-25874 er uautentificeret fjernkodeudførelse i lerobots asynkrone inferenspipeline: pickle.loads() på data modtaget over en uautentificeret gRPC-kanal uden TLS, tilgængelig via kaldene SendPolicyInstructions, SendObservations og GetActions. CWE-502, CVSS 3.1 basisscore 9.8 fra NVD, 4.0 basisscore 9.3 fra den tildelende CNA. Registreringen angiver LeRobot til og med 0.5.1 som berørt og nævner både politikserveren og robotklienten, så maskinen ved siden af din arm er omfattet. Opgradering er ikke løsningen: registreringen citerer upstream-problem 3047 og patchen, PR 3048, som udskifter pickle med safetensors plus JSON, og den 23. august 2026 er begge stadig åbne. policy_server.py på main kalder stadig pickle.loads på anmodningsdata, mens serve() binder med add_insecure_port. Bind til loopback og videresend aldrig port 8080.
Aritmetikken der afgør, om din forbindelse er hurtig nok
Folk springer dette over og bruger derefter en dag på . Det tager to minutter, og det er næsten altid afgørende.
Den kommenterede observation dict i NVIDIAs eval_so100.py siger, hvad der sendes over netværket: to arrays med form (480, 640, 3) i uint8, seks joint floats, en sprogstreng. Det er 921.600 bytes per frame, 1.843.200 bytes for to kameraer, omkring 14.7 Mbit, og ingen af stakkene JPEG-komprimerer det. Den klump, der kommer tilbage, er et par dusin trin med 6 floats. Din upload bestemmer alt, ikke din download.
| Uploadbåndbredde | Tid til at sende én observation (14.7 Mbit) | Vurdering for en 30 FPS arm |
|---|---|---|
| 10 Mbit/s, typisk hjemme-upload | ~1.47 s | Ubrugelig. Armen stopper mellem hver datapakke. |
| 25 Mbit/s | ~0.59 s | Kun langsom pick-and-place, med en lang udførelseshorisont. |
| 50 Mbit/s | ~0.29 s | Anvendelig til bevidste opgaver. |
| 100 Mbit/s | ~0.15 s | Fint til pick-and-place, synligt ved hurtig bevægelse. |
| 1 Gbit/s fibre eller datacentre | ~0.015 s | Modellen bliver i stedet flaskehalsen. |
Det budget, du skal holde dig inden for
GR00T SO-100-klienten er synkron: den kalder policy.get_action(obs), udfører de første action_horizon trin af chunken ved 30 FPS, og kalder derefter igen. Chunk-størrelse og horisont er forskellige tal: NVIDIAs implementeringsguide anbefaler en action chunk-størrelse på 16, mindst 32 når kombineret med real-time chunking, mens eval_so100.py leverer en udførelseshorisont på 8. Otte trin ved 30 FPS er 267 ms bevægelse per kald, og alt andet skal passe ind i 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 staleAt hæve horisonten er den grove løsning og ikke en gratis en: armen handler ud fra en observation, der nu er gammel. Den principielle løsning er real-time chunking, som beregner den næste chunk, mens den nuværende kører, fryser de handlinger, der garanteres udført, og udfylder resten; RTC-artiklen rapporterer det som robust over for inferensforsinkelse uden genoptræning. Tjek først, hvor det står. NVIDIA markerer RTC som eksperimentel, en lavniveau modelprimitiv, der kan nås via action_head.get_action(..., options={"rtc_overlap_steps": ..., "rtc_frozen_steps": ...}), ikke forbundet til Gr00tPolicy eller server-klient-stien, hvor options er ubrugt, uden tests og uden eksempel. Over en policy-server får du asynkron udførelse, ikke RTC.
NVIDIA benchmark GR00T N1.7 ende-til-ende med 4 denoising-trin og ét 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 den fulde TensorRT-pipeline. En L40 i eager-tilstand tager 128.3 ms (7.8 Hz). NVIDIA kalder 10 Hz det anbefalede minimum for typisk manipulation, og under 10 Hz kun egnet til langsomme, ikke-reaktive opgaver. Dette er genplanlægnings-rater: en 10 Hz policy kan stadig drive en 30 FPS arm gennem action chunking. Et andet kamera bevæger dig den forkerte vej.
Mål det, før du stoler på det
Hvert tal ovenfor er en forudsigelse. Fire kommandoer forvandler det til en måling, som er værd at køre, før man afsætter en pod-time til en opgave, der aldrig ville have fungeret.
- 1Få den rå returtid
Mod pod'en, ikke en CDN. Hold øje med afvigelsen lige så tæt som gennemsnittet: jitter får en arm til at hakke, ikke gennemsnitlig latenstid.
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2Mål den uplink, du har, ikke den, du betaler for
Upload i boliger er normalt en brøkdel af download, 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 - 3Læs klientens egen latenstid-log
LeRobot-robotklienten logger server-til-klient latenstid og deserialiseringstid for hver chunk. På rute B behøver du ingen eksterne værktøjer.
textReceived action chunk for step #240 | Latest action: #232 | Incoming actions: 240:289 | Network latency (server->client): 187.44ms | Deserialization time: 3.10ms - 4Overvåg handlingkøen tømmes
Send
--debug_visualize_queue_size=True, og klienten plotter køstørrelsen under kørsel. Hvis den gentagne gange rammer nul, er du løbet tør for budget: sænk fps, øg actions_per_chunk, eller øg chunk_size_threshold, så observationer sendes ud oftere.bashpython -m lerobot.async_inference.robot_client \ ... \ --debug_visualize_queue_size=True
Hvad fjerninferens faktisk er godt for
- Du kan evaluere en politik med 3 milliarder parametre på ægte hardware uden at eje et kort, der koster mere end armen.
- GPU'en lejes pr. time, så et mislykket checkpoint koster et par dollars.
- Robotsiden forbliver lille: lerobot-drivere, to kameraer, en seriel port, og du kan udskifte checkpoints uden at røre den.
- Ukomprimerede observationer dominerer netværksomkostningerne, og privat upload er den begrænsende faktor.
- Jitter skader mere end latenstid: en forbindelse med et gennemsnit på 40 ms og spidser til 300 ms hakker, hvor en stabil 120 ms forbindelse ikke gør.
- Hurtige reaktive opgaver overlever ikke returrejsen uanset horisont.
- Begge servere leveres uautentificerede i CLI-form, så tunnelarbejdet er dit.
- En afbrudt forbindelse midt i en 'chunk' efterlader armen med en forældet handling. Tilføj din egen watchdog på robotsiden.
| Opgave | Virker over det offentlige internet? | Hvorfor |
|---|---|---|
| Vælg et statisk objekt, placer det i en beholder | Ja | Intet bevæger sig mellem observation og handling. |
| Stabl blokke i et bevidst tempo | Ja, ved action_horizon 16 eller mere | Fejl akkumuleres langsomt nok til at blive rettet i næste 'chunk'. |
| Åbn en skuffe, indsæt et objekt | Normalt | Kontakt-rig, men langsom. Hold øje med stop-og-start ved kontakt. |
| Følg et bevægeligt objekt | Nej | Politikken handler ud fra en observation, der er 300 ms til 1 s gammel. |
| Grib, balancer, eller ret op efter et glid | Nej | Korrektionsvinduet er kortere end én returrejse. |
| En 30 Hz synkron lukket sløjfe | Nej | Budgettet er 33 ms ende-til-ende. Selv et LAN kæmper. |
Hvis en fjernkørsel hakker på samme punkt i hver episode, er netværket sandsynligvis ikke årsagen. En politik, der tøver ved den samme ledvinkel hver gang, er normalt et dataproblem; se siderne om fejltyper, især en politik, der kun virker i én opsætning og tab falder, men politikken gør intet.
Gør det selv vs. gør det på AY-Robots
- Lej en GPU på et spotmarked og vent på tilstrækkelig VRAM til en pris, du kan lide.
- Installer CUDA, uv, en ffmpeg torchcodec accepterer, og GR00T-stakken med submoduler.
- Anmod om adgang til den gatede `nvidia/Cosmos-Reason2-2B` backbone og placer et token på pod'en.
- Træk dit checkpoint ned på pod'en.
- Start serveren på loopback, og opret derefter en SSH-tunnel fra robotmaskinen.
- Installer et andet miljø på robotmaskinen til klienten og driverne.
- Match kameranøgler, lednavne og sproginstruktionen med det, checkpointet så.
- Overvåg pod'en. En glemt A100, der kører natten over, koster mere end eksperimentet.
GPU-regningen stopper ikke, når robotten stopper. De fleste penge tabt på fjerninferens går til en server, der forblev aktiv, efter at alle var gået. Indstil en alarm, eller automatiser nedlukningen.
- Vælg den trænede politik, du vil køre.
- `/api/inference/pod` auto-provisionerer en cloud GPU-pod, der serverer den politik.
- Den lokale robotklient kommunikerer med dette endpoint. Basis-checkpoints er leverandørernes egne: `nvidia/GR00T-N1.7-3B`, `nvidia/GR00T-N1.5-3B`, `lerobot/pi05_base`. ACT har ingen.
- Pods har en inaktiv watchdog og ødelægger sig selv efter en inaktiv periode, så intet fortsætter med at fakturere i stilhed.
- De samme operationer er tilgængelige fra en terminal og for AI-agenter, så løkken kan skriptes.
Automatisk provisionering fjerner opsætningsarbejdet og regningen for glemte pods, men ikke fysikken. Inferens skal stadig sidde tæt på servoerne for hurtige opgaver: kontrolsløjfen er 20 til 485 ms pr. handlingstrin afhængigt af modellen, og offentlige internet-round trips oveni det forvandler en fungerende politik til en tøvende.
- Klientguide for den lokale side af forbindelsen
- Kør din første politik for gennemgangen
- CLI og MCP server for den skriptede version
- Sikkerhedsdokumenter

Hvad en fjerninferenssession koster
To tal er vigtige: kortets timepris, og hvor længe du lader det køre. Det første er offentliggjort; det andet overrasker folk.
| Kort | Runpod community cloud | Runpod secure cloud | Anbefales til |
|---|---|---|---|
| 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, lidt hurtigere |
| H100 PCIe 80 GB | 1.99 USD/h | 2.89 USD/h | Hurtigste niveau; NVIDIAs 11,7 Hz eager-tal er for et H100 80GB HBM3 |
| L40S 48 GB | 0.79 USD/h | 0.99 USD/h | Kun inferens, over 16 GB grænsen |
| RTX 4090 24 GB | 0.34 USD/h | 0.74 USD/h | SmolVLA, ACT |
Disse priser blev aflæst fra Runpods prisside den 23. august 2026, og spotmarkederne bevæger sig. AY-Robots angiver i stedet en hel kørsel: 3 til 6 timer til 1,20 til 2,00 USD per time på A100- eller H100-niveauet, omkring 4 til 12 USD for en GR00T- eller Pi0.5-kørsel; 2 til 5 timer til 0,30 til 0,60 USD per time på 24 GB-niveauet, 1 til 3 USD for SmolVLA eller ACT. En inferenssession slår en træningskørsel på omkostninger kun hvis du stopper den, hvilket er det, den inaktive watchdog er til for. Se faktureringsdokumentation og prissiden.
Hvis du hellere vil undgå netværket i løkken
Fjerninferens løser et hardwareproblem og skaber et latenstidsproblem. Nogle gange er det bedre svar en politik, der passer til den hardware, du har.
- ACT, cirka 80 M parametre og 20 ms pr. handlingstrin, 50 episoder minimum, ethvert 24 GB kort. I et gentagende enkelt-opgave setup slår den ofte en fjern 3 B model, fordi den aldrig venter på en pakke.
- SmolVLA, cirka 450 M parametre og 245 ms pr. handlingstrin, 30 episoder minimum. Den bevarer den sprogkonditionering, som ACT mangler, og lerobot-dokumentationen angiver den til omkring 2 GB ved inferenstid mod cirka 14 GB for PI0.
- ACT vs GR00T N1.7 for nøjagtighedshalvdelen af kompromiset.
Der er også en mellemvej: træn i skyen, evaluer lokalt. Finjustering kræver et 80 GB kort og er ligeglad med latenstid, så træning af GR00T N1.7 på en SO-100 eksternt er ukontroversielt. Kun evalueringssløjfen har en realtidskonstraint; træningsdokumentationen og model- og armmatrixen dækker den halvdel.
Ingen arm på skrivebordet endnu?
Kør en rigtig SO-100 i browseren uden tilmelding, sammenlign de fem trænede politikker med deres reelle latenstider, eller lej en GPU og træn en. Tre måder at starte på, ingen kræver hardware, du ikke ejer.
Prøv det uden hardwareOfte stillede spørgsmål
Kan jeg køre GR00T N1.7 på en Raspberry Pi, hvis GPU'en er fjern?▾
Ja, det er det, klient-server-opdelingen er til for. Pi'en kører lerobot-driverne, læser to kameraer og en seriel bus og sender observationer til policy-serveren; den indlæser aldrig modellen. Begrænsningen flytter sig fra VRAM til upload-båndbredde: to ukomprimerede 640x480 RGB-frames er 1.843.200 bytes pr. kald, og ingen af stakkene komprimerer dem.
Hvor meget latenstid tilføjer netværket egentlig?▾
Round-trip-tid plus observationsoverførselstid. Overførselstiden er 14.7 Mbit divideret med din upload-båndbredde: cirka 147 ms på en 100 Mbit/s forbindelse, 1.47 s på en 10 Mbit/s forbindelse. Begge kommer oveni modellens egen inferenstid, som AY-Robots angiver som 152 ms for GR00T N1.7 og 485 ms for Pi0.5. Mål med ping og iperf3 mod pod'en, ikke en hastighedstestserver.
Er fjerninferens god nok til en reel opgave?▾
Til langsom, bevidst pick-and-place, ja. Til noget reaktivt, nej. NVIDIAs implementeringsguide angiver det synkrone enkelttrins-krav til cirka 33 ms ende-til-ende ved 30 FPS og bemærker, at optagelse, netværk, inferens og efterbehandling rutinemæssigt overskrider dette, selv uden internet involveret.
Hvilken port bruger serverne, og er det sikkert at åbne den?▾
Isaac-GR00T's PolicyServer bruger som standard port 5555 over ZeroMQ og binder 0.0.0.0 i sin CLI. lerobot's bruger som standard port 8080 over gRPC og binder localhost. Ingen af dem er sikre at eksponere: GR00T-klassen understøtter en api_token, men run_gr00t_server.py sender aldrig en, og lerobot pickler data over en usikker gRPC-kanal, hvilket er CVE-2026-25874. Bind til loopback og brug en SSH-tunnel.
Løser en opgradering af lerobot CVE-2026-25874?▾
Ikke pr. 23. august 2026. CVE-registret angiver LeRobot op til 0.5.1 som påvirket, og PyPI leverer 0.6.1, men pull-anmodningen, der ville fjerne pickle fra den asynkrone pipeline, er stadig åben, og policy_server.py på main kalder stadig pickle.loads på anmodningsdata. Betragt netværksisolation som afbødningen, ikke en versionsopgradering, og antag, at klienten på robotsiden også er omfattet.
Kan jeg bruge lerobots asynkrone klient med et GR00T checkpoint?▾
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 peg --pretrained_name_or_path mod dit checkpoint. Du får asynkron udførelse, som GR00T SO-100-eksemplet ikke implementerer, på bekostning af pickle-transporten.
Den korte version
Fjerninferens for en 3 B politik er et løst ingeniørproblem med et uløst fysikproblem tilknyttet. Ingeniørarbejdet er to kommandoer og en SSH-tunnel. Fysikken er, at en 1.8 MB observation skal nå en GPU i et andet land og komme tilbage, før armen løber tør for handlinger. Lav regnestykket, før du lejer noget, vælg en opgave, der tolererer en forældet observation, og hæv udførelseshorisonten i stedet for at håbe, at forbindelsen forbedres.
Hvis du endnu ikke har optaget et datasæt, optag dit første datasæt og SO-100 opsætningsguide kommer først, og LeRobot datasætformat forklarer, hvad optageren skriver. Baggrunden findes i vision-language-action-modeller og flow-matching policy-arbejdet; arena-indlægget linker 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