
Ihre Robotermaschine hat keine GPU. Platzieren Sie den GR00T-Policy-Server auf einer gemieteten Cloud-GPU, streamen Sie Aktions-Chunks an den Arm und erfahren Sie genau, was das Netzwerk Sie kostet.
Ein Raspberry Pi reicht aus, um einen über einen seriellen Bus anzusteuern und Frames von zwei USB-Kameras abzurufen. Es reicht jedoch nicht aus, ein drei Milliarden Parameter umfassendes : NVIDIAs README gibt an, dass die GR00T N1.7 Inferenz eine GPU mit 16 GB oder mehr VRAM erfordert. Um zu sehen, was Ihr feinabgestimmter Checkpoint am Arm leistet, ohne eine Karte zu kaufen, legen Sie die Policy auf eine gemietete Cloud-GPU, lassen Sie die Roboterschleife auf dem Rechner mit den USB-Ports laufen und senden Sie Beobachtungen und Aktions-Chunks über das Netzwerk.
Es funktioniert, ist nicht kostenlos, und der Preis verteilt sich nicht gleichmäßig auf alle Aufgaben. Unten: NVIDIAs eigener Policy-Server, lerobots asynchroner Stack, die Arithmetik, die im Voraus angibt, ob Ihr Uplink schnell genug ist, und der Plattformweg. Alles überprüft mit dem Isaac-GR00T Main Branch (N1.7 GA) und lerobot 0.6.1 am 23. August 2026.
Was Sie wissen müssen
- •GR00T N1.7, GR00T N1.5 und Pi0.5 sind Modelle mit ungefähr 3 Milliarden Parametern. Keines passt auf einen Roboter-Controller ohne diskrete GPU.
- •Isaac-GR00T und lerobot liefern beide eine Client-Server-Trennung. Sie schreiben den Transport nicht selbst.
- •Beobachtungen dominieren die Übertragungskosten, nicht Aktionen: Zwei unkomprimierte 640x480 RGB-Frames sind 1.843.200 Bytes, etwa 14.7 Mbit pro Aufruf, und keiner der Stacks komprimiert sie.
- •AY-Robots listet 20 bis 485 ms pro Aktionsschritt je nach Modell auf. Internet-Roundtrips kommen noch hinzu.
- •Remote-Inferenz eignet sich für langsames Pick-and-Place, nicht für schnelle reaktive Bewegungen. Ein längerer Ausführungshorizont verschafft Zeit und kostet Beobachtungsfrische.
- •Keiner der Server ist im Auslieferungszustand auf einer öffentlichen IP sicher, und lerobot enthält eine ungepatchte RCE. Tunneln Sie ihn.
Warum die Policy nicht auf den Roboterrechner passt
Zwei der fünf Richtlinien, die AY-Robots trainieren kann, laufen auf einer Workstation-Karte, drei nicht. Die Spalte unten ist pro Aktionsschritt, und das ist die Zahl, die mit Ihrer Netzwerk-Roundtrip-Zeit konkurriert.
| Richtlinie | Parameter | Inferenz pro Aktionsschritt | GPU-Klasse für Training | Min. Episoden | Datensatzformat |
|---|---|---|---|---|---|
| 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 |

Betrachten Sie dies als Entscheidung, nicht als Nebensächlichkeit. mit 20 ms pro Schritt läuft auf der Robotermaschine, und Sie müssen nie wieder darüber nachdenken. mit 485 ms hat ein Drittel einer Sekunde verbraucht, bevor ein Paket Ihr Gebäude verlässt. Der und fügen die Genauigkeitsseite hinzu.
GR00T N1.7, GR00T N1.5 und Pi0.5 starten von einem Hersteller-Checkpoint (nvidia/GR00T-N1.7-3B, nvidia/GR00T-N1.5-3B, lerobot/pi05_base). ACT existiert nicht, bis Sie es für Ihre eigene Aufgabe trainieren; daher gibt es nichts, was remote bereitgestellt werden könnte, bevor ein Trainingsjob ausgeführt wurde. Siehe ACT auf SO-100.
Die beiden bereits existierenden Client-Server-Stacks
Isaac-GR00T liefert einen ZeroMQ Request-Reply-Server; lerobot liefert einen gRPC-Server, der um asynchrone Inferenz herum aufgebaut ist. Beide akzeptieren einen GR00T Checkpoint. Die unterstützte Policy-Liste von lerobot in async_inference/constants.py ist act, smolvla, diffusion, tdmpc, vqbet, pi0, pi05 und groot; seine Roboterliste ist so100_follower, so101_follower, bi_so_follower und omx_follower.
| Isaac-GR00T PolicyServer | lerobot async inference | |
|---|---|---|
| Einstiegspunkt | gr00t/eval/run_gr00t_server.py | python -m lerobot.async_inference.policy_server |
| Transport | ZeroMQ REQ/REP | gRPC, add_insecure_port / insecure_channel |
| Serialisierung | msgpack + msgpack_numpy, allow_pickle=False enforced | pickle.dumps / pickle.loads, marked # nosec |
| Standard-Port | 5555 | 8080 |
| Standard-Bindung | 0.0.0.0, alle Schnittstellen | localhost |
| Authentifizierung | api_token wird von der Klasse unterstützt, nicht über die CLI übergeben | keine |
| Client-Timeout | 15000 ms (PolicyClient timeout_ms) | 2 s observation queue timeout |
| Ausführungsmodell | synchron: blockieren, dann den Chunk ausführen | asynchron: ausführen, während der nächste Chunk berechnet wird |
Die Serialisierungszeile ist wichtiger, als es den Anschein hat. GR00Ts MsgSerializer lehnt object-dtype ndarray-Payloads in beide Richtungen ab, da msgpack_numpy sie sonst an pickle übergeben würde. lerobot verwendet stattdessen pickle: policy_server.py ruft pickle.loads auf Anfragedaten auf, robot_client.py pickelt die gesendete Beobachtung. Vertretbar in einem vertrauenswürdigen LAN, unvertretbar, sobald der Port aus dem Internet erreichbar ist.
Route A: NVIDIAs eigener GR00T Policy-Server
Dies ist der von NVIDIA dokumentierte Pfad für SO-100- und SO-101-Hardware und derjenige, der zu verwenden ist, wenn Ihr Checkpoint aus examples/finetune.sh mit --embodiment-tag NEW_EMBODIMENT stammt. Die Schritte ergänzen, was die ursprüngliche README weglässt: den Port zum Roboter zu bringen, ohne ihn für alle anderen freizugeben.
- 1GR00T auf der gemieteten GPU-Box installieren
Submodule sind erforderlich, und git-lfs muss vor dem Klonen vorhanden sein, sonst kommen die Parquet-Dateien in
demo_dataals Pointer an. flash-attn und TensorRT sind in der Standardinstallation enthalten. Die Falle bei einem frischen Pod-Image:torchcodec0.8.0 ist das einzige unterstützte Video-Backend und lädt nur FFmpeg 4 bis 7. Ubuntu 25.10 und 26.04 liefern FFmpeg 8, daher schlägt GR00T mitCould not load libtorchcodecfehl. Installieren Sie ein FFmpeg unter Version 8 und legen Sie dessen Bibliotheken aufLD_LIBRARY_PATHab.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')" - 2Authentifizierung gegenüber dem geschützten Backbone
Jeder GR00T N1.7 Checkpoint, einschließlich Ihrer eigenen Feinabstimmung, lädt beim ersten Gebrauch das geschützte
nvidia/Cosmos-Reason2-2B. Fordern Sie Zugriff auf der Modellseite an und melden Sie sich auf dem Pod an, sonst schlägt das Laden mit einemGatedRepoErrorfehl.bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3Den Policy-Server starten
Verweisen Sie
--model-pathauf Ihr Checkpoint-Verzeichnis; auf diesem Pfad ignoriert der Server--modality-config-path, das nur auf dem Replay-Pfad gelesen wird. Lassen Sie--model-pathweg und übergeben Sie stattdessen--dataset-pathplus--execution-horizonfür eine ReplayPolicy, die aufgezeichnete Aktionen wiedergibt – die günstigste Methode, um die Funktionsweise der Verkabelung zu überprüfen.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 - 4Port 5555 zur Robotermaschine tunneln
Binden Sie wie oben an Loopback und leiten Sie den Port über SSH oder ein WireGuard-ähnliches Mesh weiter. Dies bietet die Verschlüsselung und Authentifizierung, die der ZeroMQ-Socket nicht bietet, für etwa eine Millisekunde.
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 - 5Den Roboter-Client neben den Servos ausführen
Der Client benötigt eine eigene uv-Umgebung: Er benötigt die Robotertreiber von lerobot, nicht den Trainings-Stack.
eval_so100.pyimportiert so100_follower, so101_follower und koch_follower, übergeben Sie also den--robot.type, der Ihrem Arm entspricht (die ursprüngliche README verwendet so101_follower). Kameraschlüssel müssen mit dem Training übereinstimmen: Der Adapter liest genaufrontundwrist, und ein Vertauschen zeigt der Policy die falsche Ansicht.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 verwendet standardmäßig --host 0.0.0.0, wodurch jede Schnittstelle gebunden wird: auf einem Pod mit einer öffentlichen IP ist das ein offener Inferenz-Endpunkt. Und die Klasse PolicyServer akzeptiert einen api_token und validiert diesen pro Anfrage, aber run_gr00t_server.py übergibt nie einen, sodass der CLI-Server unauthentifiziert ist, egal was Sie konfigurieren. Binden Sie an 127.0.0.1 und tunneln Sie. Eine ZMQError: Address already in use bedeutet, dass Port 5555 belegt ist; übergeben Sie --port.
Route B: lerobot asynchrone Inferenz
lerobot löst ein anderes Problem. Anstatt den Roboter zu blockieren, während das Modell nachdenkt, durchläuft der Client die bereits vorhandene Warteschlange weiter, während der Server den nächsten Chunk berechnet. Dies ist Aktions-Chunking, weiterentwickelt, der asynchrone Stack, der mit SmolVLA eingeführt wurde. Es funktioniert auch mit einem 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=TrueDer Server startet leer: Er weiß nicht, welche Richtlinie er bedient, bis der erste Handshake des Clients es ihm mitteilt, was auf einem gemieteten Pod praktisch ist. Die beiden Stellschrauben, die entscheiden, ob der Arm sich reibungslos bewegt, sind actions_per_chunk und chunk_size_threshold (die lerobot-Dokumentation nennt den zweiten g, nach dem SmolVLA-Paper), und die dokumentierten Werte stimmen nicht mit den ausgelieferten Werten überein.
| Parameter | Wert im lerobot 0.6.1 Code | Funktion | Hinweis |
|---|---|---|---|
| actions_per_chunk | kein Standardwert, erforderlich | Aktionen pro Aufruf zurückgegeben | Die Dokumentationstabelle listet 50 auf; das Dataclass-Feld hat keinen Standardwert, daher verlangt die CLI einen Wert |
| chunk_size_threshold | 0.5 | Füllstand der Warteschlange, bei oder unter dem der Client eine neue Beobachtung sendet | Die Dokumentationstabelle sagt 0.7; der Code und das eigene Beispiel der Dokumentation sagen 0.5 |
| fps | 30 | Client-Steuerungsrate, setzt environment_dt = 1/fps | Reduzieren Sie ihn, wenn die Warteschlange ständig leerläuft |
| inference_latency | 1/30 s (33.3 ms) | Ziel-Inferenzlatenz auf dem Server | Ein Ziel, keine Messung |
| obs_queue_timeout | 2 s | Wie lange der Server auf die Beobachtungswarteschlange wartet | Ein langsamer Uplink zeigt sich hier zuerst |
| aggregate_fn_name | weighted_average | Wie überlappende Chunk-Regionen gemischt werden | 0.3 alt + 0.7 neu; latest_only, average und conservative werden ebenfalls ausgeliefert. Das Register ist AGGREGATE_FUNCTIONS in configs.py, nicht robot_client.py, wie die Dokumentation behauptet |
CVE-2026-25874 ist eine nicht authentifizierte Remote Code Execution in lerobots asynchroner Inferenz-Pipeline: pickle.loads() auf Daten, die über einen nicht authentifizierten gRPC-Kanal ohne TLS empfangen werden, erreichbar über die Aufrufe SendPolicyInstructions, SendObservations und GetActions. CWE-502, CVSS 3.1 Basiswert 9.8 von NVD, 4.0 Basiswert 9.3 von der zuweisenden CNA. Der Eintrag listet LeRobot bis 0.5.1 als betroffen auf und nennt sowohl den Policy Server als auch den Roboter-Client, sodass die Maschine neben Ihrem Arm betroffen ist. Ein Upgrade ist nicht die Lösung: Der Eintrag zitiert das Upstream-Problem 3047 und den Patch, PR 3048, der pickle durch safetensors plus JSON ersetzt, und am 23. August 2026 sind beide noch offen. policy_server.py auf main ruft immer noch pickle.loads auf Anfragedaten auf, während serve() mit add_insecure_port bindet. Binden Sie an Loopback und leiten Sie niemals Port 8080 weiter.
Die Arithmetik, die entscheidet, ob Ihre Verbindung schnell genug ist
Leute überspringen dies und verbringen dann einen Tag mit . Es dauert zwei Minuten und ist fast immer entscheidend.
Das kommentierte Beobachtungs-Dict in NVIDIAs eval_so100.py besagt, was über die Leitung geht: zwei Arrays der Form (480, 640, 3) in uint8, sechs Gelenk-Floats, ein Sprach-String. Das sind 921.600 Bytes pro Frame, 1.843.200 Bytes für zwei Kameras, etwa 14,7 Mbit, und keiner der Stacks JPEG-komprimiert es. Der zurückkommende Datenblock besteht aus einigen Dutzend Schritten von 6 Floats. Ihr Upload entscheidet alles, nicht Ihr Download.
| Upload-Bandbreite | Zeit zum Senden einer Beobachtung (14,7 Mbit) | Urteil für einen 30 FPS Arm |
|---|---|---|
| 10 Mbit/s, typischer Heim-Upload | ~1.47 s | Unbrauchbar. Der Arm stoppt zwischen jedem Datenblock. |
| 25 Mbit/s | ~0.59 s | Nur langsames Pick-and-Place, mit langem Ausführungshorizont. |
| 50 Mbit/s | ~0.29 s | Für bewusste Aufgaben brauchbar. |
| 100 Mbit/s | ~0.15 s | Gut für Pick-and-Place, bei schnellen Bewegungen sichtbar. |
| 1 Gbit/s Glasfaser oder Rechenzentrum | ~0.015 s | Stattdessen wird das Modell zum Engpass. |
Das Budget, in das Sie passen müssen
Der GR00T SO-100 Client ist synchron: er ruft policy.get_action(obs), führt die ersten action_horizon Schritte des Chunks mit 30 FPS aus und ruft dann erneut auf. Chunk-Größe und Horizont sind unterschiedliche Zahlen: NVIDIAs Bereitstellungshandbuch empfiehlt eine Action-Chunk-Größe von 16, mindestens 32 in Kombination mit Echtzeit-Chunking, während eval_so100.py einen Ausführungshorizont von 8 liefert. Acht Schritte bei 30 FPS entsprechen 267 ms Bewegung pro Aufruf, und alles andere muss darin Platz finden.
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 staleDen Horizont zu erhöhen ist die grobe Lösung und keine kostenlose: Der Arm agiert auf einer Beobachtung, die nun veraltet ist. Die prinzipielle Lösung ist Echtzeit-Chunking, das den nächsten Chunk berechnet, während der aktuelle läuft, die garantiert auszuführenden Aktionen einfriert und den Rest ergänzt; das RTC-Paper berichtet, dass es robust gegenüber Inferenzverzögerungen ist, ohne erneutes Training. Prüfen Sie zuerst, wie der Stand der Dinge ist. NVIDIA kennzeichnet RTC als experimentell, ein Low-Level-Modellprimitiv, das über action_head.get_action(..., options={"rtc_overlap_steps": ..., "rtc_frozen_steps": ...}), nicht in Gr00tPolicy oder den Server-Client-Pfad integriert, wo options ungenutzt ist, ohne Tests und ohne Beispiel. Über einen Policy-Server erhalten Sie asynchrone Ausführung, nicht RTC.
NVIDIA benchmarkt GR00T N1.7 End-to-End mit 4 Denoising-Schritten und einer Kamera. Auf einer H100 80GB HBM3: 85.8 ms (11.7 Hz) in PyTorch eager, 48.6 ms (20.6 Hz) mit torch.compile, 27.9 ms (35.9 Hz) mit der vollständigen TensorRT-Pipeline. Eine L40 im Eager-Modus benötigt 128.3 ms (7.8 Hz). NVIDIA bezeichnet 10 Hz als das empfohlene Minimum für typische Manipulationen, und unter 10 Hz nur für langsame, nicht-reaktive Aufgaben geeignet. Das sind Neuplanungs-Raten: eine 10 Hz Policy kann einen 30 FPS Arm immer noch durch Action-Chunking steuern. Eine zweite Kamera führt Sie in die falsche Richtung.
Messen Sie es, bevor Sie ihm vertrauen
Jede der oben genannten Zahlen ist eine Vorhersage. Vier Befehle verwandeln sie in eine Messung, die es wert ist, ausgeführt zu werden, bevor man eine Pod-Stunde für eine Aufgabe aufwendet, die ohnehin nie funktioniert hätte.
- 1Den rohen Roundtrip erhalten
Gegen den Pod, nicht gegen ein CDN. Beobachten Sie die Abweichung so genau wie den Mittelwert: Jitter lässt einen Arm stottern, nicht die durchschnittliche Latenz.
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2Messen Sie den Uplink, den Sie haben, nicht den, für den Sie bezahlen
Der Upload im Privatbereich ist in der Regel ein Bruchteil des Downloads, und es ist die Zahl in der obigen Bandbreitentabelle.
bash# on the pod iperf3 -s # on the robot machine, -R omitted so this measures upload iperf3 -c <pod-host> -t 30 - 3Das eigene Latenzprotokoll des Clients lesen
Der LeRobot-Roboterclient protokolliert die Server-zu-Client-Latenz und die Deserialisierungszeit für jeden Chunk. Auf Route B benötigen Sie keine externen Tools.
textReceived action chunk for step #240 | Latest action: #232 | Incoming actions: 240:289 | Network latency (server->client): 187.44ms | Deserialization time: 3.10ms - 4Beobachten, wie die Aktionswarteschlange abläuft
Übergeben Sie
--debug_visualize_queue_size=True, und der Client zeichnet die Warteschlangengröße zur Laufzeit auf. Wenn sie wiederholt Null erreicht, ist Ihr Budget erschöpft: Reduzieren Sie die fps, erhöhen Sie actions_per_chunk oder erhöhen Sie chunk_size_threshold, damit Beobachtungen häufiger gesendet werden.bashpython -m lerobot.async_inference.robot_client \ ... \ --debug_visualize_queue_size=True
Wofür Remote-Inferenz tatsächlich gut ist
- Sie können eine 3-Milliarden-Parameter-Policy auf echter Hardware evaluieren, ohne eine Karte zu besitzen, die mehr kostet als der Arm.
- Die GPU wird pro Stunde gemietet, sodass ein fehlgeschlagener Checkpoint ein paar Dollar kostet.
- Die Roboterseite bleibt klein: lerobot-Treiber, zwei Kameras, ein serieller Port, und Sie tauschen Checkpoints aus, ohne sie zu berühren.
- Unkomprimierte Beobachtungen dominieren die Übertragungskosten, und der private Upload ist der begrenzende Faktor.
- Jitter schadet mehr als Latenz: Eine Verbindung mit durchschnittlich 40 ms und Spitzenwerten von 300 ms stottert, wo eine stabile 120 ms Verbindung nicht stottert.
- Schnelle reaktive Aufgaben überleben die Roundtrip-Zeit in keinem Horizont.
- Beide Server werden unauthentifiziert in CLI-Form ausgeliefert, sodass die Tunneling-Arbeit bei Ihnen liegt.
- Eine unterbrochene Verbindung mitten im Chunk lässt den Arm eine veraltete Aktion halten. Fügen Sie Ihren eigenen Watchdog auf Roboterseite hinzu.
| Aufgabe | Funktioniert über das öffentliche Internet? | Warum |
|---|---|---|
| Ein statisches Objekt aufnehmen, in einen Behälter legen | Ja | Nichts bewegt sich zwischen Beobachtung und Aktion. |
| Blöcke in gemächlichem Tempo stapeln | Ja, bei action_horizon 16 oder mehr | Fehler akkumulieren langsam genug, um im nächsten Chunk behoben zu werden. |
| Eine Schublade öffnen, ein Objekt einlegen | Meistens | Kontaktintensiv, aber langsam. Achten Sie auf Stop-and-Go bei Kontakt. |
| Einem sich bewegenden Objekt folgen | Nein | Die Policy agiert auf einer 300 ms bis 1 s alten Beobachtung. |
| Fangen, balancieren oder sich von einem Rutschen erholen | Nein | Das Korrekturfenster ist kürzer als eine Roundtrip-Zeit. |
| Ein synchroner Regelkreis mit 30 Hz | Nein | Das Budget beträgt 33 ms End-to-End. Selbst ein LAN hat damit Schwierigkeiten. |
Wenn ein Remote-Lauf in jeder Episode an derselben Stelle stottert, ist das Netzwerk wahrscheinlich nicht die Ursache. Eine Policy, die jedes Mal am selben Gelenkwinkel zögert, ist normalerweise ein Datenproblem; siehe die Fehlermodus-Seiten, insbesondere eine Policy, die nur in einem Setup funktioniert und Verlust sinkt, aber die Policy tut nichts.
Es selbst tun vs. es auf AY-Robots tun
- Mieten Sie eine GPU auf einem Spotmarkt und warten Sie auf ausreichend VRAM zu einem Preis, der Ihnen zusagt.
- Installieren Sie CUDA, uv, einen von ffmpeg torchcodec akzeptierten Codec und den GR00T-Stack mit Submodulen.
- Fordern Sie Zugriff auf das geschützte
nvidia/Cosmos-Reason2-2B-Backbone an und platzieren Sie ein Token auf dem Pod. - Ziehen Sie Ihr Checkpoint auf den Pod.
- Starten Sie den Server im Loopback-Modus und erstellen Sie dann einen SSH-Tunnel von der Robotermaschine aus.
- Installieren Sie eine zweite Umgebung auf der Robotermaschine für den Client und die Treiber.
- Passen Sie Kameraschlüssel, Gelenknamen und die Sprachanweisung an das an, was der Checkpoint gesehen hat.
- Überwachen Sie den Pod. Eine vergessene A100, die über Nacht läuft, kostet mehr als das Experiment.
Die GPU-Rechnung stoppt nicht, wenn der Roboter stoppt. Die meisten Verluste bei der Remote-Inferenz entstehen durch Server, die aktiv blieben, nachdem alle gegangen waren. Stellen Sie einen Alarm ein oder automatisieren Sie den Abbau.
- Wählen Sie die trainierte Policy aus, die Sie ausführen möchten.
/api/inference/podprovisioniert automatisch einen Cloud-GPU-Pod, der diese Policy bereitstellt.- Der lokale Roboter-Client kommuniziert mit diesem Endpunkt. Basis-Checkpoints sind die der Anbieter:
nvidia/GR00T-N1.7-3B,nvidia/GR00T-N1.5-3B,lerobot/pi05_base. ACT hat keine. - Pods verfügen über einen Inaktivitäts-Watchdog und zerstören sich nach einer Leerlaufzeit selbst, sodass keine stillen Abrechnungen entstehen.
- Dieselben Operationen sind über ein Terminal und für KI-Agenten verfügbar, sodass der Ablauf skriptgesteuert werden kann.
Die automatische Bereitstellung beseitigt den Einrichtungsaufwand und die Kosten für vergessene Pods, nicht aber die Physik. Die Inferenz muss für schnelle Aufgaben weiterhin neben den Servos sitzen: Die Regelschleife beträgt je nach Modell 20 bis 485 ms pro Aktionsschritt, und zusätzliche Roundtrips über das öffentliche Internet verwandeln eine funktionierende Policy in eine zögerliche.
- Client-Leitfaden für die lokale Seite der Verbindung
- Führen Sie Ihre erste Policy aus für die Schritt-für-Schritt-Anleitung
- CLI und MCP-Server für die skriptgesteuerte Version
- Sicherheitsdokumentation

Was eine Remote-Inferenzsitzung kostet
Zwei Zahlen sind entscheidend: der Stundensatz der Karte und wie lange Sie sie laufen lassen. Die erste ist veröffentlicht; die zweite überrascht die Leute.
| Karte | Runpod Community Cloud | Runpod Secure Cloud | Geeignet 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 | Dasselbe, etwas schneller |
| H100 PCIe 80 GB | 1.99 USD/h | 2.89 USD/h | Schnellste Stufe; NVIDIAs 11,7 Hz Eager-Wert gilt für eine H100 80GB HBM3 |
| L40S 48 GB | 0.79 USD/h | 0.99 USD/h | Nur Inferenz, oberhalb der 16 GB Untergrenze |
| RTX 4090 24 GB | 0.34 USD/h | 0.74 USD/h | SmolVLA, ACT |
Diese Preise wurden am 23. August 2026 von der Runpod-Preisseite entnommen, und Spotmärkte sind volatil. AY-Robots gibt stattdessen einen gesamten Lauf an: 3 bis 6 Stunden zu 1,20 bis 2,00 USD pro Stunde auf der A100- oder H100-Stufe, etwa 4 bis 12 USD für einen GR00T- oder Pi0.5-Lauf; 2 bis 5 Stunden zu 0,30 bis 0,60 USD pro Stunde auf der 24 GB-Stufe, 1 bis 3 USD für SmolVLA oder ACT. Eine Inferenzsitzung ist nur dann kostengünstiger als ein Trainingslauf, wenn Sie sie stoppen, wofür der Leerlauf-Watchdog da ist. Siehe die Abrechnungsdokumentation und die Preisseite.

Wenn Sie das Netzwerk lieber nicht in der Schleife haben möchten
Remote-Inferenz löst ein Hardwareproblem und erzeugt ein Latenzproblem. Manchmal ist die bessere Antwort eine Policy, die zu der vorhandenen Hardware passt.
- ACT, ungefähr 80 M Parameter und 20 ms pro Aktionsschritt, mindestens 50 Episoden, jede 24-GB-Karte. In einem repetitiven Einzelaufgaben-Setup übertrifft es häufig ein entferntes 3-B-Modell, da es nie auf ein Paket warten muss.
- SmolVLA, ungefähr 450 M Parameter und 245 ms pro Aktionsschritt, mindestens 30 Episoden. Es behält die Sprachkonditionierung bei, die ACT fehlt, und die lerobot-Dokumentation gibt an, dass es zur Inferenzzeit etwa 2 GB gegenüber ungefähr 14 GB für PI0 benötigt.
- ACT vs GR00T N1.7 für die Genauigkeitshälfte des Kompromisses.
Es gibt auch einen Mittelweg: in der Cloud trainieren, lokal evaluieren. Fine-Tuning benötigt die 80-GB-Karte und kümmert sich nicht um Latenz, daher ist das Training von GR00T N1.7 auf einem SO-100 remote unumstritten. Nur die Evaluationsschleife hat eine Echtzeitbeschränkung; die Trainingsdokumentation und die Modell- und Arm-Matrix decken diese Hälfte ab.
Noch kein Arm auf dem Schreibtisch?
Steuern Sie einen echten SO-100 im Browser ohne Anmeldung, vergleichen Sie die fünf trainierbaren Policies mit ihren tatsächlichen Latenzzahlen, oder mieten Sie eine GPU und trainieren Sie eine. Drei Wege, um zu starten, keiner davon erfordert Hardware, die Sie nicht besitzen.
Ohne Hardware ausprobierenHäufig gestellte Fragen
Kann ich GR00T N1.7 auf einem Raspberry Pi ausführen, wenn die GPU remote ist?▾
Ja, dafür ist die Client-Server-Trennung gedacht. Der Pi führt die lerobot-Treiber aus, liest zwei Kameras und einen seriellen Bus und sendet Beobachtungen an den Policy-Server; er lädt das Modell nie. Die Einschränkung verlagert sich vom VRAM zur Upload-Bandbreite: Zwei unkomprimierte 640x480 RGB-Frames sind 1.843.200 Bytes pro Aufruf, und keiner der Stacks komprimiert sie.
Wie viel Latenz fügt das Netzwerk tatsächlich hinzu?▾
Round-Trip-Zeit plus Beobachtungsübertragungszeit. Die Übertragungszeit beträgt 14.7 Mbit geteilt durch Ihre Upload-Bandbreite: ungefähr 147 ms bei einer 100 Mbit/s-Verbindung, 1.47 s bei einer 10 Mbit/s-Verbindung. Beide Zeiten kommen zur eigenen Inferenzzeit des Modells hinzu, die AY-Robots mit 152 ms für GR00T N1.7 und 485 ms für Pi0.5 angibt. Messen Sie mit ping und iperf3 gegen den Pod, nicht gegen einen Speed-Test-Server.
Ist Remote-Inferenz gut genug für eine reale Aufgabe?▾
Für langsames, bewusstes Pick-and-Place, ja. Für alles Reaktivität erfordernde, nein. NVIDIAs Bereitstellungshandbuch beziffert die Anforderung für einen synchronen Einzelschritt auf etwa 33 ms End-to-End bei 30 FPS und weist darauf hin, dass Erfassung, Netzwerk, Inferenz und Nachbearbeitung dies routinemäßig überschreiten, selbst ohne Internetbeteiligung.
Welchen Port verwenden die Server und ist es sicher, ihn zu öffnen?▾
Isaac-GR00Ts PolicyServer verwendet standardmäßig Port 5555 über ZeroMQ und bindet 0.0.0.0 in seiner CLI. lerobot verwendet standardmäßig Port 8080 über gRPC und bindet localhost. Keiner ist sicher zu exponieren: Die GR00T-Klasse unterstützt einen api_token, aber run_gr00t_server.py übergibt nie einen, und lerobot serialisiert Daten über einen unsicheren gRPC-Kanal, was CVE-2026-25874 ist. Binden Sie an Loopback und verwenden Sie einen SSH-Tunnel.
Behebt ein Upgrade von lerobot CVE-2026-25874?▾
Nicht mit Stand vom 23. August 2026. Der CVE-Eintrag listet LeRobot bis 0.5.1 als betroffen auf und PyPI liefert 0.6.1 aus, aber der Pull Request, der pickle aus der asynchronen Pipeline entfernen würde, ist noch offen, und policy_server.py auf main ruft immer noch pickle.loads auf Anfragedaten auf. Betrachten Sie Netzwerkkapselung als Abhilfemaßnahme, nicht ein Versions-Update, und gehen Sie davon aus, dass der Client auf Roboterseite ebenfalls betroffen ist.
Kann ich lerobots asynchronen Client mit einem GR00T-Checkpoint verwenden?▾
Ja. lerobot 0.6.1 listet groot in SUPPORTED_POLICIES neben act, smolvla, diffusion, tdmpc, vqbet, pi0 und pi05 auf, und sowohl so100_follower als auch so101_follower sind in SUPPORTED_ROBOTS enthalten. Übergeben Sie --policy_type=groot und zeigen Sie --pretrained_name_or_path auf Ihren Checkpoint. Sie erhalten eine asynchrone Ausführung, die das GR00T SO-100 Beispiel nicht implementiert, auf Kosten des pickle-Transports.
Die Kurzversion
Remote-Inferenz für eine 3 B Policy ist ein gelöstes Ingenieurproblem mit einem ungelösten Physikproblem. Die Ingenieurarbeit besteht aus zwei Befehlen und einem SSH-Tunnel. Die Physik besagt, dass eine 1.8 MB große Beobachtung eine GPU in einem anderen Land erreichen und zurückkommen muss, bevor dem Arm die Aktionen ausgehen. Machen Sie die Rechnung, bevor Sie etwas mieten, wählen Sie eine Aufgabe, die eine veraltete Beobachtung toleriert, und erhöhen Sie den Ausführungshorizont, anstatt zu hoffen, dass die Verbindung besser wird.
Wenn Sie noch keinen Datensatz aufgezeichnet haben, zeichnen Sie Ihren ersten Datensatz auf und der SO-100 Einrichtungsleitfaden stehen an erster Stelle, und der Eintrag zum LeRobot Datensatzformat erklärt, was der Recorder schreibt. Hintergrundinformationen finden Sie in den Vision-Sprach-Aktionsmodellen und der Arbeit zu Flow-Matching-Policies; der Arena-Eintrag verlinkt jede Benchmark-Zahl zu einer Quelle.
Sources
- NVIDIA Isaac-GR00T: N1.7 Repository und README (16 GB Inferenz-Untergrenze, Installation, gated Cosmos-Reason2-2B Backbone, FFmpeg-Einschränkung)
- run_gr00t_server.py: die GR00T Policy Server CLI, ServerConfig Standardwerte (Host 0.0.0.0, Port 5555) und der ReplayPolicy Pfad
- server_client.py: PolicyServer und PolicyClient, MsgSerializer's allow_pickle=False Grenze, api_token, timeout_ms
- eval_so100.py: der SO-100 Policy Client, EvalConfig Standardwerte und die synchrone Regelschleife
- Isaac-GR00T SO100/SO101 Beispiel: Datensatzkonvertierung, Finetuning und Closed-Loop-Evaluierungsbefehle
- Isaac-GR00T Real-World Deployment Guide: das 33 ms synchrone Budget, Stop-and-Go, Aktions-Chunk-Größe, RTC-Status
- Isaac-GR00T Hardware Recommendation: Inferenzfrequenz pro GPU und das 10 Hz Minimum
- Isaac-GR00T Deployment and Inference Guide: Latenz-Benchmark-Ergebnisse pro Komponente
- LeRobot: Tutorial zur asynchronen Inferenz (PolicyServer, RobotClient, die dokumentierte Parametertabelle)
- lerobot async_inference/configs.py: PolicyServerConfig und RobotClientConfig Standardwerte, AGGREGATE_FUNCTIONS Registry
- lerobot async_inference/policy_server.py: pickle.loads auf Anfragedaten, add_insecure_port, die gRPC-Aufrufnamen
- lerobot robot_client.py: gRPC-Transport, Pickle-Serialisierung, Latenz-Protokollierung
- CVE-2026-25874: LeRobot unsichere Deserialisierung Remote Code Execution über gRPC, betroffen bis 0.5.1
- Black, Galliker und Levine, Real-Time Execution of Action Chunking Flow Policies (Echtzeit-Chunking)
- Runpod GPU-Preise: stündliche Raten für Community- und Secure Cloud für A100, H100, L40S und RTX 4090
Quellen
- 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
Bereit für hochwertige Robotik-Daten?
AY-Robots verbindet Ihre Roboter mit qualifizierten Operatoren weltweit.
Jetzt starten