VTP-Small-f16d64 on Ascend NPU
1. 简介
本文档记录 VTP-Small-f16d64(Visual Tokenizer Pre-training,MiniMax)在昇腾 NPU(Ascend 910B3)环境的适配部署与精度验证结果。
VTP 是一种统一视觉 tokenizer 预训练框架,联合优化图像-文本对比、自监督和重建损失。VTP-Small 参数量约 22.7M(仅视觉编码器部分),输出 64 维特征向量。本项目完成该模型视觉编码器部分在昇腾 NPU 上的推理适配,并验证 NPU 与 CPU 结果的精度误差 < 1%。
相关地址:
2. 验证环境
| 组件 | 版本 |
|---|
| Python | 3.11.x |
| PyTorch | 2.10.0+cpu |
| torch_npu | 2.10.0 |
| torchvision | 0.25.0+cpu |
| safetensors | 0.7.0 |
| CANN | 8.5.1 |
| NPU 驱动 | 25.5.2 |
| NPU 硬件 | Ascend 910B3 |
| 操作系统 | Linux (aarch64) |
3. 模型信息
| 项目 | 值 |
|---|
| 模型架构 | ViT-Small/16 (VTP vision encoder) |
| 视觉编码器参数量 | ~22.7M |
| 特征维度 | 64 (bottleneck) |
| 编码器 Layers | 12 |
| Attention Heads | 6 |
| Patch Size | 16 |
| 输入尺寸 | 3×256×256 |
| 权重格式 | safetensors |
| 原始框架 | PyTorch |
| 许可证 | Modified MIT |
4. Conda 环境安装
conda create -n vtp python=3.11 -y
conda activate vtp
pip install torch==2.10.0 torchvision==0.25.0 --index-url https://repo.huaweicloud.com/repository/pypi/simple/
pip install torch_npu==2.10.0 --index-url https://repo.huaweicloud.com/repository/pypi/simple/
pip install safetensors pillow --index-url https://repo.huaweicloud.com/repository/pypi/simple/
5. 推理执行
# NPU
python3 inference.py --model_path /path/to/VTP-Small-f16d64 --image_path /path/to/img.jpg
# CPU
python3 inference.py --model_path /path/to/VTP-Small-f16d64 --image_path /path/to/img.jpg --device cpu
# 评测
python3 benchmark.py --model_path /path/to/VTP-Small-f16d64
6. 参数说明
| inference.py | 说明 | 默认值 |
|---|
--model_path | 模型路径 | 必需 |
--image_path | 图像路径 | 必需 |
--device | npu:0 或 cpu | npu:0 |
--no_warmup | 跳过预热 | False |
| benchmark.py | 说明 | 默认值 |
|---|
--model_path | 模型路径 | 必需 |
--image_path | 测试图像 | 自动生成 |
--npu_device | NPU 设备 | npu:0 |
--num_warmup | 预热轮数 | 3 |
7. 精度评测结果
评测方法
同一图像在 CPU(FP32)和 NPU(FP32)上运行编码器,对比输出特征差异。
| 指标 | 含义 | 阈值 |
|---|
| 向量级相对误差 | ` | |
| 余弦相似度 | 方向一致性 | > 0.99 |
精度结果
| 输出张量 | 向量级相对误差 | 余弦相似度 | 最大绝对误差 | 平均绝对误差 |
|---|
| features | 0.006474% | 1.0000001192 | 2.35e-05 | 8.68e-06 |
判定结论
| 指标 | 实测值 | 阈值 | 状态 |
|---|
| 向量级相对误差 | 0.0065% | < 1% | PASS |
| 余弦相似度 | 1.000000 | > 0.99 | PASS |
8. 性能数据
| 操作 | 耗时 |
|---|
| CPU 推理时间(FP32) | 0.60s |
| NPU 推理时间(FP32,3轮预热后) | 0.27s |
| 加速比 | 2.21x |
9. 注意事项
- 本脚本仅使用 VTP 模型的视觉编码器部分(
trunk),不包含 pixel decoder 和 text encoder。
- 权重从
model.safetensors 加载,自动匹配 trunk.* 前缀。
- 自定义模型架构代码已内嵌在脚本中,无需额外依赖。(RMSNorm + SwiGLU + Attention)。
- NPU 预热默认 3 轮,消除首次编译开销。