
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.
| Polityka | Parametry | Wnioskowanie na krok akcji | Poziom GPU do trenowania | Min. epizody | Format zbioru danych |
|---|---|---|---|---|---|
| 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 |

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.
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 PolicyServer | lerobot async inference | |
|---|---|---|
| Punkt wejścia | gr00t/eval/run_gr00t_server.py | python -m lerobot.async_inference.policy_server |
| Transport | ZeroMQ REQ/REP | gRPC, add_insecure_port / insecure_channel |
| Serializacja | msgpack + msgpack_numpy, allow_pickle=False enforced | pickle.dumps / pickle.loads, marked # nosec |
| Domyślny port | 5555 | 8080 |
| Domyślne powiązanie | 0.0.0.0, wszystkie interfejsy | localhost |
| Uwierzytelnianie | api_token obsługiwany przez klasę, nie przekazywany przez CLI | brak |
| Limit czasu klienta | 15000 ms (PolicyClient timeout_ms) | 2 s observation queue timeout |
| Model wykonania | synchroniczny: blokuj, a następnie wykonaj fragment | asynchroniczny: 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.
- 1Zainstaluj GR00T na wynajętym serwerze GPU
Podmoduły są wymagane, a git-lfs musi istnieć przed klonowaniem, w przeciwnym razie pliki parquet w
demo_datapojawią się jako wskaźniki. flash-attn i TensorRT są dostarczane z domyślną instalacją. Pułapka na świeżym obrazie poda:torchcodec0.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 komunikatemCould not load libtorchcodec. Zainstaluj FFmpeg w wersji poniżej 8 i umieść jego biblioteki wLD_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')" - 2Uwierzytelnij się wobec bramkowanego rdzenia
Każdy punkt kontrolny GR00T N1.7, w tym Twój własny dostrojony model, ładuje bramkowany
nvidia/Cosmos-Reason2-2Bprzy pierwszym użyciu. Poproś o dostęp na stronie modelu i zaloguj się na podzie, w przeciwnym razie ładowanie zakończy się błędemGatedRepoError.bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3Uruchom serwer polityk
Skieruj
--model-pathna katalog z punktem kontrolnym; na tej ścieżce serwer ignoruje--modality-config-path, który jest odczytywany tylko na ścieżce odtwarzania. Pomiń--model-pathi zamiast tego przekaż--dataset-pathoraz--execution-horizondla ReplayPolicy, która odtwarza zarejestrowane akcje, co jest najtańszym sposobem na sprawdzenie poprawności połączeń.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 - 4Tuneluj 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 - 5Uruchom klienta robota obok serwomechanizmów
Klient potrzebuje własnego środowiska uv: chce sterowników robota lerobot, a nie stosu treningowego.
eval_so100.pyimportuje so100_follower, so101_follower i koch_follower, więc przekaż--robot.typepasujący do Twojego ramienia (oryginalny plik README używa so101_follower). Klucze kamer muszą odpowiadać tym z treningu: adapter odczytuje dokładniefrontiwrist, a ich zamiana pokazuje polityce niewłaściwy widok.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 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.
# 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=TrueSerwer 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ę.
| Parametr | Wartość w kodzie lerobot 0.6.1 | Co robi | Uwaga |
|---|---|---|---|
| actions_per_chunk | brak wartości domyślnej, wymagane | Akcje zwracane na wywołanie | Tabela w dokumentacji wymienia 50; pole dataclass nie ma wartości domyślnej, więc CLI wymaga wartości |
| chunk_size_threshold | 0.5 | Współ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 |
| fps | 30 | Częstotliwość sterowania klienta, ustawia environment_dt = 1/fps | Obniż, jeśli kolejka ciągle się opróżnia |
| inference_latency | 1/30 s (33.3 ms) | Docelowe opóźnienie wnioskowania na serwerze | Cel, nie pomiar |
| obs_queue_timeout | 2 s | Jak długo serwer czeka na kolejkę obserwacji | Wolne łącze uplink objawia się tu najpierw |
| aggregate_fn_name | weighted_average | Jak mieszane są nakładające się regiony fragmentów | 0.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 |
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łania | Czas na wysłanie jednej obserwacji (14.7 Mbit) | Werdykt dla ramienia 30 FPS |
|---|---|---|
| 10 Mbit/s, typowe łącze domowe | ~1.47 s | Nieużywalne. Ramię zatrzymuje się między każdym fragmentem. |
| 25 Mbit/s | ~0.59 s | Tylko wolne podnoszenie i odkładanie, z długim horyzontem wykonania. |
| 50 Mbit/s | ~0.29 s | Wykonalne dla zadań wymagających precyzji. |
| 100 Mbit/s | ~0.15 s | Dobre dla podnoszenia i odkładania, widoczne przy szybkim ruchu. |
| 1 Gbit/s światłowód lub centrum danych | ~0.015 s | Zamiast 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ć.
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 staleZwię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.
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ć.
- 1Uzyskaj 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.
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2Zmierz łą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 - 3Odczytaj 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.
textReceived action chunk for step #240 | Latest action: #232 | Incoming actions: 240:289 | Network latency (server->client): 187.44ms | Deserialization time: 3.10ms - 4Obserwuj 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.bashpython -m lerobot.async_inference.robot_client \ ... \ --debug_visualize_queue_size=True
Do czego tak naprawdę przydaje się zdalna inferencja
- 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.
- 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.
| Zadanie | Działa przez publiczny internet? | Dlaczego |
|---|---|---|
| Podnieś statyczny obiekt, umieść go w pojemniku | Tak | Nic nie porusza się między obserwacją a akcją. |
| Układaj klocki w umiarkowanym tempie | Tak, przy action_horizon 16 lub więcej | Błędy kumulują się wystarczająco wolno, aby je naprawić w następnym fragmencie. |
| Otwórz szufladę, włóż obiekt | Zazwyczaj | Bogate w kontakt, ale wolne. Uważaj na zatrzymywanie się i ruszanie przy kontakcie. |
| Śledź poruszający się obiekt | Nie | Polityka działa na obserwacji sprzed 300 ms do 1 s. |
| Łap, balansuj lub odzyskuj równowagę po poślizgu | Nie | Okno korekcji jest krótsze niż jedna podróż w obie strony. |
| Synchroniczna pętla zamknięta 30 Hz | Nie | Budż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
- Wynajmij GPU na rynku spot i poczekaj na wystarczającą ilość VRAM w odpowiadającej Ci cenie.
- Zainstaluj CUDA, uv, torchcodec akceptowany przez ffmpeg oraz stos GR00T z podmodułami.
- Poproś o dostęp do bramkowanego szkieletu `nvidia/Cosmos-Reason2-2B` i umieść token na podzie.
- Pobierz swój punkt kontrolny na poda.
- Uruchom serwer na pętli zwrotnej, a następnie zbuduj tunel SSH z maszyny robota.
- Zainstaluj drugie środowisko na maszynie robota dla klienta i sterowników.
- Dopasuj klucze kamery, nazwy połączeń i instrukcję językową do tego, co widział punkt kontrolny.
- Monitoruj poda. Zapomniany A100 działający przez noc kosztuje więcej niż eksperyment.
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.
- Wybierz wytrenowaną politykę, którą chcesz uruchomić.
- `/api/inference/pod` automatycznie udostępnia pod GPU w chmurze, który obsługuje tę politykę.
- Lokalny klient robota komunikuje się z tym punktem końcowym. Bazowe punkty kontrolne należą do dostawców: `nvidia/GR00T-N1.7-3B`, `nvidia/GR00T-N1.5-3B`, `lerobot/pi05_base`. ACT nie ma żadnych.
- Pody posiadają mechanizm watchdog dla bezczynności i niszczą się po okresie bezczynności, więc nic nie generuje rachunków w tle.
- Te same operacje są dostępne z terminala i dla agentów AI, więc pętlę można skryptować.
Automatyczne udostępnianie usuwa pracę związaną z konfiguracją i rachunki za zapomniane pody, ale nie zmienia fizyki. Inferencja nadal musi znajdować się blisko serwomechanizmów dla szybkich zadań: pętla sterowania wynosi od 20 do 485 ms na krok akcji w zależności od modelu, a dodatkowe opóźnienia związane z publicznym internetem zamieniają działającą politykę w niepewną.
- Przewodnik klienta dla lokalnej strony połączenia
- Uruchom swoją pierwszą politykę dla instruktażu
- CLI i Serwer MCP dla wersji skryptowej
- Dokumentacja bezpieczeństwa

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.
| Karta | Chmura społecznościowa Runpod | Bezpieczna chmura Runpod | Odpowiednie dla |
|---|---|---|---|
| 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 | To samo, nieco szybciej |
| H100 PCIe 80 GB | 1.99 USD/h | 2.89 USD/h | Najszybsza warstwa; wartość 11.7 Hz podana przez NVIDIA dotyczy H100 80GB HBM3 |
| L40S 48 GB | 0.79 USD/h | 0.99 USD/h | Tylko wnioskowanie, powyżej progu 16 GB |
| RTX 4090 24 GB | 0.34 USD/h | 0.74 USD/h | SmolVLA, 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.

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ętuCzę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
- NVIDIA Isaac-GR00T: Repozytorium N1.7 i README (minimalna pamięć inferencji 16 GB, instalacja, bramkowany szkielet Cosmos-Reason2-2B, ograniczenie FFmpeg)
- run_gr00t_server.py: CLI serwera polityk GR00T, domyślne ustawienia ServerConfig (host 0.0.0.0, port 5555) i ścieżka ReplayPolicy
- server_client.py: PolicyServer i PolicyClient, granica allow_pickle=False w MsgSerializer, api_token, timeout_ms
- eval_so100.py: klient polityk SO-100, domyślne ustawienia EvalConfig i synchroniczna pętla sterowania
- Przykład Isaac-GR00T SO100/SO101: konwersja zbioru danych, finetune i komendy ewaluacji w pętli zamkniętej
- Isaac-GR00T Przewodnik Wdrażania w Świecie Rzeczywistym: budżet synchroniczny 33 ms, stop-and-go, rozmiar fragmentu akcji, status RTC
- Isaac-GR00T Rekomendacje Sprzętowe: częstotliwość inferencji na GPU i minimum 10 Hz
- Isaac-GR00T Przewodnik Wdrażania i Inferencji: wyniki benchmarku opóźnień dla poszczególnych komponentów
- LeRobot: Samouczek Asynchronicznej Inferencji (PolicyServer, RobotClient, udokumentowana tabela parametrów)
- lerobot async_inference/configs.py: Domyślne ustawienia PolicyServerConfig i RobotClientConfig, rejestr AGGREGATE_FUNCTIONS
- lerobot async_inference/policy_server.py: pickle.loads na danych żądania, add_insecure_port, nazwy wywołań gRPC
- lerobot robot_client.py: transport gRPC, serializacja pickle, logowanie opóźnień
- CVE-2026-25874: LeRobot niebezpieczna deserializacja zdalnego wykonania kodu przez gRPC, dotyczy wersji do 0.5.1
- Black, Galliker i Levine, Wykonywanie w Czasie Rzeczywistym Polityk Przepływu Fragmentowania Akcji (fragmentowanie w czasie rzeczywistym)
- Cennik GPU Runpod: stawki godzinowe dla chmury społecznościowej i bezpiecznej dla A100, H100, L40S i 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