资讯动态

CANN Pi0.5模型昇腾OM推理指南

发布时间:2026/8/15 22:45:41 来源:尧图企业网站定制
Pi0.5 具身智能 VLA 大模型昇腾使用指南【免费下载链接】cann-recipes-embodied-intelligence本项目针对具身智能业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence本目录用于在昇腾 310P NPU 上完成 Pi0.5 的完整部署链路PyTorch 导出 ONNXPart1 / Part2使用 ATC 将 ONNX 编译为 OMCPU 侧 ONNX 端到端推理验证NPU 侧 OM 端到端推理验证文档同时给出与 Libero 仿真环境结合的建议方式便于后续评测与集成。Pi0.5 整体介绍在 $π_{0.5}$: a Vision-Language-Action Model with Open-World Generalization 论文中提出了 Pi0 模型原仓库地址为https://github.com/Physical-Intelligence/openpiLeRobot 基于 OpenPI 的代码进行了迁移并在 v0.4.0 后重构了 pi0 和 pi0.5 的代码结构。基于旧版 LeRobot 训练的模型在新版代码推理时可能出现配置类报错。因此本样例主要适配58f70b6bd370864139a3795ac3497a9eae8c42d5对应版本的 LeRobot 代码。为适配昇腾 NPU 的显存和计算特性我们在推理时将 Pi0.5 解耦为两部分进行部署Part 1 (VLM 模块)主要由 PaliGemma 构成负责处理视觉图像Image、本体状态State与语言指令Language Tokens提取多模态特征输出缓存的past_kv_tensor与prefix_pad_masks。Part 2 (Action Expert 模块)主要由 Gemma 构成利用 Part 1 提取的特征在循环内部进行 10 步去噪迭代最终输出机器人执行动作Action。功能介绍Pi0.5 是基于 OpenPI/LeRobot 框架的升级版 Vision-Language-Action (VLA) 模型。与原版 Pi0 类似Pi0.5 同样基于条件去噪扩散过程Diffusion来生成动作但其针对视觉输入、Token长度以及网络结构进行了优化升级。Pi05 的相关代码仓、仿真测试集和模型下载本样例使用的示例模型为https://huggingface.co/lerobot/pi05_libero_finetuned_v044该模型在 MuJoCo 仿真环境中完成微调测试集为 LIBERO。建议使用与训练/导出阶段一致的 LeRobot 代码版本、配置文件和 tokenizer避免输入特征定义不一致导致的推理错误。模型输入输出由于模型被拆分为两部分各自的输入输出如下Part 1 (VLM)输入数据名数据类型(dtype)数据大小(shape)observation.state 机器人位姿状态Float32$[1, 8]$observation.images.image 第一视角摄像头图像Float32$[1, 3, 256, 256]$observation.images.image2 第二视角摄像头图像Float32$[1, 3, 256, 256]$observation.language.tokens 语言指令 TokenInt64$[1, 200]$observation.language.attention_mask 语言注意力掩码Bool$[1, 200]$prefix_att_masks 图像与语言拼接 1D 掩码Bool$[1, 968]$prefix_att_2d_masks_4d 图像与语言拼接 4D 注意力掩码Float32$[1, 1, 968, 968]$输出数据名数据类型(dtype)数据大小(shape)past_kv_tensor 视觉与语言特征 KV 缓存Float16动态 (由模型层数和注意力头数决定)prefix_pad_masks 特征 Padding 掩码Bool$[1, 968]$Part 2 (Action Expert)输入数据名数据类型(dtype)数据大小(shape)past_kv_tensor 来自 Part 1 的特征 KV 缓存Float16与 Part 1 输出的 Shape 保持一致prefix_pad_masks 来自 Part 1 的掩码Bool$[1, 968]$time 扩散过程时间步参数Float16$[1]$noise 初始或中间扩散动作噪声Float16$[1, 50, 32]$输出数据名数据类型(dtype)数据大小(shape)action 单步去噪后的动作块 ChunkFloat16 / Float32$[1, 50, 32]$参数符号与数值补充说明$256$: 图像输入的分辨率$H256, W256$Pi0.5 默认将图像处理为该尺寸。$200$: 文本指令的最大 Token 长度。$968$: 拼接后的序列总长度包含 3 路图像 Token $3 \times 256 768$ 以及 200 长度的文本 Token。$50$: 动作执行步数$chunk_size$。$32$: Pi0.5 预设的最大动作维度$max_action_dim$最终输出后通常会根据实际机器人的自由度进行截断。输入输出格式定义在模型文件中的config.json中样例示例为二路摄像头内容如下input_features: { observation.images.image: { type: VISUAL, shape: [ 3, 256, 256 ] }, observation.images.image2: { type: VISUAL, shape: [ 3, 256, 256 ] }, observation.state: { type: STATE, shape: [ 8 ] } }, output_features: { action: { type: ACTION, shape: [ 7 ] } }, chunk_size: 50,Pi05在昇腾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.run与Ascend-cann-kernels-310p_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 # 导入 ACLLite 环境变量 (请替换为您实际的 acllite_utils.py 所在目录的上一级) # 有可能路径为 /path/to/Ascend/ascend-toolkit/latest/thirdpart/python/ export PYTHONPATH/path/to/Ascend/ascend-toolkit/latest_owner/thirdpart/python/:$PYTHONPATH # 使用 HuggingFace 国内镜像网址 export HF_ENDPOINThttps://hf-mirror.com与昇腾服务器无关的环境配置导出 ONNX 与 CPU 验证# 1) 拉取 GitCode 本 PI05 使用仓库并切换指定分支 git clone https://gitcode.com/CANN/cann-recipes-embodied-intelligence.git # 2) 拉取 lerobot 仓库并切到指定 **commit** cd cann-recipes-embodied-intelligence/manipulation git clone https://github.com/huggingface/lerobot.git # **如果contrib下没有lerobot目录** cd lerobot git checkout 58f70b6bd370864139a3795ac3497a9eae8c42d5 # 3) 创建并激活 Conda 环境 conda create -y -n lerobot-pi05 python3.10 conda activate lerobot-pi05 # 4) 安装 lerobot本地可编辑安装 pip install -e . # **如果使用不同版本的 lerobot请重新执行pip install -e .进行更新** # 5) Pi0.5 依赖安装 pip install -e .[pi] # 6) 仿真依赖LIBERO 仿真依赖 # 推荐用 extra 一次性安装 pip install -e .[libero] # 7) 固定 numpy 版本如你的环境需要 pip install numpy1.26.0 # 使用atc工具时推荐使用该版本numpy以避免潜在兼容性问题本地补丁应用在开始 ONNX 导出前建议先把 LeRobot 适配文件同步到本地仓并对当前环境中的transformers应用补丁。# 1) 将 Part1,2 适配代码复制到 LeRobot 源码目录 cd pi05/infer_with_om/lerobot_modified bash ./cp_to_lerobot.sh ./modeling_pi05_part1.py policies/pi05 bash ./cp_to_lerobot.sh ./modeling_pi05_part2.py policies/pi05 # 若提示未找到 lerobot 根目录检查是否真正运行 pip install -e . 进行本地可编辑安装 # 支持第三个参数输入 lerobot 根目录保底: $bash $SCRIPT_NAME 源文件路径 目标子目录 [lerobot根目录(可选)] # 2) 给 transformers 打 Gemma 相关补丁 cd pi05/infer_with_om/lib_modified bash ./apply_gemma_patch.sh # 3) 给 transformers 打 ONNX symbolic(opset14) 相关补丁 bash ./apply_symbolic_opset14_patch.sh # 针对 torch2.7.1 中的 torch/onnx/symbolic_opset14.py 进行修改若版本不同可自行查看 patch 文件进行修改步骤一导出 ONNX (PyTorch - ONNX)在宿主机CPU/GPU 环境上使用提供的 convert_pi05_part1.py 和 convert_pi05_part2.py 将模型导出为 ONNX 格式。此步骤会自动执行精度验证。mkdir -p output/onnx_models/pi05 mkdir -p runtime_save请提前将测试用例数据 start_obs_0.pt 放入 input_data/ 目录中1. 转换 Part 1 (VLM)脚本内部会读取 input_data/start_obs_0.pt 作为 mock 数据并将产生的中间张量存入 runtime_save/python convert_pi05_part1.py \ --pretrained-path /path/to/models/pi05-libero \ --output-dir output/onnx_models/pi05 \ --onnx-filename pi05-part1.onnx2. 转换 Part 2 (Action Expert)脚本会加载上一步在 runtime_save/ 中保存的特征张量验证去噪网络单步推理python convert_pi05_part2.py \ --pretrained-path /path/to/models/pi05-libero \ --output-dir output/onnx_models/pi05 \ --onnx-filename pi05-part2.onnx执行成功后会在 output/onnx_models/pi05/ 目录下生成 pi05-part1.onnx 和 pi05-part2.onnx。终端将打印出两者的余弦相似度及最大差异用以确认导出成功。步骤二使用 ATC 转换 OM (ONNX - OM)在 310P 昇腾 NPU 环境下利用 ATC 工具将生成的 ONNX 模型转换为 Ascend 亲和的 OM 格式。mkdir -p output/om_models/pi051. 转换 Part 1atc --modeloutput/onnx_models/pi05/pi05-part1.onnx \ --framework5 \ --outputoutput/om_models/pi05/pi05-part1 \ --soc_versionAscend310P1 \ --precision_mode_v2origin2. 转换 Part 2atc --modeloutput/onnx_models/pi05/pi05-part2.onnx \ --framework5 \ --outputoutput/om_models/pi05/pi05-part2 \ --soc_versionAscend310P1 \ --precision_mode_v2origin(注意--soc_version 请根据 npu-smi info 查看到的芯片型号进行替换如 Ascend310P1 或 Ascend310P3。若报错[ERROR] Execute model failed for acl.mdl.execute error 507011检查npu-smi info显示的信息是否与 ATC 转化时使用的--soc_version相同)步骤三端到端 ONNX 推理验证CPU为确保整个去噪扩散 Pipeline 的计算逻辑无误建议先使用 pi05_onnx_e2e.py 在 CPU 上跑通完整流程。# 执行前请确保脚本内的 ONNX_PART1_PATH 和 ONNX_PART2_PATH 路径正确指向您的 ONNX 文件 python pi05_onnx_e2e.py该脚本会完整串联 Part 1 的特征提取和 Part 2 的 10 次去噪循环并将最终的动作张量保存为 onnx_baseline_action.pt。步骤四昇腾 OM 端到端推理与 ONNX 结果比较使用 NPU 执行最终的 OM 模型推理。由于代码依赖昇腾媒体处理引擎需确保已正确安装及引入 acllite。# 执行 OM 端到端推理测试 # 执行前请确保 pi05_om_e2e.py 内的 paligemma_model_path 和 gemma_model_path 指向刚才生成的 OM 文件 python pi05_om_e2e.py运行前请同步检查pi05_om_e2e.py中的paligemma_model_path、gemma_model_path路径start_obs_0.pt的绝对路径是否存在PYTHONPATH是否能正确导入acllite_utils执行完毕后终端将输出 Inference completed 及最终动作的 Shape 信息并将结果保存至 om_baseline_action.pt。您可以通过compare_action.py比较 NPU 产出的 .pt 文件与 ONNX CPU 产出的 .pt 文件来验证模型精度。python compare_action.py --file1 om_baseline_action.pt --file2 onnx_baseline_action.pt步骤五昇腾 OM 推理 LIBERO 仿真测试cd pi05/infer_with_om/lerobot_modified python lerobot_eval_om.py \ --env.typelibero \ --env.tasklibero_spatial \ --eval.batch_size1 \ --eval.n_episodes50 \ --policy.path/path/to/models/pi05-libero \ --output_dir/path/to/output_dirOM 推理性能1. Part 1/2 推理速度模块平均耗时 (ms)PaliGemma (Part1)223.08Gemma (Part2)15.58End-to-End410.2Part1 为 VLM Part每次推理仅允许一次Part2 为 Action Expert每次推理按照 Config 中的 num_inference_steps 推理 10 次E2E 包含 Part1 10 * Part2 以及 KV-Cache拷贝等时间2. OM 推理正确性验证 (Action 相似度比较)Tips使用 input_data/start_obs_0.pt 输入比较 OM 和 Pytorch 推理动作指标数值张量形状torch.Size([1, 50, 7])平均余弦相似度0.999984最小余弦相似度0.999850最大余弦相似度1.000000余弦相似度标准差0.000029常见问题FAQModuleNotFoundError: acllite_*说明 ACLLite 路径未加入PYTHONPATH。ATC 编译失败检查source ${cann_install_path}/ascend-toolkit/set_env.sh是否已执行。检查--soc_version与实际芯片型号是否一致。输入 shape 不匹配确保start_obs_0.pt中的 key 与脚本读取 key 完全一致。确保图像分辨率、chunk_size、动作维度与模型配置一致。运行lerobot/scripts/eval.py时若使用网络环境下载google/paligemma-3b-pt-224模型需提前取模型对应的 huggingface 页面请求访问 Access参考详见https://huggingface.co/docs/huggingface_hub/main/cn/quick-start和https://huggingface.co/docs/hub/models-gated运行lerobot_eval_om.py时提示Failed to load library (libOSMesa.so.0)这是仿真环境依赖的 OSMesa 动态库缺失导致的。可以先执行ldconfig -p | grep OSMesa确认系统是否已经安装。Ubuntu / Debiansudo apt-get update sudo apt-get install -y libosmesa6CentOS / RHEL / openEuler / EulerOSsudo yum install -y mesa-libOSMesamisc{intelligence2025pi05visionlanguageactionmodelopenworld, title{$\pi_{0.5}$: a Vision-Language-Action Model with Open-World Generalization}, author{Physical Intelligence and Kevin Black and Noah Brown and James Darpinian and Karan Dhabalia and Danny Driess and Adnan Esmail and Michael Equi and Chelsea Finn and Niccolo Fusai and Manuel Y. Galliker and Dibya Ghosh and Lachy Groom and Karol Hausman and Brian Ichter and Szymon Jakubczak and Tim Jones and Liyiming Ke and Devin LeBlanc and Sergey Levine and Adrian Li-Bell and Mohith Mothukuri and Suraj Nair and Karl Pertsch and Allen Z. Ren and Lucy Xiaoyang Shi and Laura Smith and Jost Tobias Springenberg and Kyle Stachowicz and James Tanner and Quan Vuong and Homer Walke and Anna Walling and Haohuan Wang and Lili Yu and Ury Zhilinsky}, year{2025}, eprint{2504.16054}, archivePrefix{arXiv}, primaryClass{cs.LG}, url{https://arxiv.org/abs/2504.16054}, } 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 根目录相关代码目录树检查整体代码目录树经过上述的操作pi05适配昇腾的lerobot根目录中的最终相关代码目录树如下所示|-- pi05/infer_with_om ├── README.md # 本使用指南 ├── convert_pi05_part1.py # Part 1: PyTorch - ONNX 转换 ├── convert_pi05_part2.py # Part 2: PyTorch - ONNX 转换 ├── pi05_onnx_e2e.py # ONNX 端到端 10 步去噪推理基准验证 ├── pi05_om_e2e.py # OM 端到端 10 步去噪推理与 NPU 部署类 ├── input_data/ │ └── start_obs_0.pt # 测试用例输入张量数据 ├── lerobot_modified/ # 对 LeRobot 源码的修改适配文件夹 │ ├── cp_to_lerobot.sh # 将本目录改动拷贝到 LeRobot 对应源码路径脚本 │ ├── lerobot_eval_om.py # 基于 OM 推理后端的 Libero 评测入口示例 │ ├── pi05_e2e.py # OM 推理后端基础脚本 lerobot-eval 头文件 │ ├── modeling_pi05_part1.py # Pi0.5 Part1VLM昇腾导出/推理适配版实现 │ └── modeling_pi05_part2.py # Pi0.5 Part2Action Expert昇腾导出/推理适配版实现 ├── lib_modified/ # 第三方库补丁与打补丁脚本 │ ├── apply_gemma_patch.sh # 根据下方 Symbolic Opset14 文件生成 Patch 补丁并自动运用到库 │ ├── apply_symbolic_opset14_patch.sh # 根据下方 Gemma 文件生成 Patch 补丁并自动运用到库 │ ├── modeling_gemma.py # Modified 完成的 Gemma 文件 │ ├── symbolic_opset14.py # Modified 完成的 Symbolic Opset14 文件 │ ├── gemma.patch # Sh 脚本生成的 Gemma 兼容性补丁 │ └── symbolic_opset14.patch # Sh 脚本生成的 ONNX opset14 symbolic 修复补丁 ├── runtime_save/ # 运行 Part 1 时保存的中间态张量 │ ├── past_kv_tensor.pth │ └── prefix_pad_masks.pth └── output/ ├── onnx_models/pi05/ # 生成的 ONNX 存放路径 │ ├── pi05-part1.onnx │ ├── pi05-part1.onnx.data │ ├── pi05-part2.onnx │ └── pi05-part2.onnx.data └── om_models/pi05/ # 生成的 OM 存放路径 ├── pi05-part1.om └── pi05-part2_linux_x86_64.om【免费下载链接】cann-recipes-embodied-intelligence本项目针对具身智能业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价