Ascend-SACT/openvla_7b
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

OpenVLA-7B Ascend NPU 适配

OpenVLA-7B 视觉-语言-动作模型在昇腾 NPU 上的推理适配。

一、模型介绍

OpenVLA-7B 是一个开源的视觉-语言-动作模型,用于机器人操作任务。

项目值
模型类型VLA (Vision-Language-Action)
参数量7B
语言 BackboneLlama-2-7b
视觉编码器SigLIP
输入图像 + 文本指令
输出7维动作向量 (x, y, z, roll, pitch, yaw, gripper)

二、环境要求

硬件环境

型号状态
Ascend910✅ 已验证
Ascend910B3 (A3)✅ 已验证

镜像选择: 根据芯片类型选择对应镜像

  • Ascend910: cann:8.5.1-ubuntu22.04-py3.10
  • Ascend910B3 (A3): cann:8.5.1-a3-ubuntu22.04-py3.11

软件环境

软件名版本
CANN8.5.1
Python3.10
torch2.9.0+cpu
torch-npu2.9.0
torchvision0.24.0
transformers4.40.1
timm0.9.16

三、快速开始

3.1 部署环境

# 创建容器 (Ascend910B3/A3)
docker run -d \
  --name openvla-npu \
  --privileged \
  --device /dev/davinci_manager \
  --device /dev/devmm_svm \
  --device /dev/hisi_hdc \
  --device /dev/davinci0 \
  -v /usr/local/dcmi:/usr/local/dcmi:ro \
  -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro \
  -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/:ro \
  -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info:ro \
  -v /etc/ascend_install.info:/etc/ascend_install.info:ro \
  -v /data/npu_adapter/openvla:/data \
  --shm-size=16g \
  -p <ssh_port>:22 \
  swr.cn-south-1.myhuaweicloud.com/ascendhub/cann:8.5.1-a3-ubuntu22.04-py3.11 \
  sleep infinity

# Ascend910 (非A3) 请将镜像替换为:
# swr.cn-south-1.myhuaweicloud.com/ascendhub/cann:8.5.1-ubuntu22.04-py3.10

# 安装并配置 SSH
docker exec openvla-npu bash -c "apt-get update && apt-get install -y openssh-server"
docker exec openvla-npu mkdir -p /run/sshd
docker exec openvla-npu sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
docker exec openvla-npu sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
docker exec openvla-npu /usr/sbin/sshd
docker exec openvla-npu bash -c "echo 'root:<your_password>' | chpasswd"

重要参数说明:

  • --privileged: 特权模式,允许容器访问宿主机设备(开发测试环境推荐)
  • :ro: 只读挂载,保护宿主机文件
  • --shm-size=16g: 共享内存大小,大模型推理需要

权限替代方案(生产环境推荐): 如需更精细的权限控制,可用 --cap-add 替代 --privileged:

--cap-add=SYS_PTRACE \
--cap-add=IPC_LOCK \
--cap-add=SYS_ADMIN \
Capability用途
SYS_PTRACE调试和性能分析
IPC_LOCK锁定共享内存,NPU 内存管理需要
SYS_ADMIN设备管理和资源控制

3.2 配置环境

# 进入容器
docker exec -it openvla-npu bash

# 设置环境变量
export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/ascend-toolkit/latest/runtime/lib64:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:$LD_LIBRARY_PATH
source /usr/local/Ascend/ascend-toolkit/set_env.sh

3.3 安装依赖

# 安装 pip(镜像默认未安装)
apt-get update && apt-get install -y python3-pip

# 先安装基础依赖(不含 torch 相关)
pip3 install transformers==4.40.1
pip3 install Pillow accelerate

# 安装 timm(使用 --no-deps 避免自动安装 torch)
pip3 install timm==0.9.16 --no-deps

# 最后安装 PyTorch、torch-npu 和 torchvision(确保版本正确)
pip3 install torch==2.9.0+cpu --index-url https://download.pytorch.org/whl/cpu
pip3 install torch-npu==2.9.0
pip3 install torchvision==0.24.0 --no-deps

重要:

  • torchvision 必须使用 --no-deps 安装,否则会自动升级 torch 版本,导致 torch-npu 不兼容。
  • 安装顺序很重要,先安装 timm 再安装 torch/torch-npu,避免 pip 自动解析版本冲突。

3.4 运行推理

python run_inference_npu.py \
    --image_path test_image.jpg \
    --instruction "pick up the red block"

示例输出:

Loading model on npu:0...
Model loaded successfully.

Instruction: pick up the red block
Action Vector: [0.0074, 0.0112, -0.0073, 0.0069, 0.0186, 0.0257, 0.996]
  - Position (x, y, z): 0.0074, 0.0112, -0.0073
  - Rotation (roll, pitch, yaw): 0.0069, 0.0186, 0.0257
  - Gripper: 0.996 (open)

Inference time: 0.60s

四、适配说明

4.1 torchvision 与 torch-npu

OpenVLA 使用 timm 的 SigLIP ViT 作为视觉编码器,timm 依赖 torchvision 的 transforms 和 FrozenBatchNorm2d。

关键发现:

  • OpenVLA 不需要 NMS 等目标检测算子
  • torchvision 正常安装即可,torch-npu 会自动处理算子分发
  • 无需额外的兼容层

4.2 版本兼容性

组件版本要求说明
transformers4.40.14.41.0 会导致输出乱码
timm0.9.16OpenVLA 要求 >= 0.9.10 且 < 1.0.0
torch-npu2.9.0必须与 CANN 8.5.1 匹配

4.3 dtype 处理

# 正确的 dtype 设置
for k, v in inputs.items():
    if hasattr(v, 'to'):
        if v.dtype in [torch.int64, torch.int32]:
            inputs[k] = v.to("npu:0")  # 保持 int 类型
        else:
            inputs[k] = v.to("npu:0", dtype=torch.float16)  # float16

五、性能指标

设备推理时间加速比
NPU (Ascend910B3)0.60s42x
CPU25.03s1x

精度对比

指标结果
Token Match✅ True
Action Match✅ True
Max Diff0.0

NPU 与 CPU 输出完全一致,精度无损。

六、常见问题

Q1: 模型加载失败或 ImportError

原因: 依赖版本不正确

解决:

  • 确保 transformers==4.40.1
  • 确保 torchvision 使用 --no-deps 安装

Q2: 输出乱码或异常字符

原因: transformers 版本不兼容

解决: 安装 transformers==4.40.1

Q3: NPU 初始化卡住

原因: 其他进程占用 NPU 资源

解决: 执行 npu-smi info 查看进程,kill 占用进程

Q4: Error 500001 或 Error 507033

原因: CANN/torch-npu 版本不匹配或 AICore 数量不支持

解决:

  • 确认 CANN 版本支持硬件的 AICore 数量
  • 安装匹配的 torch-npu 版本

七、参考资料

  • OpenVLA-7B - HuggingFace 模型页面
  • Ascend pytorch - torch-npu 官方仓库
  • CANN 版本配套表 - 版本兼容矩阵

八、许可证

Apache-2.0