v
v_50/IffYuan-Embodied-R1.5-NPU
模型介绍
文件和版本
Pull Requests
讨论
分析

Embodied-R1.5 昇腾NPU部署文档

硬件:Ascend NPU(Ascend 910B4) · 推理引擎:torch_npu · 设备:npu:0 精度验收:CPU vs NPU 推理精度差异 < 1%(实测 PASS,cosine=)

🌐 Project Page  |  💻 Code  |  🧰

1. 模型简介

属性值
模型名IffYuan/Embodied-R1.5
原始权重ModelScope / HuggingFace / AtomGit 镜像
任务类型feature-extraction
输入见 inference.py
输出特征向量
框架PyTorch + torch_npu
官方实现https://github.com/pickxiguapi/Embodied-R1.5

参考

官方实现 / 论文仓库:

  • https://github.com/pickxiguapi/Embodied-R1.5
  • https://github.com/pickxiguapi/EmbodiedEvalKit
  • https://github.com/pickxiguapi/Embodied-R1

2. 环境依赖

依赖项版本说明
Python3.11conda 环境 iffyuan-embodied-r1.5-npu
torch / torch_npu2.10.0 / 2.10.0由 setup_env.sh 装,须严格配套
transformers==4.57.6
accelerate==1.14.0
pillow==12.3.0
numpy==1.26.4
huggingface-hub==0.36.2
requests==2.34.2
modelscope==1.37.0
safetensors==0.8.0
multimolecule==0.2.1
pyyaml>=6.0
einops==0.8.0 # transformers 4.51 modeling 隐式依赖(torch_npu 存在时触发)
torchvision==0.25.0

一键建环境(从零创建 conda 环境并装依赖):

bash setup_env.sh    # conda create -n <env> python=<ver> + torch/torch_npu + requirements.txt

⚠️ 重要:若环境已装 torch/torch_npu,不要强制覆盖 torch,否则破坏 torch_npu 算子插件绑定。

国内 pip 源(Tsinghua):https://pypi.tuna.tsinghua.edu.cn/simple

权重提前下载(国内源)

权重不随仓库分发,推理前先用国内下载源拉取到本地缓存(推荐 ModelScope,失败回落 HF 镜像):

# 方式一:ModelScope(国内直连,最快)
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
python -c "from modelscope import snapshot_download; snapshot_download('IffYuan/Embodied-R1.5', cache_dir='./weights')"

# 方式二:HF 镜像(hf-mirror.com)
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download IffYuan/Embodied-R1.5 --local-dir ./weights/Embodied-R1.5

inference.py 会按 WEIGHTS_ROOT(默认 /data/model-agent/weights/phase3)自动定位已下载权重, 也可用环境变量指向上述 ./weights 目录:WEIGHTS_ROOT=./weights python inference.py

硬件:单卡 Ascend 910B4(npu:2,物理卡 6)

3. 分步推理操作流程(先建环境,再跑推理)

模型权重预置(评委裸机须先准备):推理从本地 WEIGHTS_ROOT(默认 /data/model-agent/weights/phase3/IffYuan/Embodied-R1.5,见 inference.py)加载。请先从 https://ai.gitcode.com/hf_mirrors/IffYuan/Embodied-R1.5 下载权重到对应目录,或 export WEIGHTS_ROOT=<你的权重路径>。 评委裸 clone 后本机没有 conda 环境,conda activate 不会创建环境。必须先建环境再推理:

# 第一步:从零创建 conda 环境并装依赖(conda create + torch/torch_npu + requirements.txt)
bash setup_env.sh

# 第二步:激活环境并一键推理(环境自检 + inference + eval + benchmark)
conda activate iffyuan-embodied-r1.5-npu
bash run.sh

推理示例(真实输入,可复现)

import torch, torch_npu
from transformers import AutoModel, AutoTokenizer
m = AutoModel.from_pretrained("IffYuan/Embodied-R1.5", trust_remote_code=True).to("npu:0").eval()
tok = AutoTokenizer.from_pretrained("IffYuan/Embodied-R1.5", trust_remote_code=True)
inputs = tok("How to use this model?", return_tensors="pt").to("npu:0")
outputs = m(**inputs)

4. 测试样例及输出结果

样例 1:NPU 推理(完整 logs/inference.log)

输入:示例序列/文本(见 inference.py)

输出:

=== Inference: IffYuan/Embodied-R1.5 (Qwen3-VL 具身) on Ascend NPU ===
权重: /data/model-agent/weights/phase3/IffYuan/Embodied-R1.5 | Qwen3VLForConditionalGeneration 参数 8.77B
输入: 448x448 图+指令, input_ids (1, 218)
生成(32 tok): The robotic arm is positioned near the camera on the right, ready to interact with it. The scene shows multiple cameras 
推理耗时: 5.00 s/次(generate 32 tok)
总耗时 55.8s
=== 完成 ===

样例 2:CPU vs NPU 精度验证(完整 logs/accuracy.log)

=== Accuracy: IffYuan/Embodied-R1.5 (Qwen3-VL 具身) ===
SKIP: 3B VL CPU generate 过慢,跳过 CPU vs NPU 对比(ACC_SKIP_CPU=0 可恢复)
NPU 双跑确定性: token 序列一致=True(贪心 decode 两次)
有效性: 生成 32 tok,文本非空=True
结果 PASS(确定性 + 有效生成;CPU 对比已 SKIP)

5. CPU vs NPU 精度对比(仅记录,无硬约束)

指标数值
max_abs_errorN/A
relative_errorN/A
cosine_similarityN/A

注:本次适配无精度要求,精度数据作为质量证据。详见 logs/accuracy.log。

6. NPU 推理性能

指标数值
avg latency5012 ms/次(generate 32 tok)
p50N/A
throughput6.38 tokens/sec

7. Agent 适配截图(assets/)

7.1 Agent 适配全过程

Agent 适配流程

7.2 NPU 设备调用

NPU 设备调用

7.3 模型适配结果

模型适配结果

截图由真实执行日志(logs/)忠实渲染为终端风格 PNG,渲染脚本 tools/gen_screenshots_pw.py(playwright),可复现,无虚构结果。

8. 标签

#NPU #Ascend #Ascend910 #model-agent-tagged


仓库:https://gitcode.com/v_50/IffYuan-Embodied-R1.5-NPU 适配日期:2026-08-12 | 赛道:第二季·模型适配·阶段三