sheepss/facebook-PE-Core-S16-384-NPU
模型介绍
文件和版本
Pull Requests
讨论
分析

facebook/PE-Core-S16-384 on Ascend NPU

1. 模型简介

PE-Core-S16-384 是 Meta Perception Encoder(PE)系列中的 CLIP 双塔模型:ViT-S/16 视觉塔(384px 输入,宽度 384,12 层,6 头,RoPE2D + attention pooling)+ 12 层文本 Transformer(上下文 32 token),输出 512 维对齐 embedding,用于零样本图像分类和图文检索。

本仓库将其适配到华为昇腾单卡 NPU(Ascend910B 系列,实测设备 Ascend910_9362),使用官方 perception_models/core/vision_encoder 加载代码(Apache-2.0,随仓库附带于 core/),权重从 HuggingFace facebook/PE-Core-S16-384 官方 checkpoint 加载。

2. 验证环境

项目值
NPUAscend910_9362(npu:0,64GB HBM)
CANN8.5.1
torch / torch_npu2.9.0+cpu / 2.9.0.post1
Python3.11
加载后端官方 core.vision_encoder.pe.CLIP.from_config("PE-Core-S16-384") + 本地 .pt state_dict
dtypefloat32(默认)/ float16

3. 安装依赖

pip install -r requirements.txt

权重首次运行时通过 huggingface_hub.snapshot_download("facebook/PE-Core-S16-384") 下载到本地缓存(依赖 HF_ENDPOINT=https://hf-mirror.com 环境变量走国内镜像);也可用 --weights-dir 指定已下载目录。

4. NPU 推理

# 默认:npu:0 上零样本推理并输出 PASS/FAIL
python inference.py

# CPU-NPU 一致性验证
python inference.py --mode validate

# 性能测试(预热3次,正式10次)
python inference.py --mode benchmark

# 可选参数
python inference.py --dtype float16 --weights-dir /path/to/weights

固定测试输入(全部公开可复现):官方示例图 test_images/cat.png,候选文本 ["a diagram", "a dog", "a cat", "a person riding a bike", "a bowl of soup", "a city skyline at night"],正确标签 "a cat",batch size 1,384×384。

5. 真实推理结果

python inference.py 在 npu:0(float32)真实输出:

device       : npu:0 (Ascend910_9362)
image_embeds : (1, 512) | norm=1.000000
text_embeds  : (6, 512)
logits       : (1, 6) | logit_scale=100.0000
probs        : [0.0, 0.000152, 0.999801, 3e-06, 4.4e-05, 0.0]

rank  candidate                          logit
1     a cat                             28.930220
2     a dog                             20.136423
3     a bowl of soup                    18.892487
4     a person riding a bike            16.264799
5     a diagram                         14.262202
6     a city skyline at night           12.902191

top1         : a cat (expected: a cat)
peak_memory  : 403.9 MB
result       : PASS

6. CPU-NPU 一致性验证

相同权重与输入分别运行 CPU 与 NPU(smoke consistency,固定单样例,非完整数据集评测):

dtypeimage_embed cosinetext_embed cosinelogits MAElogits max_AETop-1 一致排序完全一致
float320.9999981.0000005.40e-031.37e-02是是
float160.9999961.0000001.36e-022.25e-02是是

满足 FP32 cosine ≥ 0.9999、FP16 cosine ≥ 0.999 且 Top-1 一致的验收阈值。

7. 性能测试

npu:0、float32、batch=1、384px、6 条文本,预热 3 次、正式 10 次,计时前后均调用 torch.npu.synchronize():

阶段avgminmaxp50p90p95 (ms)
图像编码12.0711.5312.5512.3312.5512.55
文本编码(6条)6.626.536.706.656.706.70
端到端(编码+相似度)17.6517.4018.5117.5718.5118.51

峰值显存 403.9 MB;约 83 images/s(图像编码稳定延迟)。首次冷启动含图初始化约 260ms。

8. 自验证截图

  • assets/agent_workflow.png :下载→侦察→NPU 推理→一致性→性能全流程真实日志
  • assets/npu_device_call.png :npu-smi、torch.npu.is_available、设备名、参数设备与 dtype
  • assets/model_result.png :默认 python inference.py 真实输出与 PASS

9. 已知限制

  • 权重不入库;首次运行需联网下载(约 333MB)或用 --weights-dir 提供本地权重。
  • 本验证为固定样例 smoke consistency 与性能测试,未做 ImageNet/COCO 全量评测。
  • 文本塔上下文长度为 32 token(该型号原生配置),长文本会被截断。

10. 标签

Hardware: NPU NPU Ascend Ascend910