Strona próbna AY-Robots: trzy sposoby na rozpoczęcie pracy bez posiadania robota, w tym wynajem GPU do wnioskowania polityk
GR00T N1.7Zdalne wnioskowanieGPU w chmurzeLeRobotSO-100Opóźnienie

Uruchamianie wnioskowania GR00T bez lokalnego GPU

AY-Robots ResearchAugust 23, 202619 min czytania

Twoja maszyna robota nie ma GPU. Umieść serwer polityk GR00T na wynajętym GPU w chmurze, przesyłaj fragmenty akcji do ramienia i dowiedz się dokładnie, ile kosztuje Cię sieć.

Raspberry Pi wystarczy do sterowania SO-100 przez magistralę szeregową i pobierania klatek z dwóch kamer USB. Nie wystarczy jednak do uruchomienia trzymiliardowego parametru modelu wizualno-językowo-akcyjnego: plik README firmy NVIDIA określa wnioskowanie GR00T N1.7 na jednej karcie GPU z 16 GB lub więcej pamięci VRAM. Aby zobaczyć, co Twój dostrojony GR00T N1.7 punkt kontrolny robi na ramieniu bez kupowania karty, umieść politykę na wynajętej karcie GPU w chmurze, utrzymuj pętlę robota na maszynie z portami USB i wysyłaj obserwacje oraz fragmenty akcji przez sieć.

Działa, nie jest darmowe, a cena nie rozkłada się równomiernie na wszystkie zadania. Poniżej: własny serwer polityk firmy NVIDIA, asynchroniczny stos lerobot, arytmetyka, która z góry mówi, czy Twoje łącze wysyłające jest wystarczająco szybkie, oraz trasa platformy. Wszystko to sprawdzone w stosunku do głównej gałęzi Isaac-GR00T (N1.7 GA) i lerobot 0.6.1 z 23 sierpnia 2026 roku.

Co musisz wiedzieć

  • GR00T N1.7, GR00T N1.5 i Pi0.5 to modele o około 3 miliardach parametrów. Żaden z nich nie mieści się na kontrolerze robota bez dedykowanej karty GPU.
  • Isaac-GR00T i lerobot dostarczają podział klient-serwer. Nie piszesz transportu.
  • Obserwacje dominują w kosztach przesyłu, nie akcje: dwie nieskompresowane klatki RGB 640x480 to 1,843,200 bajtów, około 14.7 Mbit na wywołanie, a żaden stos ich nie kompresuje.
  • AY-Robots podaje od 20 do 485 ms na krok akcji w zależności od modelu. Do tego dochodzą czasy podróży w obie strony przez internet.
  • Zdalne wnioskowanie nadaje się do wolnego podnoszenia i odkładania (pick-and-place), a nie do szybkiego ruchu reaktywnego. Dłuższy horyzont wykonania kupuje czas i kosztuje świeżość obserwacji.
  • Żaden z serwerów nie jest bezpieczny na publicznym adresie IP w dostarczonej formie, a lerobot zawiera niezałatany RCE. Tuneluj go.

Dlaczego polityka nie zmieści się na maszynie robota

Dwie z pięciu polityk, które AY-Robots może trenować, działają na karcie stacji roboczej, trzy nie. Poniższa kolumna dotyczy jednego kroku akcji i jest to liczba, która konkuruje z czasem podróży pakietu w sieci.

PolitykaParametryWnioskowanie na krok akcjiPoziom GPU do trenowaniaMin. epizodyFormat zbioru danych
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
Strona polityk AY-Robots porównująca pięć trenowalnych polityk według parametrów, poziomu GPU, opóźnienia wnioskowania i minimalnej liczby epizodów
Te same pięć wierszy na /policies. Kolumna opóźnienia decyduje, czy polityka przetrwa przeskok sieciowy.

Czytaj to jako decyzję, nie ciekawostkę. przy 20 ms na krok działa na maszynie robota i nigdy więcej o tym nie myślisz. przy 485 ms zużywa jedną trzecią sekundy, zanim pakiet opuści Twój budynek. i dodają stronę dokładności.

ACT nie ma modelu bazowego

GR00T N1.7, GR00T N1.5 i Pi0.5 zaczynają od punktu kontrolnego dostawcy (nvidia/GR00T-N1.7-3B, nvidia/GR00T-N1.5-3B, lerobot/pi05_base). ACT nie istnieje, dopóki nie zostanie wytrenowany na własnym zadaniu, więc nie ma nic do zdalnego serwowania, dopóki nie zostanie uruchomione zadanie treningowe. Zobacz ACT on SO-100.

Dwa istniejące stosy klient-serwer

Isaac-GR00T dostarcza serwer żądanie-odpowiedź ZeroMQ; lerobot dostarcza serwer gRPC zbudowany wokół asynchronicznej inferencji. Oba akceptują GR00T punkt kontrolny. Lista obsługiwanych polityk lerobot w async_inference/constants.py to act, smolvla, diffusion, tdmpc, vqbet, pi0, pi05 i groot; jego lista robotów to so100_follower, so101_follower, bi_so_follower i omx_follower.

Isaac-GR00T PolicyServerlerobot async inference
Punkt wejściagr00t/eval/run_gr00t_server.pypython -m lerobot.async_inference.policy_server
TransportZeroMQ REQ/REPgRPC, add_insecure_port / insecure_channel
Serializacjamsgpack + msgpack_numpy, allow_pickle=False enforcedpickle.dumps / pickle.loads, marked # nosec
Domyślny port55558080
Domyślne powiązanie0.0.0.0, wszystkie interfejsylocalhost
Uwierzytelnianieapi_token obsługiwany przez klasę, nie przekazywany przez CLIbrak
Limit czasu klienta15000 ms (PolicyClient timeout_ms)2 s observation queue timeout
Model wykonaniasynchroniczny: blokuj, a następnie wykonaj fragmentasynchroniczny: wykonuj, podczas gdy następny fragment jest obliczany

Wiersz serializacji ma większe znaczenie, niż się wydaje. GR00T's MsgSerializer odmawia obsługi ładunków ndarray typu obiektowego w obu kierunkach, ponieważ msgpack_numpy przekazałby je w przeciwnym razie do pickle. lerobot używa pickle zamiast tego: policy_server.py wywołuje pickle.loads na danych żądania, robot_client.py serializuje obserwację, którą wysyła. Możliwe do obrony w zaufanej sieci LAN, niemożliwe do obrony, gdy port jest dostępny z internetu.

Trasa A: Własny serwer polityk GR00T firmy NVIDIA

Jest to ścieżka, którą NVIDIA dokumentuje dla sprzętu SO-100 i SO-101, i której należy użyć, jeśli Twój punkt kontrolny pochodzi z examples/finetune.sh z --embodiment-tag NEW_EMBODIMENT. Kroki te dodają to, co pomija oryginalny plik README: jak przekazać port do robota, nie udostępniając go wszystkim innym.

  1. 1
    Zainstaluj GR00T na wynajętym serwerze GPU

    Podmoduły są wymagane, a git-lfs musi istnieć przed klonowaniem, w przeciwnym razie pliki parquet w demo_data pojawią się jako wskaźniki. flash-attn i TensorRT są dostarczane z domyślną instalacją. Pułapka na świeżym obrazie poda: torchcodec 0.8.0 jest jedynym obsługiwanym backendem wideo i ładuje tylko FFmpeg w wersjach od 4 do 7. Ubuntu 25.10 i 26.04 dostarczają FFmpeg 8, więc GR00T zawodzi z komunikatem Could not load libtorchcodec. Zainstaluj FFmpeg w wersji poniżej 8 i umieść jego biblioteki w 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
    Uwierzytelnij się wobec bramkowanego rdzenia

    Każdy punkt kontrolny GR00T N1.7, w tym Twój własny dostrojony model, ładuje bramkowany nvidia/Cosmos-Reason2-2B przy pierwszym użyciu. Poproś o dostęp na stronie modelu i zaloguj się na podzie, w przeciwnym razie ładowanie zakończy się błędem GatedRepoError.

    bash
    uv run huggingface-cli login
    # or:  export HF_TOKEN=<your_token>
  3. 3
    Uruchom serwer polityk

    Skieruj --model-path na katalog z punktem kontrolnym; na tej ścieżce serwer ignoruje --modality-config-path, który jest odczytywany tylko na ścieżce odtwarzania. Pomiń --model-path i zamiast tego przekaż --dataset-path oraz --execution-horizon dla ReplayPolicy, która odtwarza zarejestrowane akcje, co jest najtańszym sposobem na sprawdzenie poprawności połączeń.

    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
    Tuneluj port 5555 do maszyny robota

    Powiąż z interfejsem loopback, jak powyżej, i przenieś port przez SSH lub sieć typu WireGuard. Zapewnia to szyfrowanie i uwierzytelnianie, których gniazdo ZeroMQ nie oferuje, za około milisekundę.

    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
    Uruchom klienta robota obok serwomechanizmów

    Klient potrzebuje własnego środowiska uv: chce sterowników robota lerobot, a nie stosu treningowego. eval_so100.py importuje so100_follower, so101_follower i koch_follower, więc przekaż --robot.type pasujący do Twojego ramienia (oryginalny plik README używa so101_follower). Klucze kamer muszą odpowiadać tym z treningu: adapter odczytuje dokładnie front i wrist, a ich zamiana pokazuje polityce niewłaściwy widok.

    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"
Dwa domyślne ustawienia, które mogą sprawić problemy

run_gr00t_server.py domyślnie używa --host 0.0.0.0, wiążąc każdy interfejs: na podzie z publicznym IP jest to otwarty punkt końcowy wnioskowania. A klasa PolicyServer akceptuje api_token i waliduje go dla każdego żądania, ale run_gr00t_server.py nigdy go nie przekazuje, więc serwer CLI jest nieuwierzytelniony, niezależnie od konfiguracji. Wiąż z 127.0.0.1 i tuneluj. Błąd ZMQError: Address already in use oznacza, że port 5555 jest zajęty; użyj --port.

Trasa B: asynchroniczne wnioskowanie lerobot

lerobot rozwiązuje inny problem. Zamiast blokować robota, gdy model myśli, klient kontynuuje przetwarzanie kolejki, którą już posiada, podczas gdy serwer oblicza następny fragment. Jest to fragmentowanie akcji rozwinięte dalej, stos asynchroniczny wprowadzony wraz ze SmolVLA. Działa również z punktem kontrolnym GR00T.

bash
# GPU machine
pip install -e ".[async]"
python -m lerobot.async_inference.policy_server \
     --host=127.0.0.1 \
     --port=8080

# robot machine, after tunnelling 8080
python -m lerobot.async_inference.robot_client \
    --server_address=127.0.0.1:8080 \
    --robot.type=so100_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=follower_so100 \
    --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}}" \
    --task="pick up the red block and put it in the bin" \
    --policy_type=groot \
    --pretrained_name_or_path=<user>/my_groot_finetune \
    --policy_device=cuda \
    --actions_per_chunk=50 \
    --chunk_size_threshold=0.5 \
    --debug_visualize_queue_size=True
Serwer polityki na GPU, klient robota na maszynie z portami USB

Serwer uruchamia się pusty: nie wie, jaką politykę obsługuje, dopóki pierwsze uzgadnianie klienta mu tego nie powie, co jest wygodne na wynajętym podzie. Dwa pokrętła, które decydują o płynnym ruchu ramienia, to actions_per_chunk i chunk_size_threshold (dokumentacja lerobot nazywa drugi z nich g, po artykule SmolVLA), a udokumentowane wartości i dostarczone wartości nie zgadzają się.

ParametrWartość w kodzie lerobot 0.6.1Co robiUwaga
actions_per_chunkbrak wartości domyślnej, wymaganeAkcje zwracane na wywołanieTabela w dokumentacji wymienia 50; pole dataclass nie ma wartości domyślnej, więc CLI wymaga wartości
chunk_size_threshold0.5Współczynnik wypełnienia kolejki, przy którym lub poniżej którego klient wysyła nową obserwacjęTabela w dokumentacji podaje 0.7; kod i własny przykład z dokumentacji podają 0.5
fps30Częstotliwość sterowania klienta, ustawia environment_dt = 1/fpsObniż, jeśli kolejka ciągle się opróżnia
inference_latency1/30 s (33.3 ms)Docelowe opóźnienie wnioskowania na serwerzeCel, nie pomiar
obs_queue_timeout2 sJak długo serwer czeka na kolejkę obserwacjiWolne łącze uplink objawia się tu najpierw
aggregate_fn_nameweighted_averageJak mieszane są nakładające się regiony fragmentów0.3 stare + 0.7 nowe; dostarczane są również latest_only, average i conservative. Rejestr to AGGREGATE_FUNCTIONS w configs.py, a nie robot_client.py, jak twierdzi dokumentacja
Serwer polityk lerobot ma niezałatany RCE

CVE-2026-25874 to nieautoryzowane zdalne wykonanie kodu w asynchronicznym potoku wnioskowania lerobot: pickle.loads() na danych otrzymanych przez nieautoryzowany kanał gRPC bez TLS, dostępne poprzez wywołania SendPolicyInstructions, SendObservations i GetActions. CWE-502, wynik bazowy CVSS 3.1 9.8 z NVD, wynik bazowy 4.0 9.3 z przypisanej CNA. Rekord wymienia LeRobot do wersji 0.5.1 jako dotknięty i wymienia zarówno serwer polityk, jak i klienta robota, więc maszyna obok twojego ramienia jest w zasięgu. Aktualizacja nie jest rozwiązaniem: rekord cytuje problem upstream 3047 i łatkę, PR 3048, która zamienia pickle na safetensors plus JSON, a 23 sierpnia 2026 oba są nadal otwarte. policy_server.py w gałęzi main nadal wywołuje pickle.loads na danych żądania, podczas gdy serve() wiąże się z add_insecure_port. Powiąż z loopbackiem i nigdy nie przekierowuj portu 8080.

Arytmetyka, która decyduje, czy twoje łącze jest wystarczająco szybkie

Ludzie to pomijają, a potem spędzają dzień na . Zajmuje to dwie minuty i prawie zawsze jest decydujące.

Skomentowany słownik obserwacji w pliku NVIDIA eval_so100.py mówi, co trafia do sieci: dwie tablice o kształcie (480, 640, 3) w formacie uint8, sześć zmiennoprzecinkowych wartości stawów, ciąg znaków języka. To 921 600 bajtów na klatkę, 1 843 200 bajtów dla dwóch kamer, około 14.7 Mbit, i żaden stos tego nie kompresuje JPEG. Fragment danych powracający to kilkadziesiąt kroków po 6 wartości zmiennoprzecinkowych. Twój upload decyduje o wszystkim, nie download.

Przepustowość wysyłaniaCzas na wysłanie jednej obserwacji (14.7 Mbit)Werdykt dla ramienia 30 FPS
10 Mbit/s, typowe łącze domowe~1.47 sNieużywalne. Ramię zatrzymuje się między każdym fragmentem.
25 Mbit/s~0.59 sTylko wolne podnoszenie i odkładanie, z długim horyzontem wykonania.
50 Mbit/s~0.29 sWykonalne dla zadań wymagających precyzji.
100 Mbit/s~0.15 sDobre dla podnoszenia i odkładania, widoczne przy szybkim ruchu.
1 Gbit/s światłowód lub centrum danych~0.015 sZamiast tego modelem staje się wąskie gardło.

Budżet, w którym musisz się zmieścić

Klient GR00T SO-100 jest synchroniczny: wywołuje policy.get_action(obs), wykonuje pierwsze action_horizon kroki fragmentu z prędkością 30 FPS, a następnie wywołuje ponownie. Rozmiar fragmentu i horyzont to różne liczby: przewodnik wdrożeniowy NVIDIA zaleca rozmiar fragmentu akcji wynoszący 16, co najmniej 32 w połączeniu z fragmentowaniem w czasie rzeczywistym, podczas gdy eval_so100.py dostarcza horyzont wykonania wynoszący 8. Osiem kroków przy 30 FPS to 267 ms ruchu na wywołanie, a wszystko inne musi się w tym zmieścić.

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
Przykład praktyczny: łącze wysyłające 100 Mbit/s, 30 ms opóźnienia w obie strony, GR00T N1.7

Zwiększenie horyzontu to proste, ale nie darmowe rozwiązanie: ramię działa na podstawie obserwacji, która jest już przestarzała. Zasadowym rozwiązaniem jest fragmentowanie w czasie rzeczywistym (real-time chunking - RTC), które oblicza następny fragment, podczas gdy bieżący jest wykonywany, zamraża akcje gwarantowane do wykonania i uzupełnia resztę; artykuł o RTC donosi, że jest ono odporne na opóźnienia wnioskowania bez konieczności ponownego trenowania. Sprawdź najpierw, jak to wygląda. NVIDIA oznacza RTC jako eksperymentalne, prymityw modelu niskiego poziomu dostępny poprzez action_head.get_action(..., options={"rtc_overlap_steps": ..., "rtc_frozen_steps": ...}), niepodłączony do Gr00tPolicy ani ścieżki serwer-klient, gdzie options jest niewykorzystywane, bez testów i przykładów. Przez serwer polityki uzyskujesz asynchroniczne wykonanie, a nie RTC.

Ile kosztuje model, zanim dojdzie do sieci

NVIDIA testuje GR00T N1.7 kompleksowo przy 4 krokach odszumiania z jedną kamerą. Na H100 80GB HBM3: 85.8 ms (11.7 Hz) w trybie PyTorch eager, 48.6 ms (20.6 Hz) z torch.compile, 27.9 ms (35.9 Hz) z pełnym potokiem TensorRT. L40 w trybie eager zajmuje 128.3 ms (7.8 Hz). NVIDIA określa 10 Hz jako zalecane minimum dla typowej manipulacji, a poniżej 10 Hz jako odpowiednie tylko dla wolnych, niereaktywnych zadań. Są to szybkości przeplanowywania: polityka 10 Hz nadal może sterować ramieniem 30 FPS poprzez fragmentowanie akcji. Druga kamera prowadzi w złym kierunku.

Zmierz, zanim zaufasz

Każda z powyższych liczb to przewidywanie. Cztery polecenia zamieniają ją w pomiar, który warto wykonać, zanim poświęcisz godzinę poda na zadanie, które nigdy nie miało szans zadziałać.

  1. 1
    Uzyskaj surowy czas podróży w obie strony

    Wobec poda, nie CDN. Obserwuj odchylenie tak samo uważnie jak średnią: to jitter powoduje zacinanie się ramienia, a nie średnie opóźnienie.

    bash
    ping -c 50 <pod-host>
    # the mdev column is the number that predicts stutter
  2. 2
    Zmierz łącze wysyłania, które masz, a nie to, za które płacisz

    Prędkość wysyłania w sieciach domowych to zazwyczaj ułamek prędkości pobierania i jest to liczba z powyższej tabeli przepustowości.

    bash
    # on the pod
    iperf3 -s
    
    # on the robot machine, -R omitted so this measures upload
    iperf3 -c <pod-host> -t 30
  3. 3
    Odczytaj własny log opóźnień klienta

    Klient robota lerobot loguje opóźnienie serwer-klient i czas deserializacji dla każdego fragmentu. Na trasie B nie potrzebujesz żadnych zewnętrznych narzędzi.

    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
    Obserwuj opróżnianie kolejki akcji

    Przekaż --debug_visualize_queue_size=True, a klient wykreśli rozmiar kolejki w czasie rzeczywistym. Jeśli wielokrotnie osiąga zero, oznacza to, że przekroczyłeś budżet: zmniejsz fps, zwiększ actions_per_chunk lub zwiększ chunk_size_threshold, aby obserwacje były wysyłane częściej.

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

Do czego tak naprawdę przydaje się zdalna inferencja

Polityka na wynajętym GPU, ramię na Twoim biurku
Zalety
  • Możesz ocenić politykę z 3 miliardami parametrów na prawdziwym sprzęcie, nie posiadając karty, która kosztuje więcej niż ramię.
  • GPU jest wynajmowane na godziny, więc nieudany punkt kontrolny kosztuje kilka dolarów.
  • Strona robota pozostaje mała: sterowniki lerobot, dwie kamery, port szeregowy, a punkty kontrolne zmieniasz bez dotykania jej.
Kompromisy
  • Nieskompresowane obserwacje dominują w kosztach przesyłu, a domowe łącze wysyłkowe jest wiążącym ograniczeniem.
  • Jitter boli bardziej niż opóźnienie: łącze ze średnim opóźnieniem 40 ms i skokami do 300 ms zacina się tam, gdzie stabilne łącze 120 ms nie.
  • Szybkie zadania reaktywne nie przetrwają podróży w obie strony w żadnym horyzoncie.
  • Oba serwery są dostarczane bez uwierzytelnienia w formie CLI, więc praca z tunelowaniem należy do Ciebie.
  • Zerwane połączenie w trakcie przesyłania fragmentu pozostawia ramię z nieaktualną akcją. Dodaj własny watchdog po stronie robota.
ZadanieDziała przez publiczny internet?Dlaczego
Podnieś statyczny obiekt, umieść go w pojemnikuTakNic nie porusza się między obserwacją a akcją.
Układaj klocki w umiarkowanym tempieTak, przy action_horizon 16 lub więcejBłędy kumulują się wystarczająco wolno, aby je naprawić w następnym fragmencie.
Otwórz szufladę, włóż obiektZazwyczajBogate w kontakt, ale wolne. Uważaj na zatrzymywanie się i ruszanie przy kontakcie.
Śledź poruszający się obiektNiePolityka działa na obserwacji sprzed 300 ms do 1 s.
Łap, balansuj lub odzyskuj równowagę po poślizguNieOkno korekcji jest krótsze niż jedna podróż w obie strony.
Synchroniczna pętla zamknięta 30 HzNieBudżet wynosi 33 ms od końca do końca. Nawet sieć LAN ma problemy.

Jeśli zdalne uruchomienie zacina się w tym samym miejscu w każdym odcinku, sieć prawdopodobnie nie jest przyczyną. Polityka wahająca się za każdym razem przy tym samym kącie stawu jest zazwyczaj problemem z danymi; zobacz strony trybów awarii, w szczególności politykę, która działa tylko w jednej konfiguracji i spadek straty, ale polityka nic nie robi.

Robienie tego samemu kontra robienie tego na AY-Robots

  1. Wynajmij GPU na rynku spot i poczekaj na wystarczającą ilość VRAM w odpowiadającej Ci cenie.
  2. Zainstaluj CUDA, uv, torchcodec akceptowany przez ffmpeg oraz stos GR00T z podmodułami.
  3. Poproś o dostęp do bramkowanego szkieletu `nvidia/Cosmos-Reason2-2B` i umieść token na podzie.
  4. Pobierz swój punkt kontrolny na poda.
  5. Uruchom serwer na pętli zwrotnej, a następnie zbuduj tunel SSH z maszyny robota.
  6. Zainstaluj drugie środowisko na maszynie robota dla klienta i sterowników.
  7. Dopasuj klucze kamery, nazwy połączeń i instrukcję językową do tego, co widział punkt kontrolny.
  8. Monitoruj poda. Zapomniany A100 działający przez noc kosztuje więcej niż eksperyment.
Bezczynny pod to prawdziwy koszt

Rachunek za GPU nie przestaje rosnąć, gdy robot się zatrzymuje. Większość pieniędzy straconych na zdalnej inferencji idzie na serwer, który pozostał włączony po tym, jak wszyscy odeszli. Ustaw alarm lub zautomatyzuj wyłączanie.

Strona serwera MCP AY-Robots przedstawiająca operacje platformy udostępnione jako narzędzia dla agentów AI
Strona MCP: operacje udostępniania i inferencji udostępnione jako narzędzia, które agent może wywołać.

Ile kosztuje zdalna sesja inferencji

Liczą się dwie liczby: stawka godzinowa karty i czas, przez jaki ją pozostawiasz włączoną. Pierwsza jest publikowana; druga zaskakuje ludzi.

KartaChmura społecznościowa RunpodBezpieczna chmura RunpodOdpowiednie dla
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/hTo samo, nieco szybciej
H100 PCIe 80 GB1.99 USD/h2.89 USD/hNajszybsza warstwa; wartość 11.7 Hz podana przez NVIDIA dotyczy H100 80GB HBM3
L40S 48 GB0.79 USD/h0.99 USD/hTylko wnioskowanie, powyżej progu 16 GB
RTX 4090 24 GB0.34 USD/h0.74 USD/hSmolVLA, ACT

Te stawki zostały odczytane ze strony cennika Runpod 23 sierpnia 2026 roku, a rynki spotowe są zmienne. AY-Robots podaje zamiast tego koszt całego uruchomienia: od 3 do 6 godzin po 1.20 do 2.00 USD za godzinę na warstwie A100 lub H100, około 4 do 12 USD za uruchomienie GR00T lub Pi0.5; od 2 do 5 godzin po 0.30 do 0.60 USD za godzinę na warstwie 24 GB, od 1 do 3 USD dla SmolVLA lub ACT. Sesja wnioskowania przewyższa uruchomienie treningowe pod względem kosztów tylko wtedy, gdy ją zatrzymasz, do czego służy mechanizm nadzoru bezczynności. Zobacz dokumentację rozliczeniową i stronę z cennikiem.

Tabela kosztów AY-Robots pokazująca, jakie GPU jest potrzebne dla każdej polityki, typowy czas uruchomienia i cena, oraz liczbę epizodów, zanim polityka stanie się użyteczna
Tabela kosztów na /try: jaka karta jest potrzebna dla każdego modelu i ile zazwyczaj kosztuje uruchomienie.

Jeśli wolisz nie mieć sieci w pętli

Zdalna inferencja rozwiązuje problem sprzętowy i tworzy problem opóźnień. Czasami lepszym rozwiązaniem jest polityka dopasowana do posiadanego sprzętu.

  • ACT, około 80 M parametrów i 20 ms na krok akcji, minimum 50 epizodów, dowolna karta 24 GB. W konfiguracji powtarzalnych zadań jednostkowych często przewyższa zdalny model 3 B, ponieważ nigdy nie czeka na pakiet.
  • SmolVLA, około 450 M parametrów i 245 ms na krok akcji, minimum 30 epizodów. Zachowuje warunkowanie językowe, którego brakuje ACT, a dokumentacja lerobot podaje, że zajmuje około 2 GB podczas inferencji w porównaniu do około 14 GB dla PI0.
  • ACT vs GR00T N1.7 dla połowy kompromisu dotyczącej dokładności.

Istnieje również droga pośrednia: trenuj w chmurze, oceniaj lokalnie. Dostrajanie wymaga karty 80 GB i nie dba o opóźnienia, więc trenowanie GR00T N1.7 na SO-100 zdalnie jest bezsporne. Tylko pętla ewaluacyjna ma ograniczenie czasowe; dokumentacja szkoleniowa i macierz modeli i ramion obejmują tę połowę.

Nie masz jeszcze ramienia na biurku?

Steruj prawdziwym SO-100 w przeglądarce bez rejestracji, porównaj pięć możliwych do trenowania polityk z ich rzeczywistymi wartościami opóźnień, lub wynajmij GPU i wytrenuj jedną. Trzy sposoby na rozpoczęcie, żaden nie wymaga sprzętu, którego nie posiadasz.

Wypróbuj bez sprzętu

Często zadawane pytania

Czy mogę uruchomić GR00T N1.7 na Raspberry Pi, jeśli GPU jest zdalne?

Tak, do tego służy podział klient-serwer. Pi uruchamia sterowniki lerobot, odczytuje dane z dwóch kamer i magistrali szeregowej, a następnie wysyła obserwacje do serwera polityki; nigdy nie ładuje modelu. Ograniczenie przenosi się z VRAM na przepustowość wysyłania: dwie nieskompresowane klatki RGB 640x480 to 1 843 200 bajtów na wywołanie, a żadna ze stosów ich nie kompresuje.

Ile opóźnienia faktycznie dodaje sieć?

Czas podróży w obie strony plus czas transferu obserwacji. Czas transferu to 14.7 Mbit podzielone przez Twoją przepustowość wysyłania: około 147 ms na łączu 100 Mbit/s, 1.47 s na łączu 10 Mbit/s. Oba czasy nakładają się na własny czas wnioskowania modelu, który AY-Robots podaje jako 152 ms dla GR00T N1.7 i 485 ms dla Pi0.5. Mierz za pomocą ping i iperf3 względem poda, a nie serwera testu prędkości.

Czy zdalne wnioskowanie jest wystarczająco dobre do prawdziwego zadania?

Dla wolnego, celowego podnoszenia i odkładania (pick-and-place), tak. Dla czegokolwiek reaktywnego, nie. Przewodnik wdrożeniowy NVIDIA określa wymaganie synchronicznego pojedynczego kroku na około 33 ms od początku do końca przy 30 FPS i zauważa, że przechwytywanie, sieć, wnioskowanie i post-processing rutynowo przekraczają ten czas bez udziału internetu.

Którego portu używają serwery i czy bezpiecznie jest go otworzyć?

PolicyServer Isaac-GR00T domyślnie używa portu 5555 przez ZeroMQ i wiąże 0.0.0.0 w swoim CLI. lerobot domyślnie używa portu 8080 przez gRPC i wiąże localhost. Żaden z nich nie jest bezpieczny do wystawienia: klasa GR00T obsługuje api_token, ale run_gr00t_server.py nigdy go nie przekazuje, a lerobot serializuje dane za pomocą pickle przez niezabezpieczony kanał gRPC, co jest CVE-2026-25874. Zwiąż z interfejsem loopback i użyj tunelu SSH.

Czy aktualizacja lerobot naprawia CVE-2026-25874?

Nie, stan na 23 sierpnia 2026. Rekord CVE wymienia LeRobot do wersji 0.5.1 jako dotknięty, a PyPI dostarcza 0.6.1, ale pull request, który usunąłby pickle z potoku asynchronicznego, jest nadal otwarty, a policy_server.py w gałęzi main nadal wywołuje pickle.loads na danych żądania. Traktuj izolację sieciową jako środek zaradczy, a nie aktualizację wersji, i załóż, że klient po stronie robota również wchodzi w zakres.

Czy mogę używać klienta asynchronicznego lerobot z punktem kontrolnym GR00T?

Tak. lerobot 0.6.1 wymienia groot w SUPPORTED_POLICIES obok act, smolvla, diffusion, tdmpc, vqbet, pi0 i pi05, a zarówno so100_follower, jak i so101_follower znajdują się w SUPPORTED_ROBOTS. Przekaż --policy_type=groot i wskaż --pretrained_name_or_path na swój punkt kontrolny. Otrzymujesz asynchroniczne wykonanie, którego przykład GR00T SO-100 nie implementuje, kosztem transportu pickle.

Wersja skrócona

Zdalne wnioskowanie dla 3 B polityki to rozwiązany problem inżynierski z nierozwiązanym problemem fizycznym. Inżynieria to dwa polecenia i tunel SSH. Fizyka polega na tym, że obserwacja o rozmiarze 1.8 MB musi dotrzeć do GPU w innym kraju i wrócić, zanim ramię wyczerpie dostępne akcje. Wykonaj obliczenia przed wynajęciem czegokolwiek, wybierz zadanie, które toleruje nieaktualną obserwację, i zwiększ horyzont wykonania, zamiast liczyć na poprawę łącza.

Jeśli jeszcze nie nagrałeś zbioru danych, nagraj swój pierwszy zbiór danych oraz przewodnik konfiguracji SO-100 są najważniejsze, a format zbioru danych LeRobot wpis wyjaśnia, co zapisuje rejestrator. Tło znajduje się w modelach wizualno-językowo-akcyjnych oraz pracy nad polityką dopasowania przepływu; wpis na arenie łączy każdą liczbę benchmarku ze źródłem.

Sources

Sources

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started