SuperAPI AI 工具集

serve-openpi-policy

部署与运维

查看项目

更新于 10-16 07:06

技能介绍

用途

该技能负责为 Isaac Lab-Arena 的 Pi0RemotePolicy 实验启动一个本地 OpenPI 推理服务器,并最终提供一个经过验证的端点供客户端使用。它明确将实验执行、产物、OSMO 以及其他策略提供者排除在本技能范围之外。

主要能力

  • 启动、复用、验证并显式停止本地 Docker 化的 OpenPI 推理服务器。
  • 从仓库检出内容中读取维护中的工作流,包括双终端流程、首次运行成本与就绪消息。
  • 解析请求或实验策略配置中的变体与端口,仅接受包装脚本支持的变体(pi05 或 pi0)以及 1 到 65535 的整数端口。
  • 仅服务回环客户端端点(如 127.0.0.1 或 localhost);若实验指定其他主机,则视为外部服务器依赖并交回 run-experiment。
  • 在启动前检查镜像与容器状态,复用变体、端口匹配且日志显示就绪的服务器。
  • 披露首次构建、镜像大小与检查点下载的当前估算值,并在启动大型构建或下载前获取确认。
  • 启动后保留终端会话并轮询输出,要求出现指定就绪日志行后才报告就绪。
  • 将变体、回环主机、端口、就绪证据、精确容器身份与保留的终端会话句柄交接给 run-experiment。
  • 仅在用户明确要求时停止服务器,且只停止本工作流启动的服务器。

使用方式

在行动前,需阅读仓库检出中的以下文件:

  • docs/pages/quickstart/running_a_real_policy/openpi.rst:维护中的双终端工作流、首次运行成本与就绪消息。
  • isaaclab_arena_openpi/docker/run_openpi_server.sh:支持的标志与当前变体映射。

以当前检出为事实来源,使用包装脚本而非重建其 Docker 命令或直接调用 build_server_image.sh。

解析端点时,确认仓库根目录与可执行包装脚本,从请求或实验策略配置中解析变体与端口;仅当两者均未指定时,才使用 pi05 和端口 8000。

复用兼容服务器时,先检查:

docker images -q isaaclab_arena:openpi_server
docker ps --no-trunc --filter ancestor=isaaclab_arena:openpi_server \
  --format '{{.ID}}\t{{.Names}}\t{{.Command}}'
ss -ltn

包装脚本会分配随机容器名,因此不得通过硬编码名称识别服务器。对每个候选,使用其完整命令匹配所选端口与变体特定的策略配置,然后使用 docker logs <exact-container> 要求出现针对所选端口的维护就绪行:

INFO:websockets.server:server listening on 0.0.0.0:<port>

仅当容器仍在运行、变体与端口匹配且日志显示就绪时,才复用该服务器。仅监听 TCP 端口不足以证明其使用 OpenPI 协议。若所选端口被不兼容的服务器或其他进程占用,不要停止它,应报告冲突并询问是选择其他端口还是显式停止其所有者。

启动时,从仓库根目录在保留的终端会话中异步运行包装脚本,保持其在前台,记录返回的会话或任务句柄,并显式传递解析值:

./isaaclab_arena_openpi/docker/run_openpi_server.sh -v <pi05-or-pi0> -p <port>

保留终端会话句柄并轮询其输出,不要等待命令结束;该命令预期在服务器生命周期内保持活动。不要追加 &、使用 nohup 或用分离的 Docker 命令替换包装脚本。在包装脚本保持运行并为所选端口发出就绪行之前,不要报告就绪。就绪后,保持该会话活动并将控制权交回 run-experiment。

包装脚本负责镜像构建、主机网络 Docker 启动、GPU 访问、检查点缓存与缓存所有权清理;不要重复这些操作。

失败时,保留并报告包装脚本输出。不要静默重建、更改变体或端口、停止其他进程或使用不同设置重试。

交接端点时,返回变体、回环主机、端口、就绪证据、精确容器身份与保留的终端会话句柄(若本工作流启动了服务器)。若 run-experiment 请求了服务器,则在其保留会话仍活动时交回控制权,以便其执行实验并验证产物。不要在此调用 Experiment Runner。

当所选变体或端口与实验配置不同时,提供每个对应的 per-Run Hydra 覆盖,使客户端与服务器保持兼容,例如:

runs.<run-name>.policy.policy_variant=pi0
runs.<run-name>.policy.remote_port=8001

不要仅为更改本地端点而编辑实验定义。

停止服务器时,除非用户要求,否则在实验后保持服务器运行。对于本工作流启动的服务器,通过其保留的终端会话发送中断,等待包装脚本退出,并确认其临时容器已停止。这允许包装脚本修复缓存所有权。切勿仅凭镜像名称停止任意端口所有者或复用的服务器。若无法安全识别原始会话,应报告该限制而非猜测。

适用场景

  • 为 Isaac Lab-Arena 的 Pi0RemotePolicy 实验提供本地 OpenPI 推理服务器。
  • 需要复用已运行且兼容的 OpenPI 服务器。
  • 需要验证服务器就绪状态并交接端点给 run-experiment。

限制

  • 仅支持包装脚本支持的变体:pi05 或 pi0。
  • 仅服务回环客户端端点;其他主机视为外部依赖。
  • 不负责实验执行、产物、OSMO 或其他策略提供者。
  • 不推送镜像、不运行无缓存构建、不清除缓存,也不安装或更改 Docker、GPU 驱动或 NVIDIA Container Toolkit。
  • 仅在用户明确要求时停止服务器,且只停止本工作流启动的服务器。
  • 首次构建、镜像大小与检查点下载的具体估算值需从当前检出文档读取,本技能不提供固定数值。