关于 huawei-cloud-cloudrobo-model-workflow
此技能通过 CLI 编排 CloudRobo 机器人模型开发,涵盖资产选择、训练、推理部署和真实机器人评测,并说明各阶段依赖;流程要求使用 CLI,不使用 Python SDK。
主要功能
- 01查询模型和数据集资产
- 02配置并提交训练任务
- 03轮询训练状态
- 04部署推理服务
- 05在已注册机器人上评测任务
- 06输出评测结果
适用场景
- 01运行完整的模型训练与评测流程
- 02训练模型并部署推理服务
- 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.mdcli-installation-guide.mdconstraints.mddataflow-diagram.mdfault-recovery.mdiam-policies.mdmodel-ext-metadata.mdopenpi-rename-map.mdpipeline-templates.mdrobot-selection-guide.mdverification-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 2 | base_model_asset_id, dataset_asset_id | "Please provide base model asset_id and dataset asset_id" |
| Stage 3 | output_model_asset_id, output_model_version_id | "Please provide training output model asset_id and version_id" |
| Stage 4 | service_id | "Please provide inference service service_id" |
数据流约定
| 来源 → 目标 | 传递值 |
|---|---|
| Stage 0 → 1 | model_keyword, dataset_source, dataset_value, robot_type |
| Stage 1 → 2 | base_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 → 3 | output_model_asset_id, output_model_version_id |
| Stage 3 → 4 | service_id |
| Stage 4 → 5 | robot_id, task_id, task_status, task_result |
前置条件
- 已安装并完成身份验证的 cloudrobo CLI(
HUAWEI_CLOUD_AK/HUAWEI_CLOUD_SK) - 已通过
cloudrobo workspace use <id>设置 workspace_id - 市场中有可用的基础模型资产
- 用户提供数据集:已注册资产、OBS 路径或本地目录
- 已注册并在线的真实机器人
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 / general | LeRobot_PI05-Base |
数据集来源解析
| 用户输入 | 类型 | 处理方式 |
|---|---|---|
| 资产名称/asset_id | user_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_idlatest_version_id→base_model_version_idactions[].action→train_method(例如,FFT、LORA)actions[].algorithm.asset_id→algorithm_asset_idactions[].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:确认并自定义超参数(必须执行)
获取默认超参数后,必须使用提问工具询问用户是否要修改:
- 将默认超参数显示为表格(名称、默认值、说明)
- 提供选项:“使用默认超参数”(推荐)/“自定义部分超参数”
- 如果用户选择自定义,以默认值为基础,覆盖指定的键,其余保持默认值
重要:不得跳过此步骤。即使用户选择默认值,也必须明确确认。 禁止编造参数键:所有键都必须来自算法
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查询结果;不得编造或省略。 OpenPIdata.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→ 继续执行阶段 3FAILED/CREATE_FAILED/SUBMIT_FAILED→ 参阅references/fault-recovery.mdWAITING/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-inferSKILL.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。
要点:
- 根据机器人类型选择 r2c 模板
- 从数据集的
meta/info.json中读取特征信息 - 动态修改
input_features/output_features - OpenPI 模型:使用固定的 3 个摄像头键,将
wrist_left的值复制到wrist_right - 不要包含
model_type字段 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→ 继续执行阶段 4DEPLOYING→ 继续轮询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),不是模型资产 IDrobot_id:所选在线机器人的 IDexec_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→ 进入阶段 5FAILED/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。
核心命令
| 阶段 | 命令 | 用途 |
|---|---|---|
| 0 | cloudrobo asset list-publication-assets --type model | 列出市场模型 |
| 1 | cloudrobo asset search-assets --keyword "<keyword>" | 查询模型/数据集资源 |
| 1 | cloudrobo asset show-asset --asset-id <id> | 获取资源详情和超参数 |
| 1 | cloudrobo asset create-asset | 创建数据集资源 |
| 1 | cloudrobo asset create-version | 创建资源版本 |
| 1 | cloudrobo asset update-version --status RELEASE | 发布版本 |
| 1 | cloudrobo asset import-asset | 将本地目录导入 OBS |
| 1 | cloudrobo workspace current | 获取当前工作空间和 catalog_id |
| 2 | cloudrobo train create-task --config <json> | 创建训练任务 |
| 2 | cloudrobo train show-task --task-id <id> | 查询训练状态 |
| 2 | cloudrobo train get-stages --task-id <id> | 获取训练阶段 |
| 2 | cloudrobo train get-events --task-id <id> --start-time <ms> --end-time <ms> | 获取训练事件(必须指定时间范围,单位为毫秒) |
| 3 | cloudrobo resource list-pools | 列出资源池 |
| 3 | cloudrobo resource show-pool --pool-id <id> | 获取资源池详情 |
| 3 | cloudrobo infer create | 创建推理服务 |
| 3 | cloudrobo infer show --service-id <id> | 查询服务状态 |
| 3 | cloudrobo infer start --service-id <id> | 重试失败的部署 |
| 3 | cloudrobo infer list --workspace-id <id> | 列出服务 |
| 3 | cloudrobo infer list-logs --service-id <id> | 查看服务日志 |
| 4 | cloudrobo robot list --workspace-id <id> | 列出机器人 |
| 4 | cloudrobo robot show --robot-id <id> | 确认机器人状态(派发前重新确认其处于 ONLINE 状态) |
| 4 | cloudrobo robot create | 注册新机器人(用户选择选项 C 时) |
| 4 | cloudrobo robot export-certificate --robot-id <id> | 导出离线机器人接入所需的访问配置 |
| 4 | cloudrobo dispatch create-task | 创建并执行任务 |
| 4 | cloudrobo dispatch show-task | 查询任务状态 |
| 4 | cloudrobo dispatch list-tasks | 列出任务 |
| 4 | cloudrobo dispatch show-task-result | 获取任务结果/日志 |
| 4 | cloudrobo 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- 前缀的资源池 ID | pool-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_metadatareferences/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。