
Din robotmaskin har ingen GPU. Placera GR00T-policy-servern på en hyrd moln-GPU, strömma åtgärdschunkar till armen och ta reda på exakt vad nätverket kostar dig.
En Raspberry Pi räcker för att driva en över en seriell buss och hämta bilder från två USB-kameror. Det räcker inte för att köra en tre miljarder parameter : NVIDIAs README anger GR00T N1.7 inferens till en GPU med 16 GB eller mer VRAM. För att se vad din finjusterade checkpoint gör på armen utan att köpa ett kort, placera policyn på en hyrd moln-GPU, behåll robotloopen på maskinen med USB-portarna och skicka observationer och åtgärdsbitar över nätverket.
Det fungerar, det är inte gratis, och priset är inte jämnt fördelat över uppgifter. Nedan: NVIDIAs egen policy-server, lerobots asynkrona stack, aritmetiken som i förväg säger om din upplänk är tillräckligt snabb, och plattformsrutten. Allt kontrollerat mot Isaac-GR00T main branch (N1.7 GA) och lerobot 0.6.1 den 23 augusti 2026.
Vad du behöver veta
- •GR00T N1.7, GR00T N1.5 och Pi0.5 är modeller med ungefär 3 miljarder parametrar. Ingen av dem passar på en robotkontroller utan en diskret GPU.
- •Isaac-GR00T och lerobot levereras båda med en klient-server-uppdelning. Du skriver inte transporten.
- •Observationer dominerar nätverkskostnaden, inte åtgärder: två okomprimerade 640x480 RGB-bilder är 1 843 200 byte, cirka 14,7 Mbit per anrop, och ingen av stackarna komprimerar dem.
- •AY-Robots listar 20 till 485 ms per åtgärdssteg beroende på modell. Interna rundresor kommer utöver det.
- •Fjärrinferens passar för långsam plock-och-placering, inte snabb reaktiv rörelse. En längre exekveringshorisont köper tid och kostar observationsfräschhet.
- •Ingen av servrarna är säker på en publik IP som de levereras, och lerobots har en opatchad RCE. Tunnla den.
Varför policyn inte får plats på robotmaskinen
Två av de fem policyer AY-Robots kan träna körs på ett arbetsstationskort, tre gör det inte. Kolumnen för nedan är per åtgärdssteg, och det är det tal som konkurrerar med din nätverksrundtur.
| Policy | Parametrar | Inferens per åtgärdssteg | GPU-nivå för träning | Min. avsnitt | Datasetformat |
|---|---|---|---|---|---|
| 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 |

Se det som ett beslut, inte kuriosa. på 20 ms per steg körs på robotmaskinen och du behöver aldrig tänka på det igen. på 485 ms har förbrukat en tredjedels sekund innan ett paket lämnar din byggnad. och lägger till noggrannhetssidan.
GR00T N1.7, GR00T N1.5 och Pi0.5 utgår från en leverantörs-checkpoint (nvidia/GR00T-N1.7-3B, nvidia/GR00T-N1.5-3B, lerobot/pi05_base). ACT existerar inte förrän du tränar den för din egen uppgift, så det finns inget att tillhandahålla på distans förrän ett träningsjobb har körts. Se ACT på SO-100.
De två klient-server-stackarna som redan existerar
Isaac-GR00T levererar en ZeroMQ request-reply-server; lerobot levererar en gRPC-server byggd kring asynkron inferens. Båda accepterar en GR00T checkpoint. lerobots lista över stödda policyer i async_inference/constants.py är act, smolvla, diffusion, tdmpc, vqbet, pi0, pi05 och groot; dess robotlista är so100_follower, so101_follower, bi_so_follower och omx_follower.
| Isaac-GR00T PolicyServer | lerobot async inference | |
|---|---|---|
| Startpunkt | 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 |
| Standardbindning | 0.0.0.0, alla gränssnitt | localhost |
| Autentisering | api_token stöds av klassen, skickas inte via CLI | ingen |
| Klienttimeout | 15000 ms (PolicyClient timeout_ms) | 2 s observation queue timeout |
| Exekveringsmodell | synkron: blockera, kör sedan chunk | asynkron: kör medan nästa chunk beräknas |
Serialiseringsraden är viktigare än den ser ut. GR00T:s MsgSerializer vägrar object-dtype ndarray-nyttolaster i båda riktningarna, eftersom msgpack_numpy annars skulle lämna över dem till pickle. lerobot använder pickle istället: policy_server.py anropar pickle.loads på förfrågningsdata, robot_client.py picklar observationen den skickar. Försvarbart på ett betrott LAN, oförsvarbart när porten är nåbar från internet.
Rutt A: NVIDIAs egen GR00T policy-server
Detta är sökvägen NVIDIA dokumenterar för SO-100 och SO-101 hårdvara, och den att använda om din checkpoint kom från examples/finetune.sh med --embodiment-tag NEW_EMBODIMENT. Stegen lägger till det som den ursprungliga README-filen utelämnar: att få porten till roboten utan att exponera den för alla andra.
- 1Installera GR00T på den hyrda GPU-boxen
Submoduler krävs, och git-lfs måste finnas innan kloningen, annars kommer parquet-filerna i
demo_datasom pekare. flash-attn och TensorRT ingår i standardinstallationen. Fällan på en ny pod-avbildning:torchcodec0.8.0 är den enda videobackend som stöds och laddar endast FFmpeg 4 till 7. Ubuntu 25.10 och 26.04 levereras med FFmpeg 8, så GR00T misslyckas medCould not load libtorchcodec. Installera en FFmpeg under version 8 och lägg dess bibliotek 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')" - 2Autentisera mot den gated backbone
Varje GR00T N1.7 checkpoint, inklusive din egen finjustering, laddar den gated
nvidia/Cosmos-Reason2-2Bvid första användningen. Begär åtkomst på modellsidan och logga in på podden, annars misslyckas laddningen med enGatedRepoError.bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3Starta policy-servern
Peka
--model-pathmot din checkpoint-katalog; på den sökvägen ignorerar servern--modality-config-path, som endast läses på replay-sökvägen. Utelämna--model-pathoch skicka istället--dataset-pathplus--execution-horizonför en ReplayPolicy som spelar upp inspelade åtgärder, det billigaste sättet att bevisa att kopplingen fungerar.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 - 4Tunna port 5555 till robotmaskinen
Bind till loopback, som ovan, och överför porten via SSH eller ett WireGuard-liknande nät. Detta tillhandahåller den kryptering och autentisering som ZeroMQ-socketen inte gör, för ungefär en 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 bredvid servona
Klienten behöver sin egen uv-miljö: den vill ha lerobots robotdrivrutiner, inte träningsstacken.
eval_so100.pyimporterar so100_follower, so101_follower och koch_follower, så skicka--robot.typesom matchar din arm (den ursprungliga README använder so101_follower). Kameranycklar måste matcha träningen: adaptern läser exaktfrontochwrist, och att byta dem visar policyn fel vy.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 använder som standard --host 0.0.0.0, vilket binder varje gränssnitt: på en pod med en publik IP-adress blir detta en öppen inferens-slutpunkt. Och klassen PolicyServer accepterar en api_token och validerar den per förfrågan, men run_gr00t_server.py skickar aldrig en sådan, så CLI-servern är oautentiserad oavsett vad du konfigurerar. Bind till 127.0.0.1 och tunnla. Ett ZMQError: Address already in use betyder att port 5555 är upptagen; skicka med --port.
Rutt B: lerobot asynkron inferens
lerobot löser ett annat problem. Istället för att blockera roboten medan modellen tänker, fortsätter klienten att stega igenom kön den redan har medan servern beräknar nästa del. Detta är åtgärdssegmentering vidareutvecklat, den asynkrona stacken som introducerades med SmolVLA. Det fungerar även med en 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=TrueServern startar tom: den vet inte vilken policy den ska tillhandahålla förrän klientens första handskakning berättar det, vilket är bekvämt på en hyrd pod. De två inställningarna som avgör om armen rör sig smidigt är actions_per_chunk och chunk_size_threshold (lerobot-dokumentationen kallar den andra g, efter SmolVLA-artikeln), och de dokumenterade värdena och de levererade värdena stämmer inte överens.
| Parameter | Värde i lerobot 0.6.1-kod | Vad den gör | Anmärkning |
|---|---|---|---|
| actions_per_chunk | inget standardvärde, obligatoriskt | Åtgärder som returneras per anrop | Dokumentationstabellen listar 50; dataclass-fältet har inget standardvärde, så CLI kräver ett värde |
| chunk_size_threshold | 0.5 | Köfyllnadsgrad vid eller under vilken klienten skickar en ny observation | Dokumentationstabellen säger 0.7; koden och dokumentationens eget exempel säger 0.5 |
| fps | 30 | Klientens kontrollfrekvens, sätter environment_dt = 1/fps | Sänk den om kön fortsätter att tömmas |
| inference_latency | 1/30 s (33.3 ms) | Målad inferenslatens på servern | Ett mål, inte en mätning |
| obs_queue_timeout | 2 s | Hur länge servern väntar på observationskön | En långsam upplänk syns här först |
| aggregate_fn_name | weighted_average | Hur överlappande chunk-regioner blandas | 0.3 gammalt + 0.7 nytt; latest_only, average och conservative levereras också. Registret är AGGREGATE_FUNCTIONS i configs.py, inte robot_client.py som dokumentationen hävdar |
CVE-2026-25874 är oautentiserad fjärrkörning av kod i lerobots asynkrona inferenspipeline: pickle.loads() på data som tas emot över en oautentiserad gRPC-kanal utan TLS, nåbar via SendPolicyInstructions, SendObservations och GetActions anrop. CWE-502, CVSS 3.1 baspoäng 9.8 från NVD, 4.0 baspoäng 9.3 från den tilldelande CNA. Posten listar LeRobot till och med 0.5.1 som påverkad och nämner både policyservern och robotklienten, så maskinen bredvid din arm är inom räckvidd. Uppgradering är inte lösningen: posten hänvisar till uppströmsärende 3047 och patchen, PR 3048, som byter ut pickle mot safetensors plus JSON, och den 23 augusti 2026 är båda fortfarande öppna. policy_server.py på main anropar fortfarande pickle.loads på förfrågningsdata medan serve() binder med add_insecure_port. Bind till loopback och vidarebefordra aldrig port 8080.
Aritmetiken som avgör om din länk är tillräckligt snabb
Folk hoppar över detta och lägger sedan en dag på . Det tar två minuter och är nästan alltid avgörande.
Den kommenterade observationsordlistan i NVIDIAs eval_so100.py anger vad som skickas över nätverket: två arrayer med formen (480, 640, 3) i uint8, sex led-flyttal, en språksträng. Det är 921 600 byte per bildruta, 1 843 200 byte för två kameror, cirka 14,7 Mbit, och ingen av stackarna JPEG-komprimerar det. Datablocket som kommer tillbaka är ett par dussin steg med 6 flyttal. Din uppladdning avgör allt, inte din nedladdning.
| Uppladdningsbandbredd | Tid för att skicka en observation (14,7 Mbit) | Bedömning för en 30 FPS-arm |
|---|---|---|
| 10 Mbit/s, typisk hemma-uppladdning | ~1.47 s | Oanvändbart. Armen stannar mellan varje datablock. |
| 25 Mbit/s | ~0.59 s | Endast långsam plock-och-placering, med en lång exekveringshorisont. |
| 50 Mbit/s | ~0.29 s | Användbart för avsiktliga uppgifter. |
| 100 Mbit/s | ~0.15 s | Bra för plock-och-placering, märkbart vid snabba rörelser. |
| 1 Gbit/s fiber eller datacenter | ~0.015 s | Modellen blir flaskhalsen istället. |
Budgeten du måste hålla dig inom
GR00T SO-100-klienten är synkron: den anropar policy.get_action(obs), exekverar de första action_horizon steg av chunken med 30 FPS, och anropar sedan igen. Chunkstorlek och horisont är olika siffror: NVIDIAs distributionsguide rekommenderar en action chunk-storlek på 16, minst 32 i kombination med realtidschunking, medan eval_so100.py levererar en exekveringshorisont på 8. Åtta steg vid 30 FPS motsvarar 267 ms rörelse per anrop, och allt annat måste rymmas inom 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 staleAtt höja horisonten är en grov lösning och inte gratis: armen agerar utifrån en observation som nu är gammal. Den principiella lösningen är realtidschunking, som beräknar nästa chunk medan den nuvarande körs, fryser de åtgärder som garanterat kommer att exekveras och fyller i resten; RTC-rapporten rapporterar att det är robust mot inferensfördröjning utan omträning. Kontrollera först var det står. NVIDIA markerar RTC som experimentellt, en lågnivåmodell-primitiv som kan nås via action_head.get_action(..., options={"rtc_overlap_steps": ..., "rtc_frozen_steps": ...}), inte inkopplad i Gr00tPolicy eller server-klient-vägen, där options är oanvänd, utan tester och utan exempel. Över en policy-server får du asynkron exekvering, inte RTC.
NVIDIA benchmarkar GR00T N1.7 från början till slut med 4 denoising-steg och en 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-läge tar 128.3 ms (7.8 Hz). NVIDIA kallar 10 Hz för det rekommenderade minimumet för typisk manipulation, och under 10 Hz lämpligt endast för långsamma, icke-reaktiva uppgifter. Dessa är omplaneringshastigheter: en 10 Hz policy kan fortfarande driva en 30 FPS arm genom action chunking. En andra kamera för dig åt fel håll.
Mät det innan du litar på det
Varje siffra ovan är en förutsägelse. Fyra kommandon förvandlar den till en mätning, värd att köra innan du lägger en pod-timme på en uppgift som aldrig skulle fungera.
- 1Få den råa tur och retur-tiden
Mot podden, inte en CDN. Följ avvikelsen lika noga som medelvärdet: jitter får en arm att hacka, inte genomsnittlig latens.
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2Mät upplänken du har, inte den du betalar för
Bostadsanslutningens uppladdningshastighet är vanligtvis en bråkdel av nedladdningshastigheten, och det är det numret i bandbreddstabellen ovan.
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 latenslogg
Lerobot-robotklienten loggar server-till-klient-latens och deserialiseringstid för varje chunk. På rutt B behöver du inga externa verktyg.
textReceived action chunk for step #240 | Latest action: #232 | Incoming actions: 240:289 | Network latency (server->client): 187.44ms | Deserialization time: 3.10ms - 4Se åtgärdskön tömmas
Skicka med
--debug_visualize_queue_size=Trueoch klienten ritar upp köstorleken vid körning. Om den upprepade gånger når noll har du slut på budget: sänk fps, höj actions_per_chunk, eller höj chunk_size_threshold så att observationer skickas ut oftare.bashpython -m lerobot.async_inference.robot_client \ ... \ --debug_visualize_queue_size=True
Vad fjärrinferens faktiskt är bra för
- Du kan utvärdera en policy med 3 miljarder parametrar på verklig hårdvara utan att äga ett kort som kostar mer än armen.
- GPU:n hyrs per timme, så en misslyckad checkpoint kostar ett par dollar.
- Robotsidan förblir liten: lerobot-drivrutiner, två kameror, en seriell port, och du byter checkpoints utan att röra den.
- Okomprimerade observationer dominerar nätverkskostnaden, och uppladdningshastigheten i bostäder är den begränsande faktorn.
- Jitter skadar mer än latens: en länk med ett genomsnitt på 40 ms med toppar på 300 ms hackar, medan en stabil länk på 120 ms inte gör det.
- Snabba reaktiva uppgifter överlever inte rundresan vid någon horisont.
- Båda servrarna levereras oautentiserade i CLI-form, så tunnelarbetet är ditt.
- En tappad anslutning mitt i en datablock lämnar armen med en föråldrad åtgärka. Lägg till din egen watchdog på robotsidan.
| Uppgift | Fungerar över det publika internet? | Varför |
|---|---|---|
| Välj ett statiskt objekt, placera det i en låda | Ja | Inget rör sig mellan observation och handling. |
| Stapla block i en avsiktlig takt | Ja, vid action_horizon 16 eller mer | Fel ackumuleras tillräckligt långsamt för att åtgärdas i nästa datablock. |
| Öppna en låda, sätt in ett objekt | Oftast | Kontaktrikt men långsamt. Se upp för ryckighet vid kontakt. |
| Följ ett rörligt objekt | Nej | Policyn agerar på en observation som är 300 ms till 1 s gammal. |
| Fånga, balansera eller återhämta sig från ett slir | Nej | Korrigeringsfönstret är kortare än en rundresa. |
| En 30 Hz synkron sluten slinga | Nej | Budgeten är 33 ms från början till slut. Även ett LAN kämpar. |
Om en fjärrkörning hackar vid samma punkt i varje episod, är nätverket förmodligen inte orsaken. En policy som tvekar vid samma ledvinkel varje gång är oftast ett dataproblem; se sidorna om fellägen, i synnerhet en policy som bara fungerar i en enda konfiguration och förlusten minskar men policyn gör ingenting.
Att göra det själv kontra att göra det på AY-Robots
- Hyr en GPU på en spotmarknad och vänta på tillräckligt VRAM till ett pris du gillar.
- Installera CUDA, uv, en ffmpeg torchcodec accepterar, och GR00T-stacken med submoduler.
- Begär åtkomst till den spärrade
nvidia/Cosmos-Reason2-2B-ryggraden och placera en token på podden. - Dra din checkpoint till podden.
- Starta servern på loopback, bygg sedan en SSH-tunnel från robotmaskinen.
- Installera en andra miljö på robotmaskinen för klienten och drivrutinerna.
- Matcha kameranycklar, lednamn och språkinstruktionen med vad checkpointen såg.
- Övervaka podden. En bortglömd A100 som körs över natten kostar mer än experimentet.
GPU-räkningen slutar inte när roboten stannar. De flesta pengar som förloras på fjärrinferens går till en server som förblev igång efter att alla gått. Ställ in ett larm, eller automatisera nedmonteringen.
- Välj den tränade policyn du vill köra.
/api/inference/podautomatiserar provisionering av en moln-GPU-podd som tillhandahåller den policyn.- Den lokala robotklienten kommunicerar med den slutpunkten. Bas-checkpoints är leverantörernas egna:
nvidia/GR00T-N1.7-3B,nvidia/GR00T-N1.5-3B,lerobot/pi05_base. ACT har inga. - Podar har en inaktiv vakthund och förstör sig själva efter en inaktiv period, så inget fortsätter att faktureras tyst.
- Samma operationer är tillgängliga från en terminal och för AI-agenter, så loopen kan skriptas.
Automatisk provisionering tar bort installationsarbetet och räkningen för bortglömda poddar, inte fysiken. Inferens måste fortfarande sitta nära servona för snabba uppgifter: kontrollloopen är 20 till 485 ms per åtgärdssteg beroende på modell, och offentliga internet-rundresor utöver det förvandlar en fungerande policy till en tveksam.
- Klientguide för den lokala sidan av anslutningen
- Kör din första policy för genomgången
- CLI och MCP-server för den skriptade versionen
- Säkerhetsdokumentation

Vad en fjärrinferenssession kostar
Två siffror spelar roll: kortets timpris, och hur länge du låter det vara igång. Den första är publicerad; den andra överraskar folk.
| Kort | Runpod community cloud | Runpod secure cloud | Lämplig för |
|---|---|---|---|
| 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 | Samma, lite snabbare |
| H100 PCIe 80 GB | 1.99 USD/h | 2.89 USD/h | Snabbaste nivån; NVIDIAs 11.7 Hz eager-siffra gäller för ett H100 80GB HBM3 |
| L40S 48 GB | 0.79 USD/h | 0.99 USD/h | Endast inferens, över 16 GB-gränsen |
| RTX 4090 24 GB | 0.34 USD/h | 0.74 USD/h | SmolVLA, ACT |
Dessa priser lästes från Runpods prissida den 23 augusti 2026, och spotmarknaderna rör sig. AY-Robots anger istället en hel körning: 3 till 6 timmar till 1.20 till 2.00 USD per timme på A100- eller H100-nivån, cirka 4 till 12 USD för en GR00T- eller Pi0.5-körning; 2 till 5 timmar till 0.30 till 0.60 USD per timme på 24 GB-nivån, 1 till 3 USD för SmolVLA eller ACT. En inferenssession slår en träningskörning kostnadsmässigt endast om du stoppar den, vilket är vad den inaktiva vakthunden är till för. Se faktureringsdokumentationen och prissidan.

Om du hellre inte vill ha nätverket i loopen
Fjärrinferens löser ett hårdvaruproblem och skapar ett latensproblem. Ibland är det bättre svaret en policy som passar den hårdvara du har.
- ACT, ungefär 80 M parametrar och 20 ms per åtgärdssteg, minst 50 episoder, valfritt 24 GB-kort. I en repetitiv en-uppgiftskonfiguration överträffar den ofta en fjärrstyrd 3 B-modell, eftersom den aldrig väntar på ett paket.
- SmolVLA, ungefär 450 M parametrar och 245 ms per åtgärdssteg, minst 30 episoder. Den behåller språkkonditioneringen som ACT saknar, och lerobot-dokumentationen anger den till cirka 2 GB vid inferenstid jämfört med ungefär 14 GB för PI0.
- ACT vs GR00T N1.7 för den noggrannhetsmässiga halvan av avvägningen.
Det finns också en medelväg: träna i molnet, utvärdera lokalt. Finjustering behöver 80 GB-kortet och bryr sig inte om latens, så att träna GR00T N1.7 på en SO-100 på distans är okontroversiellt. Endast utvärderingsloopen har en realtidsbegränsning; träningsdokumentationen och modell- och armmatrisen täcker den halvan.
Ingen arm på skrivbordet än?
Styr en riktig SO-100 i webbläsaren utan registrering, jämför de fem träningsbara policyerna med deras verkliga latenssiffror, eller hyr en GPU och träna en. Tre sätt att komma igång, inget kräver hårdvara du inte äger.
Prova det utan hårdvaraVanliga frågor
Kan jag köra GR00T N1.7 på en Raspberry Pi om GPU:n är fjärransluten?▾
Ja, det är vad klient-server-uppdelningen är till för. Pi:n kör lerobot-drivrutinerna, läser två kameror och en seriell buss, och skickar observationer till policy-servern; den laddar aldrig modellen. Begränsningen flyttas från VRAM till uppladdningsbandbredd: två okomprimerade 640x480 RGB-ramar är 1 843 200 byte per anrop, och ingen av stackarna komprimerar dem.
Hur mycket latens lägger nätverket faktiskt till?▾
Tur-och-retur-tid plus observationens överföringstid. Överföringstiden är 14.7 Mbit dividerat med din uppladdningsbandbredd: ungefär 147 ms på en 100 Mbit/s-länk, 1.47 s på en 10 Mbit/s-länk. Båda läggs ovanpå modellens egen inferenstid, som AY-Robots listar som 152 ms för GR00T N1.7 och 485 ms för Pi0.5. Mät med ping och iperf3 mot podden, inte en hastighetstestserver.
Är fjärrinferens tillräckligt bra för en verklig uppgift?▾
För långsam, avsiktlig plock-och-placering, ja. För något reaktivt, nej. NVIDIAs distributionsguide anger det synkrona enstegskravet till ungefär 33 ms från början till slut vid 30 FPS, och noterar att infångning, nätverk, inferens och efterbehandling rutinmässigt överskrider detta utan inblandning av internet.
Vilken port använder servrarna och är det säkert att öppna den?▾
Isaac-GR00T:s PolicyServer använder som standard port 5555 över ZeroMQ och binder 0.0.0.0 i sin CLI. lerobot:s använder som standard port 8080 över gRPC och binder localhost. Ingen av dem är säker att exponera: GR00T-klassen stöder en api_token men run_gr00t_server.py skickar aldrig en, och lerobot picklar data över en osäker gRPC-kanal, vilket är CVE-2026-25874. Bind till loopback och använd en SSH-tunnel.
Fixar en uppgradering av lerobot CVE-2026-25874?▾
Inte per den 23 augusti 2026. CVE-posten listar LeRobot upp till 0.5.1 som påverkad och PyPI levererar 0.6.1, men pull-begäran som skulle ta bort pickle från den asynkrona pipelinen är fortfarande öppen, och policy_server.py på main anropar fortfarande pickle.loads på begärandedata. Behandla nätverksisolering som åtgärd, inte en versionsuppgradering, och anta att klienten på robotsidan också omfattas.
Kan jag använda lerobot:s asynkrona klient med en GR00T-checkpoint?▾
Ja. lerobot 0.6.1 listar groot i SUPPORTED_POLICIES tillsammans med act, smolvla, diffusion, tdmpc, vqbet, pi0 och pi05, och både so100_follower och so101_follower finns i SUPPORTED_ROBOTS. Skicka --policy_type=groot och peka --pretrained_name_or_path mot din checkpoint. Du får asynkron exekvering, vilket GR00T SO-100-exemplet inte implementerar, på bekostnad av pickle-transporten.
Kortversionen
Fjärrinferens för en 3 B policy är ett löst ingenjörsproblem med ett olöst fysikproblem kopplat till sig. Ingenjörsarbetet består av två kommandon och en SSH-tunnel. Fysiken är att en 1.8 MB observation måste nå en GPU i ett annat land och komma tillbaka innan armen får slut på åtgärder. Gör beräkningarna innan du hyr något, välj en uppgift som tolererar en föråldrad observation, och höj exekveringshorisonten snarare än att hoppas att länken förbättras.
Om du inte har spelat in en datamängd än, spela in din första datamängd och SO-100 installationsguide kommer först, och LeRobot datamängdsformat förklarar vad inspelaren skriver. Bakgrunden finns i syn-språk-handlingsmodeller och arbetet med flödesmatchande policyer; arena-posten länkar varje benchmark-nummer till en källa.
Sources
- NVIDIA Isaac-GR00T: N1.7-repository och README (16 GB inferensgolv, installation, gated Cosmos-Reason2-2B-ryggrad, FFmpeg-begränsning)
- run_gr00t_server.py: GR00T policy server CLI, ServerConfig standardinställningar (host 0.0.0.0, port 5555) och ReplayPolicy-sökvägen
- server_client.py: PolicyServer och PolicyClient, MsgSerializers allow_pickle=False-gräns, api_token, timeout_ms
- eval_so100.py: SO-100 policyklient, EvalConfig standardinställningar och den synkrona kontrollslingan
- Isaac-GR00T SO100/SO101-exempel: datamängdskonvertering, finjustering och kommandon för utvärdering i sluten slinga
- Isaac-GR00T Real-World Deployment Guide: den synkrona budgeten på 33 ms, stop-and-go, action chunk size, RTC-status
- Isaac-GR00T Hardware Recommendation: inferensfrekvens per GPU och minimikravet på 10 Hz
- Isaac-GR00T Deployment and Inference Guide: benchmarkresultat för latens per komponent
- LeRobot: Asynkron inferens-handledning (PolicyServer, RobotClient, den dokumenterade parametertabellen)
- lerobot async_inference/configs.py: PolicyServerConfig och RobotClientConfig standardinställningar, AGGREGATE_FUNCTIONS-register
- lerobot async_inference/policy_server.py: pickle.loads på förfrågningsdata, add_insecure_port, gRPC-anropsnamnen
- lerobot robot_client.py: gRPC-transport, pickle-serialisering, latensloggning
- CVE-2026-25874: LeRobot osäker deserialisering fjärrkörning av kod via gRPC, påverkad upp till 0.5.1
- Black, Galliker och Levine, Real-Time Execution of Action Chunking Flow Policies (realtids-chunking)
- Runpod GPU-prissättning: timpriser för community och säker molntjänst för A100, H100, L40S och 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