MoonViT 是一款原生分辨率视觉编码器,它基于 SigLIP-SO-400M 进行初始化并持续预训练。为便于独立使用,我们从 moonshotai/Kimi-VL-A3B-Instruct 中分离出了 MoonViT 的实现代码与权重文件。
本文档旨在记录 MoonViT-SO-400M 在 昇腾 NPU 环境下的部署流程及验证结果。
相关资源获取地址:
| 组件 | 版本 |
|---|---|
transformers | 4.51.3 |
torch-npu | 2.9.0.post1 |
torch | 2.5.0 |
Pillow | 11.1.0 |
Ascend910_9362/opt/atomgit/moonshotai/MoonViT-SO-400Mnpu:0torch.bfloat16pip install transformers pillow torch torchvision torch_npumodelscope download --model moonshotai/MoonViT-SO-400M --local_dir /opt/atomgit/moonshotai/MoonViT-SO-400Mpython3 -m atomgit download hf_mirrors/moonshotai/MoonViT-SO-400M -d /opt/atomgit/moonshotai/MoonViT-SO-400M# inference.py
from PIL import Image
from transformers import AutoModel, AutoImageProcessor
model_path = "/opt/atomgit/moonshotai/MoonViT-SO-400M"
model = AutoModel.from_pretrained(
model_path,
torch_dtype="auto",
device_map="auto",
trust_remote_code=True,
)
processor = AutoImageProcessor.from_pretrained(model_path, trust_remote_code=True)
image_path = "/opt/atomgit/moonshotai/MoonViT-SO-400M/figures/demo.png"
image = Image.open(image_path)
images_processed = processor(image, return_tensors="pt").to(dtype=model.dtype, device=model.device)
image_features: list = model(images_processed.pixel_values, images_processed.image_grid_hws)
print(f"dtype: {image_features[0].dtype}, shape: {image_features[0].shape}")INFO:root:Load model to npu:0.
dtype: torch.bfloat16, shape: torch.Size([1092, 4, 1152])
python benchmark.py测试条件:10 次迭代,预热 3 次
| 指标 | 数值 |
|---|---|
| 平均时间 | 0.7027s |
| 最小时间 | 0.5746s |
| 最大时间 | 1.8435s |
python accuracy.py| 指标 | 数值 | 状态 |
|---|---|---|
| 向量相对误差 | 0.000883 | ✅ 通过 |
| 余弦相似度 | 1.000000 | ✅ 通过 |
| 均方误差(MSE) | 0.0000144042 | - |
| 最大绝对差值 | 2.968445 | - |
结果:通过(误差 < 1%)
device_map="auto" 会自动加载到 NPU 设备torch.compile,需要设置 TORCH_COMPILE_DISABLE=1 环境变量禁用(当前未使用)