facebook/PE-Core-S16-384 是 Meta(Facebook Research)发布的 Perception Encoder (PE) Core 系列中的
S 规格图文双塔模型(论文:Perception Encoder: The best visual embeddings are not at the output of the network,
arXiv:2504.13181)。它是一个 CLIP 风格的视觉-文本双编码器,用于 零样本图像分类 与图文检索:
logit_scale(本项目加载后为 100.0),相似度 = logit_scale * image_emb @ text_emb^T。本仓库使用官方 perception_models 的加载代码(core/vision_encoder/,Apache-2.0)在单卡
Ascend910B 上完成真实 NPU 推理、CPU-NPU 一致性验证与性能测试。
| 项 | 值 |
|---|---|
| NPU | Ascend910_9362(2 卡,HBM 64GB/卡) |
| CANN | 8.5.1 |
| torch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1+gitee7ba04 |
| Python | 3.11.14 |
| 依赖 | einops, timm, ftfy, regex, torchvision, pillow, modelscope |
torch.npu.is_available() == True,模型全部参数位于 npu:0,dtype float32。
pip install torch==2.9.0 torch_npu==2.9.0.post1 torchvision einops timm ftfy regex pillow modelscope
# 或直接安装仓库内依赖清单
pip install -r requirements.txt默认命令(首次运行会自动通过 ModelScope 下载权重 PE-Core-S16-384.pt 到本地缓存,之后从本地加载):
python inference.py
# 等价于 python inference.py --mode infer --image assets/cat.png自定义图片与候选文本:
python inference.py --image /path/to/image.jpg --texts "a cat,a dog,a bird,a car,a person"指定本地权重路径:
python inference.py --checkpoint /path/to/PE-Core-S16-384.pt固定输入:assets/cat.png(官方示例图),候选文本 10 个,batch size 1,dtype float32,device npu:0。
Zero-shot ranking (label: probability):
3. a cat 0.999726
2. a dog 0.000152
10. a banana 0.000061
5. a person 0.000026
4. a bird 0.000021
6. a car 0.000006
9. an airplane 0.000005
7. a tree 0.000001
1. a diagram 0.000000
8. a building 0.000000
Top-1 label: a cat (prob=0.999726)
Inference time: 22.15 ms (single forward, warm)第二张验证图 assets/dog.png:
1. a dog 0.999152
Top-1 label: a dog (prob=0.999152)结果与官方模型卡示例一致(cat 图像 → "a cat")。本验证属于固定样例验证(非完整评测集)。
对相同权重、相同输入分别执行 CPU 与 NPU(FP32):
CPU-NPU consistency (same weights, same inputs, dtype float32)
image embed cosine : 0.999998
text embed cosine : 1.000000
logits max abs error : 1.189041e-02
logits mean abs error : 6.161213e-03
Top-1 CPU / NPU : a cat / a cat
Top-1 match : True
Top-5 overlap (of 5) : 5
thresholds (cos>=0.9999) : PASS=True复现:
python inference.py --mode validate --checkpoint /path/to/PE-Core-S16-384.pt方法:预热 3 次,正式测试 10 次,计时区间前后调用 torch.npu.synchronize()。
batch size 1,图片 384×384,候选文本 10,dtype float32,device npu:0。
| 阶段 | avg | min | max | p50 | p90 | p95 |
|---|---|---|---|---|---|---|
| 图像编码 image_enc | 15.893 ms | 15.617 | 16.086 | 15.901 | 16.020 | 16.053 |
| 文本编码 text_enc (10 条) | 10.261 ms | 10.239 | 10.287 | 10.262 | 10.281 | 10.284 |
| 相似度计算 sim | 0.925 ms | 0.913 | 0.931 | 0.926 | 0.930 | 0.930 |
| 端到端 e2e | 25.753 ms | 24.699 | 26.668 | 25.748 | 26.473 | 26.570 |
峰值 NPU 显存:690.4 MB。
复现:
python inference.py --mode benchmark --checkpoint /path/to/PE-Core-S16-384.pt| 证据 | 说明 |
|---|---|
assets/agent_workflow.png | 下载、侦察、加载、NPU 推理、一致性、性能全流程真实日志 |
assets/npu_device_call.png | npu-smi、torch.npu.is_available()、设备名、模型参数 device/dtype |
assets/model_result.png | 默认 python inference.py 真实输出与 PASS |
perception_models 代码加载权重(core/vision_encoder/),非 transformers AutoModel。NPU、Ascend、Ascend910、zero-shot-image-classification、Perception-Encoder、pytorch、vision