mcpField
H
huawei-cloud-cloudrobo-model-workflow

huawei-cloud-cloudrobo-model-workflow

github.com/huaweicloud开发5957 次安装2 天前更新
代码仓库

关于 huawei-cloud-cloudrobo-model-workflow

此技能通过 CLI 编排 CloudRobo 机器人模型开发,涵盖资产选择、训练、推理部署和真实机器人评测,并说明各阶段依赖;流程要求使用 CLI,不使用 Python SDK。

主要功能

  1. 01查询模型和数据集资产
  2. 02配置并提交训练任务
  3. 03轮询训练状态
  4. 04部署推理服务
  5. 05在已注册机器人上评测任务
  6. 06输出评测结果

适用场景

  1. 01运行完整的模型训练与评测流程
  2. 02训练模型并部署推理服务
  3. 03部署已训练模型并在机器人上评测

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-cloudrobo-model-workflow

安装后在 Claude Code 中输入/huawei-cloud-cloudrobo-model-workflow确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
acceptance-criteria.md
cli-installation-guide.md
constraints.md
dataflow-diagram.md
fault-recovery.md
iam-policies.md
model-ext-metadata.md
openpi-rename-map.md
pipeline-templates.md
robot-selection-guide.md
verification-method.md

详细介绍

CloudRobo 模型开发编排工作流

编排整个流程:资产查询 → 模型训练 → 推理部署 → 真实机器人评测 → 结果输出。全程使用 CLI 命令;禁止使用 Python SDK。

**Windows / PowerShell:**示例使用 bash 语法。在 Windows PowerShell 中运行:

  • 将 \ 续行符合并为一行,或在行尾使用反引号。
  • 使用 $env:NAME="value" 设置环境变量,而不是 export NAME="value"。
  • 单引号括起来的 JSON '{"a":"b"}' 可直接使用。

概览

流程阶段
Stage 0: Use Case Parsing      → Extract robot type + task, select model; parse dataset source
Stage 1: Asset Query & Dataset → Query model/algorithm/dataset assets; get default hyperparams and confirm; OpenPI model constructs data.rename_map
Stage 2: Model Training        → CLI create-task creates training task, poll until complete
Stage 3: Inference Deployment  → CLI infer create deploys inference service
Stage 4: Real-Robot Evaluation → CLI dispatch create-task dispatches task to real robot (session_id=workspace_id, no session creation needed)
Stage 5: Result Output         → Output evaluation score and report
执行模式
模式用户意图示例阶段
完整流程"用 so101 训练插笔任务并评测"Stage 0→5
训练+部署"训练完帮我部署推理服务"Stage 0→3
部署+评测"我模型训练好了,帮我部署评测"Stage 3→5

不得跳过阶段依赖:评测依赖推理服务处于 RUNNING 状态;部署依赖训练处于 FINISHED 状态;训练依赖资产信息。从中间阶段开始时,用户必须提供前序阶段的输出参数。

跳过阶段时的输入要求
开始阶段用户必须提供提示词
Stage 2base_model_asset_id, dataset_asset_id"Please provide base model asset_id and dataset asset_id"
Stage 3output_model_asset_id, output_model_version_id"Please provide training output model asset_id and version_id"
Stage 4service_id"Please provide inference service service_id"
数据流约定
来源 → 目标传递值
Stage 0 → 1model_keyword, dataset_source, dataset_value, robot_type
Stage 1 → 2base_model_asset_id/version_id, algorithm_asset_id/version_id, train_method, default_hyperparams, dataset_asset_id/version_id, data.rename_map(仅限 OpenPI)
Stage 2 → 3output_model_asset_id, output_model_version_id
Stage 3 → 4service_id
Stage 4 → 5robot_id, task_id, task_status, task_result

前置条件

  1. 已安装并完成身份验证的 cloudrobo CLI(HUAWEI_CLOUD_AK / HUAWEI_CLOUD_SK)
  2. 已通过 cloudrobo workspace use <id> 设置 workspace_id
  3. 市场中有可用的基础模型资产
  4. 用户提供数据集:已注册资产、OBS 路径或本地目录
  5. 已注册并在线的真实机器人

Windows/PowerShell 注意事项:PowerShell 在解析含有 |、" 等特殊字符的 JSON 时可能出现问题。传递复杂的 JSON 参数时,请将 JSON 写入临时文件,并使用 Python subprocess 调用 CLI(这不是 SDK,只是用于绕过 PowerShell 编码问题的 CLI Python 封装程序)。请参阅 references/cli-installation-guide.md。


工作流

Stage 0:用例解析

从用户输入中提取:机器人类型、任务描述、数据集来源。

模型选择

用户指定模型 → 直接使用。

用户未指定模型 → 查询市场预置模型,并使用提问工具询问用户:

cloudrobo asset list-publication-assets --type model
  • 列出所有可供用户选择的预置模型,并将推荐模型标记为“(Recommended)”
  • 不要默认选择推荐模型——用户可能想使用 ACT、DP 或其他模型
机器人 → 推荐模型映射
机器人推荐模型
so101 / jaka / franka / generalLeRobot_PI05-Base
数据集来源解析
用户输入类型处理方式
资产名称/asset_iduser_specified在 Stage 1 搜索此资产
OBS 路径 obs://obs_path在 Stage 1 注册为资产
本地目录路径local_path在 Stage 1 上传到 OBS 并注册
未指定need_ask必须询问用户
Stage 1:资产查询与数据集处理
步骤 1.1:查询基础模型并提取算法信息
cloudrobo asset search-assets --keyword "<model_keyword>"

从结果中提取:

  • id → base_model_asset_id
  • latest_version_id → base_model_version_id
  • actions[].action → train_method(例如,FFT、LORA)
  • actions[].algorithm.asset_id → algorithm_asset_id
  • actions[].algorithm.version_id → algorithm_version_id

train_method 来自模型的 actions[].action(例如,FFT、LORA),而非 SFT/QLORA。默认使用 FFT;用户请求 LoRA 时使用 LORA。

步骤 1.1b:查询算法资产详情(获取默认超参数)
cloudrobo asset show-asset --asset-id <algorithm_asset_id>

从 ext_metadata.hyperparams 中提取默认超参数。每个超参数包含 name、default、constraint.type、constraint.editable、description。

步骤 1.1c:确认并自定义超参数(必须执行)

获取默认超参数后,必须使用提问工具询问用户是否要修改:

  1. 将默认超参数显示为表格(名称、默认值、说明)
  2. 提供选项:“使用默认超参数”(推荐)/“自定义部分超参数”
  3. 如果用户选择自定义,以默认值为基础,覆盖指定的键,其余保持默认值

重要:不得跳过此步骤。即使用户选择默认值,也必须明确确认。 禁止编造参数键:所有键都必须来自算法 ext_metadata.hyperparams 的 name 字段。

步骤 1.1d:构建 OpenPI 模型的 data.rename_map(仅限 OpenPI)

适用范围:当基础模型为 Physical-Intelligence_PI0-Base 或 Physical-Intelligence_PI05-Base 时执行。其他模型跳过。

完整构建详情请参见 references/openpi-rename-map.md。

步骤 1.2:处理用户数据集

情况 A:已注册资产

cloudrobo asset search-assets --keyword "<dataset_name_or_id>"

提取 id → dataset_asset_id,latest_version_id → dataset_version_id。

情况 B:OBS 路径

cloudrobo workspace current  # Get asset_catalog_id
cloudrobo asset create-asset --catalog-id <catalog_id> --name "<dataset_name>" --type dataset --ext-metadata '{"annotation_status":true}'
cloudrobo asset create-version --asset-id <asset_id> --url "<obs_path>"
cloudrobo asset update-version --asset-id <asset_id> --version-id <version_id> --status RELEASE

情况 C:本地目录

cloudrobo workspace current  # Get asset_catalog_id
cloudrobo asset import-asset --catalog-id <catalog_id> --type dataset --local-path <local_dir_path> --name <dataset_name>
cloudrobo asset update-version --asset-id <asset_id> --version-id <version_id> --status RELEASE

重要:import-asset 要求本地目录包含带有 YAML frontmatter 的 README.md,其中包含 ext_metadata.annotation_status: true。 重要:执行 import-asset 后,数据集版本状态为 CREATING;必须手动发布为 RELEASE,否则训练会报告“数据集未就绪”。

情况 D:未指定 — 使用提问工具询问用户的数据集来源。

阶段 2:模型训练

全程使用 CLI。cloudrobo train create-task --config <JSON> 接受完整的配置 JSON。 名称必须唯一:name 和 output_models[0].model_name 必须全局唯一;使用时间戳后缀。

步骤 2.1:构建训练配置 JSON

将配置 JSON 写入临时文件(避免 PowerShell 特殊字符问题):

{
  "name": "so101-pen-train-<timestamp>",
  "train_mode": "MODEL_TUNING",
  "train_method": "FFT",
  "algorithm": {
    "algorithm_asset_id": "<algorithm_asset_id>",
    "algorithm_version_id": "<algorithm_version_id>"
  },
  "input_models": [{
    "model_asset_id": "<base_model_asset_id>",
    "version_id": "<base_model_version_id>",
    "source_type": "PUBLIC_MODEL_ASSET"
  }],
  "datasets": [{
    "source_type": "CUSTOM_DATASET_ASSET",
    "dataset_asset_id": "<dataset_asset_id>",
    "version_id": "<dataset_version_id>", 
    "dataset_name": "<dataset_name>"
  }],
  "output_models": [{
    "model_name": "so101-pen-output-<timestamp>",
    "model_type": "vla",
    "save_mode": "NEW_MODEL",
    "strict": false
  }],
  "spec": "Ascend: 1 * SNT9B2 | 24 vCPUs | 192 GiB",
  "cluster_id": "<cluster_id_from_stage1>",
  "workspace_id": "<workspace_id>",
  "parameters": "[{\"key\":\"batch_size\",\"desc\":\"批次大小\",\"value\":\"64\",\"constraint\":{\"type\":\"Integer\",\"editable\":true,\"required\":true,\"sensitive\":false}},{\"key\":\"steps\",\"desc\":\"训练步数\",\"value\":\"100000\",\"constraint\":{\"type\":\"Integer\",\"editable\":true,\"required\":true,\"sensitive\":false}},...]", 
  "env": "[]"
}

必填字段:name(唯一)、train_mode(固定为 MODEL_TUNING)、train_method(来自模型 actions)、algorithm、input_models[0].source_type(PUBLIC_MODEL_ASSET)、output_models[0].model_name(唯一)、output_models[0].model_type(固定为 vla)、spec(字符串)、cluster_id(带 pool- 前缀的资源池 ID)、parameters(JSON 数组字符串,格式完整,来自步骤 1.1c)。

parameters 构建:根据算法 ext_metadata.hyperparams 构建完整格式的数组,并保留资产查询中的 desc 和 constraint:

parameters = [
    {
        "key": hp["name"],
        "desc": hp.get("desc") or hp.get("description", ""),
        "value": str(custom_overrides.get(hp["name"], hp["default"])),
        "constraint": hp.get("constraint", {})
    }
    for hp in hyperparams
]
# Serialize to JSON string for the config
parameters_str = json.dumps(parameters, ensure_ascii=False)

必须使用完整格式:每个参数项都必须包含 key、desc、value 和 constraint。desc 和 constraint 直接来自算法资产 ext_metadata.hyperparams 查询结果;不得编造或省略。 OpenPI data.rename_map:default 值已经是单引号包裹的 JSON 字符串格式。直接使用 default 值。自定义映射请参见 references/openpi-rename-map.md。

资源规格:单卡 Ascend: 1 * SNT9B2 | 24 vCPUs | 192 GiB;双卡 Ascend: 2 * SNT9B2 | 48 vCPUs | 384 GiB。使用 SNT9B2 芯片,而非 Ascend-910B。

步骤 2.2:提交训练任务
import subprocess
with open("train_config.json", "r", encoding="utf-8") as f:
    config = f.read().strip()
result = subprocess.run(
    ["cloudrobo", "train", "create-task", "--config", config, "-v"],
    capture_output=True
)
print(result.stdout.decode("utf-8", errors="replace"))

返回 {"task_id": "<task_id>"}。

步骤 2.3:查询训练状态
cloudrobo train show-task --task-id <task_id>
  • FINISHED → 继续执行阶段 3
  • FAILED/CREATE_FAILED/SUBMIT_FAILED → 参阅 references/fault-recovery.md
  • WAITING/RUNNING/PENDING → 继续轮询
cloudrobo train get-stages --task-id <task_id>  # View training stages

阶段流程:scheduling → preparing → running → end

步骤 2.4:提取训练输出模型

output_models 会在创建任务时返回 model_asset_id 和 version_id(平台会预先创建)。从 show-task 结果中获取。训练状态变为 FINISHED 后,模型文件才可用。

阶段 3:推理部署

全程使用 CLI cloudrobo infer create。 模型来源策略:此处部署的模型是训练输出——空间资产 (空间资产),因此适用 cloudrobo-infer 技能的「Model Source → Parameter Policy」表中的 空间资产 / Variant B 路径:必须显式构造参数(model-ext-metadata、 skill-config-json)。 这不是一个本体广场模型——此处不要应用本体广场的「仅核心参数」规则。如果用户在此 工作流中要求直接部署本体广场中的模型,请改为遵循 cloudrobo-infer 技能的 Model Deployment Workflow Variant A (仅需核心参数)。权威判断依据请参阅 cloudrobo-infer SKILL.md →「Model Source → Parameter Policy」表。

步骤 3.1:查询可用资源池
cloudrobo resource list-pools

筛选满足以下条件的资源池:usages 包含 MODEL_DEPLOYMENT,pool_type 为 DEDICATED(优先)或 SHARED,且 nodes[].available_resources > 0。

cloudrobo resource show-pool --pool-id <resource_id>

show-pool 的 --pool-id 使用 resource_id(不带 pool- 前缀)。infer create 的 --pool-id 必须使用 pool-<uuid> 格式(带 pool- 前缀)。

步骤 3.2:构造 model_ext_metadata(必需)

必须通过 --model-ext-metadata 传入 model_feature_mapping。平台不会读取资产版本的 ext_metadata。不传入会立即导致 FAILED。

完整的 r2c 模板和构造步骤请参阅 references/model-ext-metadata.md。

要点:

  1. 根据机器人类型选择 r2c 模板
  2. 从数据集的 meta/info.json 中读取特征信息
  3. 动态修改 input_features/output_features
  4. OpenPI 模型:使用固定的 3 个摄像头键,将 wrist_left 的值复制到 wrist_right
  5. 不要包含 model_type 字段
  6. chunk_size 必须与训练时的 model.action-horizon 一致(OpenPI 默认值为 50)
步骤 3.3:创建推理服务
cloudrobo infer create --name "<infer-service-name>" --flavor "1 * SNT9B2 | 24 vCPUs | 192 GiB" --model-json '{"model_id":"<output_model_asset_id>","model_version_id":"<output_model_version_id>"}' --workspace-id <workspace_id> --pool-id "pool-<resource_id>" --pool-type DEDICATED --model-ext-metadata '<model_ext_metadata_json>' --skill-config-json '{"strict":true,"skills":[{"name":"<skill_name>","prompt":"<task_description>"}]}' --stop-schedule-json '{"duration":6,"time_unit":"HOURS"}' --deploy-timeout-minutes 30

flavor 格式:1 * SNT9B2 | 24 vCPUs | 192 GiB(不带 Ascend: 前缀)。 --pool-id(必需):必须使用 pool-<uuid> 格式。使用不带前缀的 resource_id 会立即导致 FAILED。 --pool-type(必需):必须使用大写的 DEDICATED 或 SHARED。 --model-json(必需):要部署的模型——{"model_id":"<output_model_asset_id>","model_version_id":"<output_model_version_id>"}(字段来自阶段 2 的训练输出)。 --model-ext-metadata(必需):传入步骤 3.2 构造的 JSON。不要包含 model_type。 --skill-config-json(重要):面向真实机器人评估的服务必须定义技能,否则调度 create-task 会返回 500。格式:{"strict":true,"skills":[{"name":"<skill_name>","prompt":"<task_description>"}]}。prompt 必须与阶段 4 的 --task 参数完全一致。 不要传入 --internet-access-enable:这会导致 predict_url 只有 internet 类型;调度需要 intranet 类型的 URL。 创建后会自动进入 DEPLOYING;无需调用 infer start。如果状态为 FAILED,请调用 infer start 重试。

步骤 3.4:轮询推理服务状态
cloudrobo infer show --service-id <service_id>
  • RUNNING → 继续执行阶段 4
  • DEPLOYING → 继续轮询
  • FAILED → 调用 cloudrobo infer start --service-id <service_id> 重试;参阅 references/fault-recovery.md
阶段 4:真实机器人评估

时间安排:仅在推理服务处于 RUNNING 状态后查询机器人。 要点:dispatch 没有 create-session 命令;session_id 即 workspace_id,无需单独创建会话。

步骤 4.0:查询机器人并确认选择
cloudrobo robot list --workspace-id <workspace_id>

查询工作区中的所有机器人。将结果分为:

  • 在线机器人:status = ONLINE 且 type 与目标机器人类型匹配(例如 ARM)
  • 离线机器人:status = OFFLINE 或 INACTIVE

如果找到在线机器人——使用提问工具请用户确认:

选项说明
使用此在线机器人(推荐)直接使用选定的在线机器人继续
选择一台离线机器人并使其上线导出证书,引导机器人端完成接入,轮询直至状态为 ONLINE
注册新机器人创建新机器人,导出证书,引导完成接入,轮询直至状态为 ONLINE

显示在线机器人的详情(名称、类型、制造商、型号、状态)供用户参考。不得在用户不知情的情况下自动选择在线机器人。

如果没有找到在线机器人——展示离线机器人(如果有)和新注册选项;请用户选择(不要询问是否需要切换到其他工作区)。

关键:继续操作任何机器人前都必须获得用户确认。不得自动选择。 必须传入 --workspace-id。status 的取值为大写的 ONLINE/OFFLINE/INACTIVE。 离线机器人接入和注册新机器人的步骤,请参阅 references/robot-selection-guide.md。

步骤 4.1:确认 session_id

无需创建会话。session_id = workspace_id。直接将 workspace_id 用作 --session-id。

cloudrobo dispatch list-tasks --session-id <workspace_id> --limit 1  # Verify
步骤 4.2:创建并执行任务

要点:create-task 会同时创建并执行任务。没有单独的 execute-task 命令。

cloudrobo dispatch create-task --session-id <workspace_id> --name "<task_name>" --task "<task_description>" --constraints-json '{"model":{"exec_model_id":"<service_id>"},"robot_id":"<robot_id>","exec_constraints":{"max_iter_num":60,"max_run_time":5}}'
  • --session-id:等于 workspace_id
  • --constraints-json(必需):包含以下内容的 JSON 对象:
    • model.exec_model_id:推理服务 ID(service_id),不是模型资产 ID
    • robot_id:所选在线机器人的 ID
    • exec_constraints:执行限制,例如 {"max_iter_num":60,"max_run_time":5}
  • --task:任务描述/技能提示词;如果 skill_config.strict=true,则必须与某项技能的 prompt 完全一致
  • 在 Windows/PowerShell 上,必须使用 Python subprocess,以避免 JSON 转义问题

从响应中提取 id → task_id。任务会自动启动(状态为 RUNNING)。

步骤 4.3:轮询任务状态
cloudrobo dispatch show-task --session-id <workspace_id> --task-id <task_id>
  • RUNNING → 继续轮询
  • COMPLETED → 进入阶段 5
  • FAILED/CANCELLED → 请参阅 references/fault-recovery.md

状态值为大写。命令是 show-task,不是 get-task-status。

步骤 4.4:查看执行日志和结果
cloudrobo dispatch show-task-result --session-id <workspace_id> --task-id <task_id> --limit 100
阶段 5:结果输出

汇总并输出完整的流水线结果:用例、基础模型、训练方法、超参数、数据集 ID、训练任务 ID、推理服务 ID、会话 ID、机器人 ID、评估分数和报告。部分流水线在最后一个阶段完成后,输出相应的汇总信息。

长时间运行的异步执行策略

完整流水线需要数小时至数天。使用 cronjob 轮询和检查点恢复。

轮询间隔:训练 30 分钟/72 小时超时;推理 30 分钟/2 小时超时;评估 30 分钟/1 小时超时。cronjob 最小间隔为 30 分钟。在提示词中包含完整的流水线状态(所有 ID),以便 Agent 判断当前阶段。

检查点恢复:会话中断后:读取流水线状态 → 查询 current_stage 任务状态 → 继续等待/进入下一阶段/故障恢复。

流水线状态跟踪模板请参阅 references/pipeline-templates.md。


核心命令

阶段命令用途
0cloudrobo asset list-publication-assets --type model列出市场模型
1cloudrobo asset search-assets --keyword "<keyword>"查询模型/数据集资源
1cloudrobo asset show-asset --asset-id <id>获取资源详情和超参数
1cloudrobo asset create-asset创建数据集资源
1cloudrobo asset create-version创建资源版本
1cloudrobo asset update-version --status RELEASE发布版本
1cloudrobo asset import-asset将本地目录导入 OBS
1cloudrobo workspace current获取当前工作空间和 catalog_id
2cloudrobo train create-task --config <json>创建训练任务
2cloudrobo train show-task --task-id <id>查询训练状态
2cloudrobo train get-stages --task-id <id>获取训练阶段
2cloudrobo train get-events --task-id <id> --start-time <ms> --end-time <ms>获取训练事件(必须指定时间范围,单位为毫秒)
3cloudrobo resource list-pools列出资源池
3cloudrobo resource show-pool --pool-id <id>获取资源池详情
3cloudrobo infer create创建推理服务
3cloudrobo infer show --service-id <id>查询服务状态
3cloudrobo infer start --service-id <id>重试失败的部署
3cloudrobo infer list --workspace-id <id>列出服务
3cloudrobo infer list-logs --service-id <id>查看服务日志
4cloudrobo robot list --workspace-id <id>列出机器人
4cloudrobo robot show --robot-id <id>确认机器人状态(派发前重新确认其处于 ONLINE 状态)
4cloudrobo robot create注册新机器人(用户选择选项 C 时)
4cloudrobo robot export-certificate --robot-id <id>导出离线机器人接入所需的访问配置
4cloudrobo dispatch create-task创建并执行任务
4cloudrobo dispatch show-task查询任务状态
4cloudrobo dispatch list-tasks列出任务
4cloudrobo dispatch show-task-result获取任务结果/日志
4cloudrobo dispatch cancel-task取消任务

参数确认

参数必填说明示例
workspace_id是活动工作空间 ID通过 cloudrobo workspace use <id> 设置
model_keyword是用于搜索的基础模型名称LeRobot_PI05-Base
train_method是来自模型操作FFT 或 LORA
spec是资源规格字符串Ascend: 1 * SNT9B2 | 24 vCPUs | 192 GiB
parameters是超参数 JSON 数组字符串[{"key":"batch_size","value":"32"}]
pool_id是(阶段 3)带 pool- 前缀的资源池 IDpool-d1cc6d45-...
pool_type是(阶段 3)大写的资源池类型DEDICATED 或 SHARED
model_ext_metadata是(阶段 3)特征映射 JSON 字符串参见 references/model-ext-metadata.md
skill_config_json是(阶段 3)用于派发的技能定义{"strict":true,"skills":[...]}
service_id是(阶段 4)推理服务 ID来自 infer create 响应
robot_id是(阶段 4)在线机器人 ID来自 robot list 响应
task是(阶段 4)任务描述/提示词"Insert the pen into the pen holder"

阶段 3 参数说明:在此工作流中,model_ext_metadata 和 skill_config_json 是必填项,因为部署的模型是空间资源(训练输出),且阶段 4 的真实机器人评估依赖这些参数。这遵循 cloudrobo-infer 技能“模型来源 → 参数策略”表中的空间资源/Variant B路径。部署具身广场模型时,则使用 cloudrobo-infer 技能的 Variant A——只传递必需的核心参数,不要传入 model_ext_metadata/skill_config_json。


参考文档

  • references/cli-installation-guide.md — CloudRobo CLI 安装与配置
  • references/iam-policies.md — CloudRobo 的最小权限 IAM 策略
  • references/dataflow-diagram.md — 流水线的 Mermaid 数据流图
  • references/pipeline-templates.md — 快速参考模板和超参数配置
  • references/openpi-rename-map.md — OpenPI 模型 data.rename_map 构建指南
  • references/model-ext-metadata.md — 使用 r2c 模板构建 model_ext_metadata
  • references/fault-recovery.md — 训练、推理和评估的故障恢复
  • references/robot-selection-guide.md — 机器人选择、离线接入和新机器人注册步骤详解
  • references/constraints.md — 完整的限制与规则列表
  • references/verification-method.md — 验证方法和 CLI 命令参考
  • references/acceptance-criteria.md — 流水线执行验收标准

KooCLI 命令格式标准

cloudrobo <Service> <Operation> [--params]
功能描述示例
服务名称cloudrobo 服务名称asset、train、infer、dispatch、robot、resource、workspace
操作名称短横线分隔的操作名称search-assets、create-task、show-task
简单参数--key=value--keyword="LeRobot_PI05-Base"
JSON 参数--key='<json>'--config '{"name":"..."}'
区域不适用(cloudrobo 使用工作空间)通过 cloudrobo workspace use <id> 设置

在 Windows/PowerShell 上,复杂的 JSON 参数应写入文件,再通过 Python subprocess 调用,以避免 Shell 转义问题。


验证

  • 执行模式:正确识别用户意图和对应的阶段范围
  • 跳过阶段的输入:从中间阶段开始时,已提供所有必需的前置参数
  • 端到端:完成阶段 0-5——训练 FINISHED → 推理 RUNNING → 评估 COMPLETED
  • 超参数确认:步骤 1.1c 展示了默认值并询问用户;data.rename_map:OpenPI 已执行步骤 1.1d,并使用单引号包裹的紧凑 JSON
  • 数据集处理:已上传本地目录,版本为 RELEASE,训练未报告“dataset not ready”
  • 资产交接:每个阶段的输出 ID 都已正确传递到下一阶段
  • 训练:CLI create-task 返回 task_id,状态不是 CREATE_FAILED;最终变为 FINISHED
  • 推理:infer show 状态为 RUNNING;pool_id 使用 pool-<uuid> 格式,pool_type 为大写,资源池支持 MODEL_DEPLOYMENT;model_ext_metadata 根据 r2c 模板和数据集信息构建,不含 model_type 字段,chunk_size 与 model.action-horizon 一致,夹爪使用 end_effector_states.position
  • 真实机器人评估:步骤 4.0 使用提问工具确认机器人选择(不静默自动选择);dispatch show-task 状态为 COMPLETED;session_id = workspace_id;constraints-json 中的 model.exec_model_id 是服务 ID;推理服务具有包含非空技能的 skill_config;predict_url 包含 intranet 类型
  • 检查点恢复:会话中断后,流水线状态可以恢复

详细检查清单请参阅 references/verification-method.md 和 references/acceptance-criteria.md。

评论

支持 Markdown