您的机器人设备没有GPU。将GR00T策略服务器部署在租用的云GPU上,将动作块流式传输到机械臂,并精确了解网络成本。
树莓派足以通过串口总线驱动一个 SO-100,并从两个 USB 摄像头中获取帧。它不足以运行一个三十亿参数的视觉-语言-动作模型:NVIDIA 的 README 指出 GR00T N1.7 推理需要一块拥有 16 GB 或更多显存的 GPU。要想在不购买显卡的情况下查看你微调的 GR00T N1.7 检查点在机械臂上的表现,可以将策略部署在租用的云 GPU 上,将机器人循环保留在带有 USB 端口的机器上,并通过网络发送观测数据和动作块。
它有效,但并非免费,且成本在不同任务之间分布不均。下面是:NVIDIA 自己的策略服务器、lerobot 的异步堆栈、提前判断你的上行链路是否足够快的算术方法,以及平台路由。所有这些都已根据 Isaac-GR00T 主分支 (N1.7 GA) 和 lerobot 0.6.1 在 2026 年 8 月 23 日进行了检查。
你需要了解什么
- •GR00T N1.7、GR00T N1.5 和 Pi0.5 大约是 30 亿参数模型。没有独立 GPU 的机器人控制器都无法运行它们。
- •Isaac-GR00T 和 lerobot 都提供了客户端-服务器分离架构。你无需编写传输层。
- •观测数据而非动作主导了网络成本:两个未压缩的 640x480 RGB 帧是 1,843,200 字节,每次调用大约 14.7 Mbit,并且两个堆栈都没有对其进行压缩。
- •AY-Robots 列出了每个动作步骤的模型耗时为 20 到 485 毫秒。互联网往返时间在此基础上叠加。
- •远程推理适用于慢速的抓取放置任务,而不适用于快速响应式运动。更长的执行周期可以争取时间,但会牺牲观测数据的新鲜度。
- •两个服务器在出厂时都不适合部署在公共 IP 上,lerobot 的服务器还带有一个未打补丁的 RCE 漏洞。请使用隧道。
为什么策略无法在机器人机器上运行
AY-Robots 可以训练的五种策略中,有两种可以在工作站显卡上运行,三种则不能。下方的列是每个动作步骤的延迟,这个数字会与您的网络往返时间竞争。
| 策略 | 参数 | 每动作步骤推理时间 | 训练用GPU层级 | 最小回合数 | 数据集格式 |
|---|---|---|---|---|---|
| GR00T N1.7 | ~3 B, 微调期间训练 ~40 M | 152 ms | A100 80 GB 或 H100 80 GB | 50 | LeRobot v2.0 或 v2.1 |
| GR00T N1.5 | ~3 B | 165 ms | A100 80 GB 或 H100 80 GB | 50 | LeRobot v2.0 或 v2.1 |
| Pi0.5 | ~3 B, PaliGemma 主干 | 485 ms | A100 80 GB 或 H100 80 GB | 50 | LeRobot v3.0 |
| SmolVLA | ~450 M | 245 ms | RTX 4090 或任意24 GB显卡 | 30 | LeRobot v3.0 |
| ACT | ~80 M | 20 ms | RTX 4090 或任意24 GB显卡 | 50 | LeRobot v3.0 |

将其视为一个决策,而非琐事。以每步 20 ms 的速度在机器人机器上运行,您无需再考虑它。以 485 ms 的速度运行,在数据包离开您的建筑物之前就已经花费了三分之一秒。和补充了准确性方面。
GR00T N1.7, GR00T N1.5 和 Pi0.5 从供应商检查点(nvidia/GR00T-N1.7-3B、nvidia/GR00T-N1.5-3B、lerobot/pi05_base)开始。ACT 在您自己的任务上训练之前是不存在的,因此在训练作业运行之前,没有可远程提供的服务。请参阅 SO-100 上的 ACT。
已存在的两种客户端-服务器堆栈
Isaac-GR00T 附带一个 ZeroMQ 请求-回复服务器;lerobot 附带一个围绕异步推理构建的 gRPC 服务器。两者都接受一个 GR00T 检查点。lerobot 在 async_inference/constants.py 中支持的策略列表是 act、smolvla、diffusion、tdmpc、vqbet、pi0、pi05 和 groot;其机器人列表是 so100_follower、so101_follower、bi_so_follower 和 omx_follower。
| Isaac-GR00T PolicyServer | lerobot async inference | |
|---|---|---|
| 入口点 | gr00t/eval/run_gr00t_server.py | python -m lerobot.async_inference.policy_server |
| 传输 | ZeroMQ REQ/REP | gRPC, add_insecure_port / insecure_channel |
| 序列化 | msgpack + msgpack_numpy, allow_pickle=False enforced | pickle.dumps / pickle.loads, marked # nosec |
| 默认端口 | 5555 | 8080 |
| 默认绑定 | 0.0.0.0, 所有接口 | localhost |
| 认证 | 类支持 api_token,但未通过 CLI 传递 | 无 |
| 客户端超时 | 15000 ms (PolicyClient timeout_ms) | 2 s 观察队列超时 |
| 执行模型 | 同步:阻塞,然后执行块 | 异步:在计算下一个块时执行 |
序列化行比看起来更重要。GR00T 的 MsgSerializer 拒绝双向的 object-dtype ndarray 有效载荷,因为 msgpack_numpy 否则会将其交给 pickle 处理。lerobot 则使用 pickle:policy_server.py 对请求数据调用 pickle.loads,robot_client.py 对发送的观测数据进行 pickle 序列化。在受信任的局域网中尚可接受,但一旦端口可从互联网访问,则无法接受。
路线 A:NVIDIA 自有的 GR00T 策略服务器
这是 NVIDIA 为 SO-100 和 SO-101 硬件提供的文档路径,如果您的检查点来自 examples/finetune.sh 并带有 --embodiment-tag NEW_EMBODIMENT。这些步骤补充了上游 README 中遗漏的部分:如何在不将端口暴露给其他人的情况下将其连接到机器人。
- 1在租用的 GPU 机器上安装 GR00T
子模块是必需的,并且在克隆之前必须存在 git-lfs,否则
demo_data中的 parquet 文件将以指针形式存在。flash-attn 和 TensorRT 随默认安装一起提供。新 pod 镜像上的陷阱:torchcodec0.8.0 是唯一支持的视频后端,并且只加载 FFmpeg 4 到 7。Ubuntu 25.10 和 26.04 附带 FFmpeg 8,因此 GR00T 会因Could not load libtorchcodec而失败。安装一个低于 8 的 FFmpeg,并将其库文件放到LD_LIBRARY_PATH中。bashsudo apt install git-lfs && git lfs install curl -LsSf https://astral.sh/uv/install.sh | sh sudo apt-get update && sudo apt-get install -y ffmpeg git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T cd Isaac-GR00T uv sync --python 3.12 uv run python -c "import gr00t; print('GR00T installed successfully')" - 2对受限骨干模型进行身份验证
每个 GR00T N1.7 检查点,包括您自己的微调,在首次使用时都会加载受限的
nvidia/Cosmos-Reason2-2B。在模型页面请求访问权限并在 pod 上登录,否则加载将因GatedRepoError而失败。bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 3启动策略服务器
将
--model-path指向您的检查点目录;在该路径下,服务器会忽略--modality-config-path,该参数仅在回放路径上读取。省略--model-path,改为传递--dataset-path和--execution-horizon,以使用 ReplayPolicy 回放录制的动作,这是验证连接是否正常工作的最经济方式。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 - 4将端口 5555 隧道连接到机器人机器
如上所述,绑定到回环地址,并通过 SSH 或 WireGuard 风格的网格传输端口。这提供了 ZeroMQ 套接字所不具备的加密和身份验证,大约只需一毫秒。
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在伺服电机旁运行机器人客户端
客户端需要自己的 uv 环境:它需要 lerobot 的机器人驱动程序,而不是训练堆栈。
eval_so100.py导入 so100_follower、so101_follower 和 koch_follower,因此请传递与您的机械臂匹配的--robot.type(上游 README 使用 so101_follower)。摄像头键必须与训练匹配:适配器精确读取front和wrist,交换它们会导致策略看到错误的视图。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 默认使用 --host 0.0.0.0,绑定所有接口:在一个具有公共 IP 的 Pod 上,这将是一个开放的推理端点。而且 PolicyServer 类接受一个 api_token 并按请求验证它,但 run_gr00t_server.py 从未传递过,因此无论你如何配置,CLI 服务器都是未经身份验证的。绑定到 127.0.0.1 并进行隧道连接。出现 ZMQError: Address already in use 意味着端口 5555 已被占用;请传递 --port 参数。
路线 B:lerobot 异步推理
lerobot 解决了一个不同的问题。它不是在模型思考时阻塞机器人,而是客户端在服务器计算下一个数据块时,继续处理其已有的队列。这是动作分块的进一步发展,是 SmolVLA 引入的异步堆栈。它也适用于 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=True服务器启动时是空的:它不知道要提供哪个策略,直到客户端的第一次握手告知它,这在租用的pod上很方便。决定机械臂是否平稳运动的两个关键参数是 actions_per_chunk 和 chunk_size_threshold (lerobot 文档将第二个称为 g,源自 SmolVLA 论文),并且文档中的值与实际发布的值不一致。
| 参数 | lerobot 0.6.1 代码中的值 | 作用 | 备注 |
|---|---|---|---|
| actions_per_chunk | 无默认值,必需 | 每次调用返回的动作数 | 文档表格列出 50;数据类字段没有默认值,因此 CLI 要求提供一个值 |
| chunk_size_threshold | 0.5 | 客户端发送新观测值时队列的填充率(低于或等于此值) | 文档表格显示 0.7;代码和文档自己的示例显示 0.5 |
| fps | 30 | 客户端控制速率,设置 environment_dt = 1/fps | 如果队列持续耗尽,请降低此值 |
| inference_latency | 1/30 s (33.3 ms) | 服务器上的目标推理延迟 | 一个目标值,而非测量值 |
| obs_queue_timeout | 2 s | 服务器在观测队列上等待的时间 | 慢速上行链路首先会在此处体现 |
| aggregate_fn_name | weighted_average | 如何混合重叠的块区域 | 0.3 旧 + 0.7 新;latest_only、average 和 conservative 也已发布。注册表是 configs.py 中的 AGGREGATE_FUNCTIONS,而不是文档声称的 robot_client.py |
CVE-2026-25874 是 lerobot 异步推理管道中的一个未经身份验证的远程代码执行漏洞:通过未经身份验证的 gRPC 通道(无 TLS)接收的数据上执行 pickle.loads(),可通过 SendPolicyInstructions、SendObservations 和 GetActions 调用访问。CWE-502, CVSS 3.1 base score 9.8 from NVD, 4.0 base score 9.3 from the assigning CNA。记录列出 LeRobot 0.5.1 及以前版本 受影响,并指明策略服务器和机器人客户端均受影响,因此您机械臂旁边的机器也在范围内。升级并非解决方案:记录引用了上游问题 3047 和补丁 PR 3048,该补丁将 pickle 替换为 safetensors 加 JSON,但在 2026 年 8 月 23 日,两者仍未解决。main 分支上的 policy_server.py 仍然在请求数据上调用 pickle.loads,而 serve() 则绑定到 add_insecure_port。绑定到环回地址,切勿端口转发 8080。
决定您的链路是否足够快的算术
人们跳过这一步,然后花一天时间解决导致运动中途冻结的策略。这只需要两分钟,而且几乎总是决定性的。
NVIDIA 的注释观察字典中eval_so100.py 说明了传输的内容:两个形状为 (480, 640, 3) 的 uint8 数组,六个关节浮点数,一个语言字符串。这意味着每帧 921,600 字节,两台摄像机共 1,843,200 字节,大约 14.7 Mbit,并且两个堆栈都没有对其进行 JPEG 压缩。返回的数据块是几十步的 6 个浮点数。你的上传速度决定一切,而不是你的下载速度。
| 上传带宽 | 推送一次观察数据(14.7 Mbit)所需时间 | 30 FPS 机械臂的结论 |
|---|---|---|
| 10 Mbit/s,典型家用上传 | ~1.47 s | 无法使用。机械臂在每个数据块之间都会停止。 |
| 25 Mbit/s | ~0.59 s | 仅适用于慢速抓取放置,执行周期长。 |
| 50 Mbit/s | ~0.29 s | 适用于有意识的任务。 |
| 100 Mbit/s | ~0.15 s | 适用于抓取放置,在快速运动时可见。 |
| 1 Gbit/s 光纤或数据中心 | ~0.015 s | 模型反而成为瓶颈。 |
你必须适应的预算
GR00T SO-100 客户端是同步的:它调用 policy.get_action(obs),以 30 FPS 执行块中的前 action_horizon 步,然后再次调用。块大小和执行范围是不同的数字:NVIDIA 的部署指南建议动作块大小为 16,与实时分块结合时至少为 32,而 eval_so100.py 附带的执行范围为 8。以 30 FPS 执行八步,每次调用产生 267 ms 的运动,所有其他操作都必须在此时间内完成。
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提高执行范围是一种直接但并非没有代价的解决方案:机械臂会根据现在已过时的观测结果进行操作。原则性的解决方案是实时分块(real-time chunking, RTC),它在当前块运行时计算下一个块,冻结保证执行的动作并填充其余部分;RTC 论文报告称,它对推理延迟具有鲁棒性,无需重新训练。首先检查其现状。NVIDIA 将 RTC 标记为实验性功能,它是一个低级模型原语,可通过 action_head.get_action(..., options={"rtc_overlap_steps": ..., "rtc_frozen_steps": ...}) 访问,但未集成到 Gr00tPolicy 或服务器-客户端路径中,其中 options 未被使用,也没有测试和示例。通过策略服务器,您获得的是异步执行,而不是 RTC。
NVIDIA 在 4 个去噪步骤和一台摄像头的情况下,对 GR00T N1.7 进行了端到端基准测试。在 H100 80GB HBM3 上:PyTorch eager 模式下为 85.8 ms (11.7 Hz),使用 torch.compile 为 48.6 ms (20.6 Hz),使用 TensorRT 完整管道为 27.9 ms (35.9 Hz)。L40 在 eager 模式下需要 128.3 ms (7.8 Hz)。NVIDIA 称 10 Hz 是典型操作的推荐最低频率,低于 10 Hz 仅适用于缓慢、非反应性任务。这些是 重新规划 速率:10 Hz 的策略仍然可以通过动作分块驱动 30 FPS 的机械臂。第二个摄像头会适得其反。
先测量,再信任
上面的每个数字都是预测。通过四个命令可以将其转化为测量结果,在投入宝贵的计算资源去执行一个注定失败的任务之前,这些测量是值得进行的。
- 1获取原始往返时间
针对Pod进行测试,而不是CDN。密切关注偏差,就像关注平均值一样:抖动会导致机械臂卡顿,而不是平均延迟。
bashping -c 50 <pod-host> # the mdev column is the number that predicts stutter - 2测量你实际拥有的上行带宽,而不是你付费购买的
住宅宽带的上行速度通常是下行速度的一小部分,它就是上面带宽表中的那个数字。
bash# on the pod iperf3 -s # on the robot machine, -R omitted so this measures upload iperf3 -c <pod-host> -t 30 - 3读取客户端自身的延迟日志
LeRobot 机器人客户端会记录每个数据块的服务器到客户端延迟和反序列化时间。在路由B上,你不需要任何外部工具。
textReceived action chunk for step #240 | Latest action: #232 | Incoming actions: 240:289 | Network latency (server->client): 187.44ms | Deserialization time: 3.10ms - 4观察动作队列的清空情况
传入
--debug_visualize_queue_size=True后,客户端会在运行时绘制队列大小。如果队列反复触及零,则表示你已超出预算:请降低帧率(fps),提高actions_per_chunk,或提高chunk_size_threshold以便更频繁地发送观测数据。bashpython -m lerobot.async_inference.robot_client \ ... \ --debug_visualize_queue_size=True
远程推理的实际用途
- 您可以在真实硬件上评估一个30亿参数的策略,而无需购买一张比机械臂本身更昂贵的显卡。
- GPU按小时租用,因此检查点失败只会花费几美元。
- 机器人端保持精简:LeRobot驱动、两个摄像头、一个串口,您可以更换检查点而无需触碰它。
- 未压缩的观测数据占据了网络传输成本的主导地位,而住宅上传带宽是主要瓶颈。
- 抖动比延迟更具破坏性:平均40毫秒但峰值达到300毫秒的网络连接会卡顿,而稳定的120毫秒连接则不会。
- 快速响应任务在任何时间窗口内都无法承受往返延迟。
- 两个服务器都以CLI形式未经身份验证地交付,因此隧道工作需要您自行完成。
- 数据块传输中断会导致机械臂执行过时的动作。请在机器人端添加您自己的看门狗。
| 任务 | 可以通过公共互联网工作吗? | 原因 |
|---|---|---|
| 拾取静态物体,放入箱中 | 可以 | 观测和动作之间没有物体移动。 |
| 以从容的速度堆叠积木 | 可以,当action_horizon为16或更高时 | 错误积累速度足够慢,可以在下一个数据块中修正。 |
| 打开抽屉,插入物体 | 通常可以 | 接触丰富但速度慢。注意接触时的走走停停。 |
| 跟随移动物体 | 不可以 | 策略作用于300毫秒到1秒前的观测数据。 |
| 捕捉、平衡或从滑倒中恢复 | 不可以 | 修正窗口比一个往返时间更短。 |
| 30赫兹同步闭环 | 不可以 | 端到端预算为33毫秒。即使是局域网也很难做到。 |
如果远程运行在每个回合的同一点出现卡顿,网络可能不是原因。策略每次都在相同的关节角度犹豫,通常是数据问题;请参阅故障模式页面,特别是仅在一种设置下工作的策略和损失下降但策略无效。
自行操作与在AY-Robots上操作
- 在现货市场租用 GPU,等待足够 VRAM 且价格合适的卡。
- 安装 CUDA、uv、ffmpeg torchcodec 接受的版本,以及带有子模块的 GR00T 堆栈。
- 请求访问受限的
nvidia/Cosmos-Reason2-2B主干模型,并在 pod 上放置一个 token。 - 将您的 检查点 拉取到 pod 上。
- 在回环接口上启动服务器,然后从机器人机器建立 SSH 隧道。
- 在机器人机器上为客户端和驱动程序安装第二个环境。
- 将摄像头键、关节名称和语言指令与检查点所识别的内容匹配。
- 监控 pod。一个被遗忘的 A100 整夜运行的成本可能比实验本身还要高。
GPU 账单不会随着机器人停止而停止。远程推理中损失的大部分资金都花在了人们离开后仍保持运行的服务器上。设置闹钟,或自动化销毁过程。
- 选择您想要运行的已训练策略。
/api/inference/pod自动配置一个云 GPU pod 来提供该策略服务。- 本地机器人客户端与该端点通信。基础检查点是供应商自己的:
nvidia/GR00T-N1.7-3B、nvidia/GR00T-N1.5-3B、lerobot/pi05_base。ACT 没有。 - Pod 带有空闲看门狗,并在空闲一段时间后自行销毁,因此不会有任何静默计费。
- 相同的操作可以通过终端和 AI 代理使用,因此可以编写循环脚本。
自动配置消除了设置工作和遗忘 pod 的账单,但没有改变物理限制。对于快速任务,推理仍然必须靠近伺服电机:控制循环每个动作步骤需要 20 到 485 ms,具体取决于模型,再加上公共互联网往返时间,会将一个有效的策略变成一个犹豫不决的策略。

远程推理会话的成本
两个数字很重要:显卡的每小时费率,以及您让它运行多长时间。第一个是公开的;第二个则常常令人惊讶。
| 显卡 | Runpod 社区云 | Runpod 安全云 | 适用于 |
|---|---|---|---|
| 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 | 相同,稍快 |
| H100 PCIe 80 GB | 1.99 USD/h | 2.89 USD/h | 最快层级;NVIDIA 的 11.7 Hz eager 性能数据是针对 H100 80GB HBM3 的 |
| L40S 48 GB | 0.79 USD/h | 0.99 USD/h | 仅用于推理,高于 16 GB 的最低要求 |
| RTX 4090 24 GB | 0.34 USD/h | 0.74 USD/h | SmolVLA, ACT |
这些费率是根据 Runpod 定价页面于 2026 年 8 月 23 日读取的,现货市场价格会波动。AY-Robots 则提供整个运行的报价:在 A100 或 H100 层级上,运行 3 到 6 小时,每小时 1.20 到 2.00 USD,GR00T 或 Pi0.5 运行大约 4 到 12 USD;在 24 GB 层级上,运行 2 到 5 小时,每小时 0.30 到 0.60 USD,SmolVLA 或 ACT 运行 1 到 3 USD。推理会话只有在你停止它时才能在成本上胜过训练运行,这就是空闲看门狗的作用。请参阅计费文档 和 定价页面.

如果您不想让网络参与循环
远程推理解决了硬件问题,但也带来了延迟问题。有时,更好的解决方案是采用适合您现有硬件的策略。
- ACT,大约80 M参数,每个动作步20毫秒,最少50个episode,任意24 GB显卡。在重复的单任务设置中,它经常胜过远程3 B模型,因为它从不等待数据包。
- SmolVLA,大约450 M参数,每个动作步245毫秒,最少30个episode。它保留了ACT所缺乏的语言条件,lerobot文档指出其推理时约为2 GB,而PI0约为14 GB。
- ACT vs GR00T N1.7,用于权衡中的精度部分。
还有一条中间道路:在云端训练,在本地评估。 微调 需要80 GB显卡,并且不关心延迟,因此远程在SO-100上训练GR00T N1.7 是没有争议的。只有评估循环具有实时约束;训练文档 和 模型与机械臂矩阵 涵盖了这部分内容。
常见问题
如果GPU是远程的,我可以在树莓派上运行GR00T N1.7吗?▾
是的,这就是客户端-服务器分离的目的。树莓派运行lerobot驱动程序,读取两个摄像头和一个串行总线,并将观测数据发送到策略服务器;它从不加载模型。约束从VRAM转移到上传带宽:两个未压缩的640x480 RGB帧每次调用为1,843,200字节,并且两个堆栈都不会压缩它们。
网络实际增加了多少延迟?▾
往返时间加上观测数据传输时间。传输时间是14.7 Mbit除以您的上传带宽:在100 Mbit/s链路上大约是147 ms,在10 Mbit/s链路上是1.47 s。这两者都叠加在模型自身的推理时间之上,AY-Robots列出GR00T N1.7的推理时间为152 ms,Pi0.5为485 ms。请使用ping和iperf3针对pod进行测量,而不是速度测试服务器。
远程推理足以应对实际任务吗?▾
对于缓慢、有意的抓取放置任务,是的。对于任何需要反应的任务,不行。NVIDIA的部署指南指出,在30 FPS下,同步单步的端到端要求大约为33 ms,并指出捕获、网络、推理和后处理在不涉及互联网的情况下也经常超出此时间。
服务器使用哪个端口,打开它安全吗?▾
Isaac-GR00T的PolicyServer默认通过ZeroMQ使用端口5555,并在其CLI中绑定0.0.0.0。lerobot默认通过gRPC使用端口8080,并绑定localhost。两者都不安全,不应暴露:GR00T类支持api_token,但run_gr00t_server.py从不传递,lerobot通过不安全的gRPC通道序列化数据,这是CVE-2026-25874。请绑定到环回地址并使用SSH隧道。
升级lerobot能修复CVE-2026-25874吗?▾
截至2026年8月23日,不能。CVE记录列出LeRobot 0.5.1及更早版本受影响,PyPI发布的是0.6.1,但旨在从异步管道中移除pickle的拉取请求仍未合并,并且main分支上的policy_server.py仍然对请求数据调用pickle.loads。请将网络隔离视为缓解措施,而不是版本升级,并假设机器人端的客户端也在此范围内。
我可以使用lerobot的异步客户端与GR00T检查点吗?▾
是的。lerobot 0.6.1在SUPPORTED_POLICIES中列出了groot,以及act、smolvla、diffusion、tdmpc、vqbet、pi0和pi05,并且so100_follower和so101_follower都在SUPPORTED_ROBOTS中。传递--policy_type=groot并将--pretrained_name_or_path指向您的检查点。您将获得异步执行,这是GR00T SO-100示例未实现的,但代价是pickle传输。
简而言之
对于3 B的策略的远程推理是一个已解决的工程问题,但附带一个未解决的物理问题。工程方面是两条命令和一个SSH隧道。物理方面是1.8 MB的观测数据必须在机械臂动作耗尽之前到达另一个国家的GPU并返回。在租用任何东西之前先做算术,选择一个能容忍陈旧观测的任务,并提高执行范围,而不是指望链接会改善。
如果您尚未录制数据集,,是首要步骤,条目解释了录制器写入的内容。背景知识可在和中找到;将每个基准数字链接到其来源。
Sources
- NVIDIA Isaac-GR00T: N1.7 仓库和 README (16 GB 推理下限,安装,受限的 Cosmos-Reason2-2B 主干网络,FFmpeg 约束)
- run_gr00t_server.py: GR00T 策略服务器 CLI,ServerConfig 默认值 (host 0.0.0.0, port 5555) 以及 ReplayPolicy 路径
- server_client.py: PolicyServer 和 PolicyClient,MsgSerializer 的 allow_pickle=False 边界,api_token, timeout_ms
- eval_so100.py: SO-100 策略客户端,EvalConfig 默认值以及同步控制循环
- Isaac-GR00T SO100/SO101 示例: dataset conversion, finetune and closed-loop eval commands
- Isaac-GR00T 真实世界部署指南: 33 ms 的同步预算,stop-and-go, action chunk size, RTC status
- Isaac-GR00T 硬件推荐: 每 GPU 的推理频率以及 10 Hz 的最低要求
- Isaac-GR00T 部署和推理指南: 各组件延迟基准测试结果
- LeRobot: 异步推理教程 (PolicyServer, RobotClient, 文档化的参数表)
- lerobot async_inference/configs.py: PolicyServerConfig 和 RobotClientConfig 默认值,AGGREGATE_FUNCTIONS registry
- lerobot async_inference/policy_server.py: pickle.loads on request data, add_insecure_port, gRPC 调用名称
- lerobot robot_client.py: gRPC 传输,pickle 序列化,延迟日志记录
- CVE-2026-25874: LeRobot 通过 gRPC 进行不安全反序列化远程代码执行,受影响版本至 0.5.1
- Black, Galliker and Levine, 动作分块流策略的实时执行 (实时分块)
- Runpod GPU 定价: 社区和安全云的每小时费率 for A100, H100, L40S and 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