VTP-Small-f16d64 Ascend 部署指南
概述
本项目提供 MiniMax VTP-Small-f16d64 模型在华为昇腾 NPU 上的部署方案,基于 PyTorch + torch_npu 实现视觉Tokenizer推理。
模型信息
| 属性 | 值 |
|---|
| 模型名称 | VTP-Small-f16d64 |
| 架构 | Vision Tokenizer with Projection |
| 视觉嵌入维度 | 384 |
| 特征瓶颈维度 | 64 (f16d64) |
| Patch 大小 | 16 |
| 图像尺寸 | 256 x 256 |
| 视觉编码器深度 | 12 |
| 视觉注意力头数 | 6 |
| MLP 类型 | SwigLU (Gate Linear Unit) |
| 预训练方法 | 对比学习 + 自监督 + 重建 |
环境要求
- NPU: Atlas 910B3
- CANN: 8.5.1+
- Python: 3.11
- PyTorch: 2.9.0+ with torch_npu
- safetensors: 0.7.0+
快速部署
1. 创建容器
docker run -itd \
--name=test-vtp_small \
--privileged \
--ipc=host \
--net=host \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
-v /usr/local/sbin:/usr/local/sbin:ro \
-v /data/ysws/agentsp/VTP-Small-f16d64:/data/vtp_model \
-v /home:/home \
-w /data/vtp_model \
quay.io/ascend/vllm-ascend:v0.18.0rc1 \
/bin/bash
2. 安装依赖
docker exec test-vtp_small bash -c "pip3 install safetensors -i https://repo.huaweicloud.com/repository/pypi/simple/ --quiet"
3. 运行推理
docker exec test-vtp_small bash -c "source /usr/local/Ascend/ascend-toolkit/set_env.sh && cd /data/ysws/agentsp/VTP-Small-f16d64-ascend && python3 inference.py"
docker exec test-vtp_small bash -c "source /usr/local/Ascend/ascend-toolkit/set_env.sh && cd /data/ysws/agentsp/VTP-Small-f16d64-ascend && python3 inference.py --image /path/to/image.jpg"
推理参数说明
| 参数 | 默认值 | 说明 |
|---|
--model_path | /data/ysws/agentsp/VTP-Small-f16d64 | 模型目录 |
--image | None | 图片路径,不提供则使用随机张量 |
--precision_test | False | 运行精度测试 |
精度测试
docker exec test-modelagent bash -c "source /usr/local/Ascend/ascend-toolkit/set_env.sh && \
cd /data/ysws/agentsp/VTP-Small-f16d64-ascend && \
python3 inference.py --model_path /data/ysws/agentsp/VTP-Small-f16d64 --precision_test"
精度测试结果
| 指标 | 实测值 | 阈值 | 状态 |
|---|
| 最大误差 (sum) | 6.10e-05 | < 1e-3 | PASS |
| 最大误差 (mean) | 5.96e-08 | < 1e-5 | PASS |
| 最大误差 (std) | 2.38e-07 | < 1e-5 | PASS |
性能数据
| 操作 | 耗时 |
|---|
| CPU 参考计算 (20 tensors) | 0.0190s |
| NPU 推理 (20 tensors) | 0.2261s |
性能指标
| 指标 | 值 |
|---|
| 单图推理时间 | ~5.9s |
| 吞吐量 | 0.17 images/sec |
| 输出特征维度 | 64 |
| 图像尺寸 | 256 x 256 |
模型架构
VTP 视觉编码器包含以下组件:
- Patch Embedding:将图像分割成 16x16 块,投影到 384 维
- Transformer Blocks:12 层 Transformer 编码器
- RMSNorm:使用 RMSNorm 归一化
- SwigLU MLP:门控线性单元 (w1, w2, w3)
- Feature Bottleneck:384 -> 64 维特征瓶颈层
关键代码
模型加载
from safetensors.torch import load_file
state_dict = load_file("model.safetensors")
VTP 视觉编码器前向传播
features = model(image_tensor)
图像特征提取示例
from PIL import Image
import torch
from torchvision import transforms
transform = transforms.Compose([
transforms.Resize((256, 256)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
img = Image.open("image.jpg").convert('RGB')
img_tensor = transform(img).unsqueeze(0).npu()
with torch.no_grad():
features = model(img_tensor)
print(f"Feature shape: {features.shape}") # (1, 64)
文件结构
VTP-Small-f16d64-ascend/
├── README.md # 本文档
├── inference.py # 推理脚本
└── log.txt # 运行日志
已知限制
- 首次推理包含编译时间
- 需要自定义模型架构定义代码
- 仅实现视觉编码器部分
- 精度测试:NPU 与 CPU 误差极小,最大 sum error 为 6.10e-05,远低于阈值 1e-3
参考链接