本文档记录 VTP-Large-f16d64 在华为昇腾 NPU (Ascend 910B4) 环境的适配与验证结果。
VTP (Visual Tokenizer Pre-training) 是 MiniMax 开源的视觉分词器,基于 DINOv3 ViT 架构,联合优化图像-文本对比学习、自监督学习和图像重建三种训练目标。
VTP-Large-f16d64 使用 ViT-Large 编码器,f16 表示 16× 空间压缩,d64 表示 64 维 Latent 空间。
相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
torch | 2.9.0+cpu |
torch_npu | 2.9.0.post1+gitee7ba04 |
transformers | 4.57.6 |
torchvision | 0.24.0 |
Pillow | 12.2.0 |
CANN | 8.5.1 |
Ascend 910B4,1 逻辑卡| 组件 | 配置 |
|---|---|
| 总参数量 | 731.6M |
| Vision Encoder | ViT-Large (24层, 1024维, 16头) |
| Pixel Decoder | 24层, 1024维, 16头 |
| Text Encoder | 12层, 768维, 12头 |
| Feature Bottleneck | 1024 → 64 |
| Latent 维度 | 64 (f16d64) |
| 输入分辨率 | 256×256 |
| Patch Size | 16 |
pip install torch torch_npu torchvision transformers omegaconf pillow# ModelScope (推荐)
pip install modelscope
python3 -c "from modelscope import snapshot_download; snapshot_download('MiniMax/VTP-Large-f16d64')"
# HuggingFace
huggingface-cli download MiniMaxAI/VTP-Large-f16d64 --local-dir ./VTP-Large-f16d64# 自编码器重建
python3 inference.py --model ./VTP-Large-f16d64 --mode ae
# CLIP 零样本分类
python3 inference.py --model ./VTP-Large-f16d64 --mode clip --image cat.jpg
# 特征提取
python3 inference.py --model ./VTP-Large-f16d64 --mode feature
# 全部模式
python3 inference.py --model ./VTP-Large-f16d64 --mode all基础功能检查:
import torch, torch_npu
from vtp.models.vtp_hf import VTPModel
# 加载模型到 NPU
model = VTPModel.from_pretrained("./VTP-Large-f16d64", torch_dtype=torch.float16)
model = model.to("npu:0").eval()
# 自编码器验证
import torchvision.transforms as T
from PIL import Image
img = T.ToTensor()(Image.open("input.png")).unsqueeze(0).to("npu:0")
with torch.no_grad(), torch.autocast("npu", dtype=torch.float16):
latents = model.get_reconstruction_latents(img) # Encode
recon = model.get_latents_decoded_images(latents) # Decode
print(f"Latents: {latents.shape}") # [1, 64, 16, 16]
print(f"Recon: {recon.shape}") # [1, 3, 256, 256]验证结果:
测试条件:batch=1, 256×256 图像, fp16 autocast, 50次取平均
| 指标 | 数值 |
|---|---|
| 模型加载 (CPU→NPU) | 5.03 s |
| Encode 延迟 | 55.4 ms |
| Decode 延迟 | 89.4 ms |
| Encode+Decode 总延迟 | 144.8 ms |
| CLIP 图像+文本 | 76.1 ms |
测试方法:在 4 种类型测试图像(渐变/纯色/棋盘格/圆形渐变)上与 CPU fp32 参考输出对比。
| 图像类型 | 重建余弦相似度 | 重建相对误差 | 状态 |
|---|---|---|---|
| 渐变图 | 0.999994 | 0.08% | ✅ |
| 纯色图 | 0.999984 | 0.82% | ✅ |
| 棋盘格 | 0.999971 | 0.18% | ✅ |
| 圆形渐变 | 0.999998 | 0.10% | ✅ |
CLIP 图像特征余弦相似度:0.999996,L2 差异:0.002802
结论:重建精度 < 0.9%,CLIP 特征余弦相似度 > 0.9999,精度满足 < 1% 要求。
python3 evaluate.py --model ./VTP-Large-f16d64 --name VTP-Large-f16d64 --output-dir ./evaltorch.autocast("npu", dtype=torch.float16) 进行推理,可同时保证精度和性能。from_pretrained 需要指向包含 config.json 和 model.safetensors 的目录。vtp 包。如果本地有 VTP 源码,可设置环境变量 VTP_SOURCE 指向源码目录。inference.py 支持 NPU/CUDA/CPU 自动检测,无需修改代码即可在不同设备上运行。