news 2026/5/10 5:41:18

CANN ACT模型昇腾推理指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN ACT模型昇腾推理指南

ACT 具身智能VLA大模型昇腾使用指南

【免费下载链接】cann-recipes-embodied-intelligence本项目针对具身智能业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence

本目录介绍在 310P 上如何对 ACT 模型进行离线模型转换及推理,附带精度验证及仿真步骤。

ACT整体介绍

在 Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware 论文中提出了ACT: Action Chunking with Transformers 模型,仓库地址为:https://github.com/tonyzhaozh/act

功能介绍

ACT 是一种典型的基于 Transformer 的模仿学习控制策略,其核心思想是以“动作分块(Action Chunking)”的方式一次性预测一段连续动作序列,从而有效缓解逐步预测带来的误差累积问题,并在多个双臂精细操作任务中验证了其有效性。

ACT的相关代码仓拉取、仿真测试集和模型下载

本样例使用的示例模型为:https://huggingface.co/lerobot/act_aloha_sim_transfer_cube_human/tree/main

该模型是一个在ALOHA仿真环境中经过微调的模型。

模型输入输出
输入数据名数据类型(dtype)数据大小(shape)
observation.images_xxx (摄像头图像)Float32$[1, N_c, 3, H, W]$
observation.state (机器人位姿)Float32$[1, N_k]$
输出数据名数据大小(shape)
actions$[1, chunk_size, N_k]$

参数符号说明:

  • $N_c$ :摄像头个数(图片个数),训练时决定,通常为一路摄像头~三路摄像头。
  • $N_k$ :自由度,机器人构型决定。
  • $H, W$: 摄像头拍摄rgb图像分辨率。
  • $chunk_size$:机器人执行步数个数。

输入输出格式定义在模型文件中的config.json中,样例示例为一路摄像头,内容如下:

"input_features": { "observation.images.top": { "type": "VISUAL", "shape": [ 3, 480, 640 ] }, "observation.state": { "type": "STATE", "shape": [ 14 ] } }, "output_features": { "action": { "type": "ACTION", "shape": [ 14 ] } }, "chunk_size": 100,

ACT在昇腾310P上的运行配置

与昇腾平台相关的环境配置

.om模型转化及运行需要安装CANN软件包。

本样例的编译执行依赖CANN开发套件包(cann-toolkit)与CANN二进制算子包(cann-kernels),支持的CANN软件版本为CANN 8.0.0-8.2.RC1。 请从软件包下载地址下载对应架构软件包,例如Ascend-cann-toolkit_8.2.RC1_linux-x86_64.runAscend-cann-kernels-310b_8.2.RC1_linux-x86_64.run软件包,并参考CANN安装文档依次进行安装。

# ${cann_install_path}为CANN包的实际安装目录,注意每次新建终端时,首先source一下set_env.sh。 # 方式1:默认路径安装,以root用户为例 source /usr/local/Ascend/ascend-toolkit/set_env.sh # 方式2:指定路径进行安装 source ${cann_install_path}/ascend-toolkit/set_env.sh
与昇腾服务器无关的环境配置
# 1) 拉取 lerobot 仓库并切到指定 commit git clone https://github.com/huggingface/lerobot.git cd lerobot git checkout d9e74a9d374a8f26582ad326c699740a227b483c # 2) 创建运行环境 conda create -y -n lerobot python=3.10 conda activate lerobot # 3) 安装 lerobot(本地可编辑安装) pip install -e . # 4) 仿真依赖(Aloha 仿真需要 gym_aloha / gym-aloha) # 推荐用 extra 一次性安装: pip install -e ".[aloha]" # 5) 固定 numpy 版本(如你的环境需要) pip install numpy==1.26.0
仿真渲染(MuJoCo)无头模式

如果服务器/容器缺少显示环境或 OpenGL 渲染后端,MuJoCo 可能无法正常渲染。 可以在运行仿真/评测前指定 EGL 无头渲染:

export MUJOCO_GL=egl
ACT在昇腾310P上的推理步骤

本节介绍离线推理模式(通过昇腾亲和的OM文件)的部署参考,更多使用参数可参考atc工具使用文档。

下面给出一条推荐的单机器链路:

  1. 在 310P 宿主机导出 ONNX(使用Host CPU)
  2. 使用 ATC 将 ONNX 转为 OM(在 310P 上)
  3. 使用 OM-backend sim-evaluator 在仿真环境评测(在 310P 上)

需要在转化onnx的机器上额外安装onnx runtime依赖:

pip install onnx # 基于Host CPU转换onnx请安装(310P 宿主机执行): pip install onnxruntime # 基于Host GPU转换onnx请安装: pip install onnxruntime-gpu
1) 导出 ONNX

在 Host(CPU 或 GPU)上执行:

# 以本地目录为例:act_model/ 里包含 config.json 等文件 # 也可以先用 huggingface-cli 下载到 act_model/: # pip install -U huggingface_hub # huggingface-cli download lerobot/act_aloha_sim_transfer_cube_human --local-dir act_model python3 act/convert_and_verify_onnx.py \ --pretrained-policy-path act_model \ --output outputs/onnx/act.onnx \ --device cpu \ --opset 14

说明:

  • 输入 schema(包含多个摄像头 key 时也支持)严格来自config.json.input_features
  • 默认会用 ONNXRuntime CPU 对比 PyTorch 输出,打印 max/mean abs diff;如需跳过可加--no-validate

样例输出如下:

INFO: ONNX export finished INFO: Validating ONNX output vs PyTorch... INFO: ONNXRuntime validation uses CPUExecutionProvider; diff computed on CPU INFO: ONNX inference time: 0.084086 sec INFO: PyTorch output shape: (1, 100, 14) INFO: ONNX output shape: (1, 100, 14) INFO: Max abs diff: 0.000371844 INFO: Mean abs diff: 0.000106432
2) ATC 将 ONNX 转为 OM

在 310P 上(已安装并sourceCANN 环境)执行 ATC:

# 推荐直接用 atc(路径按你的实际文件位置修改) atc --model=outputs/onnx/act.onnx \ --framework=5 \ --output=outputs/om/act \ --soc_version=Ascend310P1

当模型转换完成后,当前目录应当存在一个名为act.om的模型(或者--output参数指定目录下),在终端中有输出“ATC run success, welcome to the next use”。

3) 使用 OM-backend sim-evaluator 进行仿真评测

在 310P 上执行(需要 ACL/ACLLite Python 依赖可用)。 可参考:ACLLite安装教程

python3 act/eval_act_ascend.py \ --policy.path=act_model \ --om_model_path=outputs/om/act.om \ --env.type=aloha \ --env.task=AlohaTransferCube-v0 \ --eval.batch_size=1 \ --eval.n_episodes=1 \ --env.episode_length=600 \ --seed=4412

输出:

  • 评测结果会写入outputs/eval/.../eval_info.json
  • 日志会打印Aggregated eval metrics(包含 success_rate 等聚合指标)
ACT在昇腾上的精度验证步骤

接下来介绍两种验证转换后的.om模型在NPU上运行验证方法。

基于mock的数据输入,CPU/GPU与原始Pytorch输出相似度对比

构造输入数据测试Pytorch CPU/GPU和OM 310P NPU的输出余弦相似度对比:

# 在 310P 上执行(需要 ACL/AclLite Python 依赖) python3 act/verify_om_onnx.py \ --pretrained-policy-path act_model \ --onnx-model-path outputs/onnx/act.onnx \ --om-model-path outputs/om/act.om \ --seed 42

该脚本会根据 config.json 生成确定性的 dummy 输入(支持多摄像头输入),并对比 ONNXRuntime(CPU) vs OM(NPU)

基于Aloha仿真模拟器的功能测试示例

使用Aloha数据集在NPU进行推理,在Host CPU上进行仿真渲染:

python3 act/eval_act_ascend.py \ --policy.path=act_model \ --om_model_path=outputs/om/act.om \ --env.type=aloha \ --env.task=AlohaTransferCube-v0 \ --eval.batch_size=1 \ --eval.n_episodes=1 \ --env.episode_length=600 \ --seed=4412

示例效果:

可能遇到的问题

关于 policy_preprocessor / policy_postprocessor 的归一化参数丢失。ACT 在训练时通常对 observation / action 做了归一化(normalization)。为了让OM 输出的 action能正确落回环境动作空间,并且OM 输入的 observation与训练时一致,评测需要两份处理器产物:

  • policy_preprocessor.json+ 对应的*.safetensors:负责推理前对 observation 做与训练一致的预处理/归一化
  • policy_postprocessor.json+ 对应的*.safetensors:负责把模型输出 action 做反归一化(unnormalize),再送入环境 step

获取方式有两种:

  1. 模型目录里已经自带(部分模型仓库支持):直接检查act_model/是否包含上述两个 json 文件及其 safetensors。

  2. 用迁移脚本生成:如果你下载的模型只有model.safetensors + config.json,没有上述 processor 文件,先在 Host 侧运行一次迁移脚本生成<模型目录>_migrated/

# 在lerobot根目录下执行: python3 src/lerobot/processor/migrate_policy_normalization.py \ --pretrained-path act_model

默认会生成如下内容:

act_model_migrated/ ├── policy_preprocessor.json ├── policy_postprocessor.json ├── policy_preprocessor_step_*.safetensors ├── policy_postprocessor_step_*.safetensors └── ...

说明:

  • act/eval_act_ascend.py 会优先在--policy.path指向的目录查找 processors;如果没有,会自动尝试同级的<policy_dir>_migrated/
  • 也可以直接把--policy.path指向act_model_migrated/(前提是该目录包含config.json)。

Citation

@misc{zhao2023learningfinegrainedbimanualmanipulation, title={Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware}, author={Tony Z. Zhao and Vikash Kumar and Sergey Levine and Chelsea Finn}, year={2023}, eprint={2304.13705}, archivePrefix={arXiv}, primaryClass={cs.RO}, url={https://arxiv.org/abs/2304.13705}, } @misc{cadene2024lerobot, author = {Cadene, Remi and Alibert, Simon and Soare, Alexander and Gallouedec, Quentin and Zouitine, Adil and Palma, Steven and Kooijmans, Pepijn and Aractingi, Michel and Shukor, Mustafa and Aubakirova, Dana and Russi, Martino and Capuano, Francesco and Pascal, Caroline and Choghari, Jade and Moss, Jess and Wolf, Thomas}, title = {LeRobot: State-of-the-art Machine Learning for Real-World Robotics in Pytorch}, howpublished = "\url{https://github.com/huggingface/lerobot}", year = {2024} }

附录

lerobot 根目录相关代码目录树
  • 检查整体代码目录树,经过上述的操作,ACT适配昇腾的lerobot根目录中的最终相关代码目录树如下所示:
├── readme.md # 本文件 ├── act_model # Huggingface或其他来源下载的模型 ├── act/ | ├── eval_act_ascend.py # Ascend OM-backend sim-evaluator | ├── convert_and_verify_onnx.py # PyTorch -> ONNX 转化脚本 | ├── verify_om_onnx.py # ONNXRuntime(CPU) vs OM(NPU) 误差对比 | ├── convert_om.sh # ATC ONNX -> OM 示例脚本 | ├── convert_utils.py # PyTorch -> ONNX 转化辅助函数 | ├── policy_input_schema.py # 自动获取并读取模型文件config.json | └── figure/ # README所用示意图 └── outputs/ # 转换产生文件 ├── onnx/ ├── om/ └── eval/

【免费下载链接】cann-recipes-embodied-intelligence本项目针对具身智能业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 5:35:15

AI协同编程:从代码生成到项目级开发的智能辅助实践

1. 项目概述&#xff1a;当AI成为你的技术合伙人最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“ai-cofounder”。光看名字就挺吸引人&#xff0c;AI联合创始人&#xff1f;这听起来像是科幻电影里的情节。但点进去仔细研究后&#xff0c;我发现&#xff0c;这其实是一个…

作者头像 李华
网站建设 2026/5/10 5:34:52

AI辅助开发安全自动化:构建非阻塞式安全基线与CI/CD集成实践

1. 项目概述&#xff1a;为AI辅助开发构建自动化安全基线在AI编码助手&#xff08;如Claude Code、Cursor、Codex&#xff09;日益普及的今天&#xff0c;开发效率得到了前所未有的提升。但硬币的另一面是&#xff0c;当AI以惊人的速度生成代码、依赖和配置时&#xff0c;传统的…

作者头像 李华
网站建设 2026/5/10 5:34:51

Pulse:构建可靠个人AI操作系统的内核架构与工程实践

1. 项目概述&#xff1a;一个真正懂你的个人AI操作系统如果你和我一样&#xff0c;对市面上的AI助手感到有些“隔靴搔痒”&#xff0c;那Pulse这个项目可能会让你眼前一亮。它不是什么聊天机器人套壳&#xff0c;也不是一个用完即走的自动化脚本。Pulse的野心&#xff0c;是成为…

作者头像 李华
网站建设 2026/5/10 5:28:34

REFramework技术深度解析:RE引擎游戏Mod开发的架构革命

REFramework技术深度解析&#xff1a;RE引擎游戏Mod开发的架构革命 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework REFramework作为专为RE引擎游…

作者头像 李华
网站建设 2026/5/10 5:23:21

初创公司如何借助Taotoken多模型能力快速验证AI产品原型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创公司如何借助Taotoken多模型能力快速验证AI产品原型 对于初创公司而言&#xff0c;在资源有限的情况下快速验证产品想法至关重…

作者头像 李华
网站建设 2026/5/10 5:20:44

AI——Dify创建第一个AI聊天机器人

Dify创建AI聊天机器人一、前言二、创建聊天应用1. 进入应用创建页面2. 选择应用类型3. 填写应用基础信息三、核心配置&#xff08;让AI更听话&#xff09;1. 选择模型2. 配置提示词&#xff08;Prompt&#xff09;3. 调整关键参数四、调试与预览1. 在线调试2. 快速优化五、发布…

作者头像 李华