AY-Robots prøveside: tre måter å starte uten å eie en robot, inkludert leie av en GPU for policy-inferens
GR00T N1.7FjerninferensSky-GPULeRobotSO-100Ventetid

Kjør GR00T-inferens uten lokal GPU

AY-Robots ResearchAugust 23, 202619 min lesetid

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.

PolicyParametreInferens per handlingstrinnGPU-nivå for treningMin. episoderDatasettformat
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
AY-Robots policy-side som sammenligner de fem trenbare policyene etter parametere, GPU-nivå, inferenslatens og minimum antall episoder
De samme fem radene på /policies. Latenskolonnen avgjør om en policy overlever et nettverkshopp.

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.

ACT har ingen grunnmodell

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 PolicyServerlerobot asynkron inferens
Inngangspunktgr00t/eval/run_gr00t_server.pypython -m lerobot.async_inference.policy_server
TransportZeroMQ REQ/REPgRPC, add_insecure_port / insecure_channel
Serialiseringmsgpack + msgpack_numpy, allow_pickle=False enforcedpickle.dumps / pickle.loads, marked # nosec
Standardport55558080
Standard binding0.0.0.0, alle grensesnittlocalhost
Autentiseringapi_token supported by the class, not passed by the CLIingen
Klient-tidsavbrudd15000 ms (PolicyClient timeout_ms)2 s tidsavbrudd for observasjonskø
Utførelsesmodellsynkron: blokker, deretter utfør bitenasynkron: 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.

  1. 1
    Installer GR00T på den leide GPU-boksen

    Submoduler er påkrevd, og git-lfs må eksistere før klonen, ellers vil parquet-filene i demo_data ankomme som pekere. flash-attn og TensorRT følger med standardinstallasjonen. Fellen på et ferskt pod-image: torchcodec 0.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 med Could not load libtorchcodec. Installer en FFmpeg under 8 og legg bibliotekene dens på 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
    Autentiser mot den gatede ryggraden

    Hvert GR00T N1.7 sjekkpunkt, inkludert din egen finjustering, laster den gatede nvidia/Cosmos-Reason2-2B ved første bruk. Be om tilgang på modellsiden og logg inn på pod-en, ellers vil lasting feile med en GatedRepoError.

    bash
    uv run huggingface-cli login
    # or:  export HF_TOKEN=<your_token>
  3. 3
    Start policy-serveren

    Pek --model-path til sjekkpunktkatalogen din; på den stien ignorerer serveren --modality-config-path, som kun leses på replay-stien. Utelat --model-path og send --dataset-path pluss --execution-horizon i stedet for en ReplayPolicy som spiller av innspilte handlinger, den billigste måten å bevise at kablingen fungerer.

    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
    Tunnel 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
  5. 5
    Kjør robotklienten ved siden av servoene

    Klienten trenger sitt eget uv-miljø: den ønsker lerobots robotdrivere, ikke treningsstakken. eval_so100.py importerer so100_follower, so101_follower og koch_follower, så send --robot.type som samsvarer med armen din (den oppstrøms README bruker so101_follower). Kameranøkler må samsvare med treningen: adapteren leser nøyaktig front og wrist, og å bytte dem viser policyen feil visning.

    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"
To standardinnstillinger som kan skape problemer

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.

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
Policy-server på GPU-en, robotklient på maskinen med USB-portene

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

ParameterVerdi i lerobot 0.6.1-kodeHva den gjørMerknad
actions_per_chunkingen standard, påkrevdHandlinger returnert per kallDokumentasjonstabellen lister 50; dataclass-feltet har ingen standardverdi, så CLI krever en verdi
chunk_size_threshold0.5Køfyllingsforhold ved eller under hvilket klienten sender en ny observasjonDokumentasjonstabellen sier 0.7; koden og dokumentasjonens eget eksempel sier 0.5
fps30Klientkontrollrate, setter environment_dt = 1/fpsSenk den hvis køen fortsetter å tømmes
inference_latency1/30 s (33.3 ms)Mål for inferenslatens på serverenEt mål, ikke en måling
obs_queue_timeout2 sHvor lenge serveren venter på observasjonskøenEn treg opplink viser seg her først
aggregate_fn_nameweighted_averageHvordan overlappende chunk-regioner blandes0.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
Lerobot policy-serveren har en uoppdatert RCE

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åndbreddeTid for å sende én observasjon (14.7 Mbit)Dom for en 30 FPS arm
10 Mbit/s, typisk hjemmeopplasting~1.47 sUbrukbart. Armen stopper mellom hver datapakke.
25 Mbit/s~0.59 sKun sakte pick-and-place, med lang utførelseshorisont.
50 Mbit/s~0.29 sBrukelig for bevisste oppgaver.
100 Mbit/s~0.15 sGreit for pick-and-place, synlig ved rask bevegelse.
1 Gbit/s fiber eller datasenter~0.015 sModellen 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.

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
Arbeidseksempel: 100 Mbit/s opplink, 30 ms rundturtid, GR00T N1.7

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

Hva modellen koster før nettverket gjør det

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.

  1. 1
    Få 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.

    bash
    ping -c 50 <pod-host>
    # the mdev column is the number that predicts stutter
  2. 2
    Må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
  3. 3
    Les klientens egen latenslogg

    LeRobot-robotklienten logger server-til-klient-latens og deserialiseringstid for hver chunk. På rute B trenger du ingen eksterne verktøy.

    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
    Se handlingskøen tømmes

    Send med --debug_visualize_queue_size=True og 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.

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

Hva fjerninferens faktisk er bra for

Policy på en leid GPU, arm på skrivebordet ditt
Fordeler
  • 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.
Ulemper
  • 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.
OppgaveFungerer over det offentlige internett?Hvorfor
Pick a static object, place it in a binJaIngenting beveger seg mellom observasjon og handling.
Stack blocks at a deliberate paceJa, ved action_horizon 16 eller merFeil akkumuleres sakte nok til å fikses i neste datapakke.
Open a drawer, insert an objectVanligvisKontaktrikt, men sakte. Se etter stopp-og-start ved kontakt.
Follow a moving objectNeiPolicyen handler basert på en observasjon som er 300 ms til 1 s gammel.
Catch, balance, or recover from a slipNeiKorreksjonsvinduet er kortere enn én rundtursreise.
A 30 Hz synchronous closed loopNeiBudsjettet 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

  1. Lei en GPU på et spotmarked og vent på nok VRAM til en pris du liker.
  2. Installer CUDA, uv, en ffmpeg torchcodec aksepterer, og GR00T-stakken med submoduler.
  3. Be om tilgang til den lukkede `nvidia/Cosmos-Reason2-2B`-ryggraden og plasser en token på podden.
  4. Trekk din checkpoint til podden.
  5. Start serveren på loopback, og bygg deretter en SSH-tunnel fra robotmaskinen.
  6. Installer et andre miljø på robotmaskinen for klienten og driverne.
  7. Match kameranøkler, leddnavn og språkinstruksjonen med det checkpointet så.
  8. Overvåk podden. En glemt A100 som kjører over natten koster mer enn eksperimentet.
Den inaktive podden er den virkelige kostnaden

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.

AY-Robots MCP-serversiden som viser plattformoperasjoner eksponert som verktøy for AI-agenter
MCP-siden: provisjonering og inferensoperasjoner eksponert som verktøy en agent kan kalle.

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.

KortRunpod fellesskapsskyRunpod sikker skyPassende for
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/hDet samme, litt raskere
H100 PCIe 80 GB1.99 USD/h2.89 USD/hRaskeste nivå; NVIDIAs 11.7 Hz eager-tall er for en H100 80GB HBM3
L40S 48 GB0.79 USD/h0.99 USD/hKun inferens, over 16 GB-grensen
RTX 4090 24 GB0.34 USD/h0.74 USD/hSmolVLA, 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.

AY-Robots kostnadstabell som viser hvilken GPU hver policy trenger, typisk kjøretid og pris, og episoder før en policy er nyttig
Kostnadstabellen på /try: hvilket kort hver modell trenger og hva en kjøring vanligvis koster.

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 maskinvare

Ofte 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

Sources

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started