SuperAPI AI 工具集

huawei-cloud-cloudrobo-inference-adapter

智能体与模型

查看项目

更新于 11-05 05:19

技能介绍

用途

该技能指导开发者把 VLA 模型的推理接口转换为符合 CloudRobo 标准的推理服务器接口,从而适配 CloudRobo 客户端库。核心思路是:模型自身的推理接口格式与 CloudRobo 标准通信格式不同,因此不修改模型的推理逻辑,而是新增一层轻量适配器,在扁平线性格式与模型内部格式之间做双向转换。

固定协议约定

  • 传输:WSS(WebSocket over TLS)
  • 证书:运行时生成自签名证书(cryptography 库,RSA 3072)
  • 序列化:msgpack(含 numpy 扩展)
  • 观测格式:点号分隔的扁平字典
  • 观测键:observation.images.{key}(key 由模型配置推导,不硬编码)、observation.state(固定字段)、task(固定字段)
  • 动作响应:{"action": (T, D) float32},固定字段
  • 握手:连接后第一帧发送元数据约定
  • 错误:发送 traceback.format_exc() 字符串,并以 INTERNAL_ERROR 关闭

前置条件

  • 模型现有推理接口:predict/infer 方法、模型元数据(action_dim、state_dim、image_keys、action_chunk_size)、归一化参数的读取与设置方式
  • 训练输出:标准布局的最终权重,以及 dataset_statistics.json(动作反归一化必需)
  • Python 包:numpy、msgpack、websockets、cryptography;Pillow 可选(测试客户端从磁盘加载图片时使用)

四组件模式

模型推理逻辑保持不变,所有协议相关逻辑放在新建文件中:

  1. 入口点(CLI):解析参数、组装组件
  2. 传输服务器:WSS + msgpack、握手、请求循环、错误处理
  3. 协议适配器:观测由扁平格式转模型格式,动作由模型格式转扁平格式
  4. 模型推理接口(复用现有):predict/get_action、元数据、归一化
  5. 模型与权重(保持不变)

其中第 4、5 层已存在,开发者只需创建第 1–3 层。

通用性分层

  • 传输服务器(server_template.py):通用性高,与模型无关,可直接复制使用
  • 测试客户端(scripts/test_client.py):通用性高,从握手元数据自动发现契约,可直接复制使用
  • 协议适配器(adapter_template.py):通用性低,观测格式与动作输出因模型而异,仅作骨架参考,需按模型定制 derive* 方法与转换逻辑
  • 适配器验证(verify_adapter.py):通用性低,依赖模型 API,通过契约注入测试 adapter.infer()

判断原则:若模型推理接口与模板假设差异较大,应重写适配器并自行编写验证,仅复用传输服务器与测试客户端。

使用方式

工作流程分为五步:

  1. 识别模型推理接口:记录模型内部格式(扁平示例还是嵌套观测、返回形状、期望的图像键),图像键应从模型配置或框架推导,不硬编码。
  2. 创建协议适配器:包装模型推理接口,暴露 infer(obs) 与 metadata 属性;实现五个 derive* 方法(图像键、状态维度、状态键、动作维度、动作块大小)。观测转换负责提取图像、把 task 转为 lang、把 observation.state 转为 (1, D) 并校验维度;动作转换通常为去除批次维度并校验 batch=1,多动作键按模型顺序拼接。
  3. 创建传输服务器:启动时生成自签名证书并构建 SSLContext,通信循环为握手、接收观测、推理、附加计时、发送响应;prev_total_time 为连接内局部变量,首请求为 0;错误统一以 traceback 字符串返回。
  4. 创建入口点:加载模型、用适配器包装、启动时记录契约(图像键、状态维度、动作维度)以便检查训练/测试一致性。
  5. 创建测试客户端:从握手元数据自动发现契约,验证动作形状为 (T, D)、首个请求 prev_total_ms 为 0、后续大于 0。

模型内部观测有两种形态:扁平示例({"image": ..., "state": ..., "lang": ...})与嵌套观测(如 GR00T 的 {"video": {...}, "state": {...}, "language": {...}})。线上格式(observation.images.{key} / observation.state / task)对两者一致,仅适配器内部转换不同。

核心命令

  • python scripts/verify_adapter.py --adapter /path/to/adapter.py --class-name MyAdapter:无服务器适配器单元测试
  • python scripts/verify_adapter.py --adapter gr00t_adapter.py --class-name Gr00tProtocolAdapter --stub-module stub_gr00t.py:带模型桩的适配器测试
  • python scripts/test_client.py --host 127.0.0.1 --port 8000:随机图像冒烟测试
  • python scripts/test_client.py --host 127.0.0.1 --port 8000 --image_dir /path/to/images --num_inferences 5 --verbose:真实图像端到端测试
  • python scripts/test_client.py --host 127.0.0.1 --port 8000 --benchmark:性能基准测试

适用场景

适用于需要将现有 VLA 模型(如 GR00T 等机器人策略模型)部署为 CloudRobo 标准推理服务器的场景,尤其是模型推理接口格式与 CloudRobo 通信格式不一致、又不希望改动模型推理代码的情况。

限制

  • 适配器层需按具体模型定制,不能直接套用模板
  • 各框架配置/统计文件结构随版本变化,推导表仅为示例参考,需以实际模型配置为准
  • state_dim/action_dim 应使用统计维度的和,而非模型输入层的填充维度,否则会出现归一化索引错配
  • 错误响应格式固定为 traceback 字符串,使用其他格式会导致客户端解析失败
  • 文本在参数表处截断,参数说明不完整,暂未提供完整参数列表