
Spirit-v1.5 具身大模型昇腾 310P 推理适配实战从环境搭建到 mozRobot 真机部署【免费下载链接】cann-recipes-embodied-ai本项目针对具身智能业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-ai导读本文以 CANN 开源仓库中 infer_with_torch 适配样例为主线完整讲解如何将千寻智能Spirit AI自研的 Spirit-v1.5 具身智能大模型迁移到昇腾 310P 平台并运行推理。你将掌握官方代码与权重的准备流程、CANN 8.3.RC1 与 Python 运行环境的搭建、五份关键适配文件的替换清单以及从源码层面理解 VLM 视觉语言骨干与流匹配Flow Matching动作生成头的昇腾适配原理最终能够将模型接入 mozRobot 机器人完成图像 状态 → 动作轨迹的端到端推理。Spirit-v1.5 模型与适配背景Spirit v1.5 是由千寻智能自研的具身智能模型据 README 介绍该模型在 2026 年 1 月 12 日的 RoboChallenge 评测中取得综合排名第一在多项任务中保持较高成功率尤其在多任务连续执行、复杂指令拆解以及跨构型迁移等维度表现稳定。从 modeling_spirit_vla.py 的源码结构看Spirit-v1.5 采用典型的视觉语言模型VLM骨干 扩散/流匹配动作头架构骨干网络Qwen3VLForConditionalGeneration默认权重Qwen/Qwen3-VL-4B-Instruct负责把多路相机图像、机器人类型与任务描述编码为语言/视觉语义特征动作生成头一个基于BaseDiTDiffusion Transformer的流匹配模型输入机器人状态与加噪动作在时间步上迭代去噪最终输出未归一化的动作轨迹形状为B x T x action_dim归一化体系输入图像按IDENTITY处理状态与动作按MIN_MAX归一化推理结束后再反归一化还原为真实动作量纲。本样例展示的正是将这套模型在昇腾 310P 系列上完成适配并推理的完整方案。适配文件清单五份文件的替换关系昇腾适配的核心思路是最小侵入式改造不改动 Spirit v1.5 的整体训练/推理框架只将本仓库中经过昇腾适配的五个文件覆盖到官方代码仓的对应位置。替换关系如下本仓库中的文件Spirit v1.5 代码仓内的目标位置manipulation/spirit-v1.5/infer_with_torch/pyproject.tomlpyproject.tomlmanipulation/spirit-v1.5/infer_with_torch/requirements.txtrequirements.txtmanipulation/spirit-v1.5/infer_with_torch/modeling_spirit_vla.pymodel/modeling_spirit_vla.pymanipulation/spirit-v1.5/infer_with_torch/attention_processor_patch.pymodel/attention_processor_patch.pymanipulation/spirit-v1.5/infer_with_torch/infer_mozrobot_ascend.pyscripts/infer_mozrobot_ascend.py其中前两份文件用于锁定昇腾 NPU 所需的依赖版本后三份文件是昇腾适配的核心代码在后续章节逐一解读。代码与权重准备1. 拉取代码仓首先克隆本仓库获取适配文件git clone https://gitcode.com/cann/cann-recipes-embodied-ai.git再从千寻智能官方开源的代码仓拉取 Spirit v1.5 原始代码git clone https://github.com/Spirit-AI-Team/spirit-v1.5.git2. 替换适配文件将上述五份文件从本仓库拷贝至 Spirit v1.5 代码仓的对应位置。若官方仓中存在同名文件直接覆盖替换。3. 下载模型权重ModelTypeSpirit-AI-robotics/Spirit-v1.5Base Model基础模型Spirit-AI-robotics/Spirit-v1.5-for-RoboChallenge-move-objects-into-boxFine-tuned ModelRoboChallenge 微调模型两个权重分别对应基础推理能力与 RoboChallenge 特定任务如将物体放入盒子的微调能力可按需下载。4. 可选下载 Qwen 骨干权重模型默认的骨干权重为Qwen/Qwen3-VL-4B-Instruct该权重会在加载时由AutoTokenizer/AutoProcessor/Qwen3VLForConditionalGeneration.from_pretrained自动拉取建议提前手动下载到本地缓存避免推理时网络波动导致加载失败。运行环境准备安装 CANN 软件包本样例的执行依赖 CANN 开发套件包cann-toolkit与 CANN 二进制算子包cann-kernels支持的 CANN 软件版本为CANN 8.3.RC1。需要从昇腾社区软件下载页面获取以下两个.run安装包Ascend-cann-toolkit_8.3.RC1_linux-${arch}.runAscend-cann-kernels_310p_8.3.RC1_linux-${arch}.run其中${arch}表示 CPU 架构需根据 host 机器的架构选择aarch64或x86_64。注意第二个包名中带有310p标识这是针对昇腾 310P 芯片的专属二进制算子包切勿下载错型号。安装过程参考 CANN 社区版 8.3.RC1 的安装文档完成。配置 Python 环境与千寻智能官方工作流保持一致本样例使用uv工具进行环境管理# 1. 检查 uv 是否已安装未安装则执行 pip install uv # 2. 进入 Spirit v1.5 代码目录自动解析并安装所有依赖 cd spirit-v1.5 uv sync # 3. 激活虚拟环境uv sync 会在代码仓根目录生成 .venv source .venv/bin/activate # 4. 校验所有依赖是否安装完整 uv pip list依赖版本约束说明替换后的 pyproject.toml与 requirements.txt 内容一致对本样例的关键依赖做了版本锁定这是保证昇腾 NPU 适配稳定性的关键依赖版本说明Python 3.11解释器版本要求torch2.7.1PyTorch 框架torch-npu2.7.1昇腾 NPU 的 PyTorch 适配插件版本与 torch 严格对齐torchvision0.22.1与 torch 2.7.1 配套transformers4.57.3需 4.57.0 才能使用Qwen3VLForConditionalGeneration源码中有显式版本校验diffusers0.36.0提供 DiT 所需的Attention/FeedForward/ModelMixin等组件safetensors0.7.0加载model.safetensors权重numpy / pillow / scipy / requests2.4.0 / 12.1.0 / 1.16.3 / 2.32.5图像处理与数据插值等辅助依赖值得注意的一个细节在 pyproject.toml 中torch与torchvision被显式指向 PyTorch 官方 CPU 索引https://download.pytorch.org/whl/cpu即uv sync安装的是 CPU 版 torch真正的 NPU 计算能力由torch-npu插件提供。这样既避免了从昇腾侧单独下载 torch 的繁琐流程也保证了torch与torch-npu版本完全匹配。昇腾适配源码要点解读modeling_spirit_vla.py模型结构的 NPU 化改造modeling_spirit_vla.py 在官方实现基础上做了面向昇腾 NPU 的适配核心改动集中在以下几处1. 引入 NPU 运行环境L40-L41import torch_npu from torch_npu.contrib import transfer_to_npu通过transfer_to_npu将模型的默认设备语义迁移到 NPU后续devicenpu即可正常使用昇腾芯片。2. 注入昇腾专用注意力处理器L359DiT 的每个BasicTransformerBlock在构建Attention模块时显式指定processorAttnProcessorNPU()将 diffusers 默认的注意力前向替换为昇腾 NPU 融合算子详见下一节。3. 配置结构与模型参数SpiritVLAConfig默认配置直观展示了模型的核心超参dit_hidden_size1024、dit_num_heads8、dit_num_layers18动作生成长度chunk_size50、n_action_steps50状态与动作最大维度max_state_dim32、max_action_dim32流匹配去噪步数num_steps10。归一化映射中视觉特征走IDENTITY图像已在预处理时归一化状态与动作走MIN_MAX。默认输入特征包含三路相机图像cam_high、cam_left_wrist、cam_right_wrist形状(3, 240, 320)以及 14 维的observation.state——这个 14 维恰好对应双臂机器人每臂 6 维笛卡尔位姿 1 维夹爪开合的状态组合与推理脚本中的状态拼接逻辑一致。4. 权重加载强制落在 NPUfrom_pretrainedload_device npu state_dict safe_load_file(weight_path, deviceload_device) model.load_state_dict(state_dict, strictstrict)from_pretrained会读取权重目录下的config.json与model.safetensors文件缺失时抛出FileNotFoundError并强制将权重直接加载到 NPU 设备避免 CPU→NPU 的额外拷贝开销。5. 推理主流程select_action一次完整的动作决策包含以下链路输入归一化normalize_inputs/normalize_targets对状态、动作做 min-max 归一化公式为(x - min) / (max - min 1e-8) * 2 - 1数据预处理preprocess_rb_batch将三路相机图像逐张过image_processor并构造 Qwen 对话模板——每张图像一个image占位符用户提示为The current robot type is {robot_type}. What is the current task?回答为任务描述随后通过get_rope_index_3计算图像对应的 3D RoPE 位置编码VLM 前向调用self.qwen.forward(..., output_hidden_statesTrue)取最后一层隐藏状态num_vlm_last_embd1作为条件语义特征流匹配采样_sample_actions_unified从标准噪声出发按dt -1/num_steps即 -0.1做 Euler 积分从time1.0迭代到 0每步由 DiT 预测速度场v_t并更新x_t dt * v_t共 10 步去噪反归一化输出unnormalize_outputs将动作轨迹还原到真实量纲返回形状为B x T x action_dim的未归一化动作。attention_processor_patch.pyNPU 融合注意力算子attention_processor_patch.py 是本适配最关键的底层优化点。AttnProcessorNPU继承自 diffusers 的AttnProcessor2_0完整复用了其前后的 QKV 投影、残差连接、输出投影逻辑只在中间注意力计算处替换为昇腾 NPU 的融合算子att_output torch_npu.npu_prompt_flash_attention( query.to(torch.float16), key.to(torch.float16), value.to(torch.float16), num_headsattn.heads, input_layoutBSND, scale_valuescale, pre_tokens65535, next_tokens65535, atten_maskattention_mask, )其实现要点包括Q/K/V 在送入算子前转换为FP16计算完成后恢复原始 dtype兼顾精度与 NPU 计算效率input_layoutBSND与 DiT 注意力张量的(batch, seq, heads, head_dim)布局一致pre_tokens/next_tokens设为 65535即不限制因果窗口覆盖全序列注意力scale_value 1 / sqrt(head_dim)与标准缩放点积注意力一致。通过这一替换DiT 主干 18 层 Transformer Block 中的注意力计算全部落到 NPU 的高效融合内核上避免了逐算子下发带来的性能损耗。在昇腾 310P 上运行推理并与 mozRobot 对接推理脚本总览infer_mozrobot_ascend.py 是面向 mozRobot 真机的端到端推理示例将其放置到官方仓的scripts/目录后按照 Spirit v1.5 官方 README 的指导即可启动。脚本开头先做了两项关键设置torch.npu.set_compile_mode(jit_compileFalse) sys.path.append(project_root) from mozrobot import MOZ1Robot, MOZ1RobotConfig关闭 JIT 编译模式规避 NPU 上部分算子图编译问题将项目根目录加入 Python 搜索路径以导入 mozRobot SDK 与适配后的SpiritVLAPolicy。参数配置脚本顶部有两个需要按实际环境修改的常量MODEL_PATH /home/huawei/spiritVLA/model/ # 根据实际模型config safetensors路径修改 REALSENSE_SERIALS 318122301415, 230322273678, 230322271083 # 根据机器人实际连接的 realsense 相机序列号修改MODEL_PATH指向包含config.json与model.safetensors的权重目录REALSENSE_SERIALS逗号分隔的三路 RealSense 相机序列号对应高位相机、左右腕相机。模型加载与机器人初始化dtype torch.float16 device torch.device(npu) policy SpiritVLAPolicy.from_pretrained(MODEL_PATH, local_files_onlyTrue).to(devicenpu, dtypedtype) config MOZ1RobotConfig( realsense_serialsREALSENSE_SERIALS, structurewholebody, robot_control_hz120, ) robot MOZ1Robot(config) dt 1.0 / robot.control_hz模型以FP16精度加载到 NPU机器人以wholebody全身构型接入控制频率 120Hz控制周期dt由机器人控制频率倒推。真机推理主循环连接机器人并启用外部控制模式后进入闭环控制循环采集观测robot.capture_observation()获取三路相机图像与手臂状态构造状态向量将左臂笛卡尔位姿、左夹爪位置、右臂笛卡尔位姿、右夹爪位置拼接为 14 维状态转为 FP16 并送到 NPU图像预处理三路图像分别执行BGR2RGB通道转换并除以 255 归一化到[0,1]再按CHW布局转为 NPU 张量组织输入并推理在torch.inference_mode()下构建观测字典三路图像、机器人状态、任务描述如Insert Flowers.、机器人类型moz1调用policy.select_action(observation)得到 50 步动作轨迹并打印单次推理耗时频率插值模型输出频率为 30Hz机器人控制频率为 120Hz通过resample_action_data基于scipy.interpolate.interp1d做线性插值将动作点数放大 4 倍且不改变总时长保证动作平滑、无异常极值下发动作按每步dt的节奏将插值后的动作逐帧发送给机器人动作被拆分为leftarm_cmd_cart_pos手臂末端笛卡尔坐标 6 维、leftarm_gripper_cmd_pos夹爪位置 1 维、rightarm_cmd_joint_cart、rightarm_cmd_cart_pos等字段。循环在异常时打印错误信息并在finally中确保robot.disconnect()断开连接避免机器人失控。实操要点与注意事项版本匹配是硬约束torch2.7.1必须与torch-npu2.7.1严格对齐transformers必须 4.57.0否则Qwen3VLForConditionalGeneration不可用源码中已内置版本校验与报错提示CANN 包选型务必下载Ascend-cann-kernels_310p_8.3.RC1这一 310P 专属二进制算子包${arch}按 host 架构选择aarch64或x86_64权重路径与相机序列号推理前确认MODEL_PATH下存在config.json与model.safetensors并核对REALSENSE_SERIALS与机器人实际连接一致JIT 编译模式torch.npu.set_compile_mode(jit_compileFalse)应在模型推理前设置遇到算子编译相关报错时可优先检查此项任务描述与机器人类型task与robot_type会拼入 Qwen 的提示模板直接影响模型对指令的理解应按实际场景修改插值参数若机器人控制频率或模型输出频率发生变化需同步调整raw_freq/target_freq与action_list[0:30]的截取范围保证时序对齐。总结本样例为 Spirit-v1.5 具身大模型在昇腾 310P 上的推理落地提供了一套完整、可复现的参考路径通过五份文件的精准替换锁定依赖版本、注入 NPU 融合注意力算子、强制 NPU 权重加载与 FP16 推理并以 mozRobot 真机闭环验证了多路视觉 状态 任务指令 → 高频动作轨迹的端到端能力。对开发者而言可直接沿用本方案将同架构的 VLM 流匹配类具身策略快速迁移到昇腾平台后续如涉及性能优化可结合仓库内其他具身样例的算子级优化思路进一步迭代。【免费下载链接】cann-recipes-embodied-ai本项目针对具身智能业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-embodied-ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考