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

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

1. 模型简介

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 风格的视觉-文本双编码器,用于 零样本图像分类 与图文检索:

  • 视觉塔:12 层 Transformer,宽 384,patch=16,输入分辨率 384×384(577 个 token,含 class token), attention pooling(8 头)+ class token 全局聚合,投影到 512 维。
  • 文本塔:12 层 Transformer,宽 512,上下文长度 32,词表 49408,投影到 512 维。
  • 两塔共享 logit_scale(本项目加载后为 100.0),相似度 = logit_scale * image_emb @ text_emb^T。

本仓库使用官方 perception_models 的加载代码(core/vision_encoder/,Apache-2.0)在单卡 Ascend910B 上完成真实 NPU 推理、CPU-NPU 一致性验证与性能测试。

2. 验证环境

项值
NPUAscend910_9362(2 卡,HBM 64GB/卡)
CANN8.5.1
torch2.9.0+cpu
torch_npu2.9.0.post1+gitee7ba04
Python3.11.14
依赖einops, timm, ftfy, regex, torchvision, pillow, modelscope

torch.npu.is_available() == True,模型全部参数位于 npu:0,dtype float32。

3. 安装依赖

pip install torch==2.9.0 torch_npu==2.9.0.post1 torchvision einops timm ftfy regex pillow modelscope
# 或直接安装仓库内依赖清单
pip install -r requirements.txt

4. NPU 推理

默认命令(首次运行会自动通过 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

5. 真实推理结果

固定输入: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")。本验证属于固定样例验证(非完整评测集)。

6. CPU-NPU 一致性验证

对相同权重、相同输入分别执行 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

7. 性能测试

方法:预热 3 次,正式测试 10 次,计时区间前后调用 torch.npu.synchronize()。 batch size 1,图片 384×384,候选文本 10,dtype float32,device npu:0。

阶段avgminmaxp50p90p95
图像编码 image_enc15.893 ms15.61716.08615.90116.02016.053
文本编码 text_enc (10 条)10.261 ms10.23910.28710.26210.28110.284
相似度计算 sim0.925 ms0.9130.9310.9260.9300.930
端到端 e2e25.753 ms24.69926.66825.74826.47326.570

峰值 NPU 显存:690.4 MB。

复现:

python inference.py --mode benchmark --checkpoint /path/to/PE-Core-S16-384.pt

8. 自验证截图

证据说明
assets/agent_workflow.png下载、侦察、加载、NPU 推理、一致性、性能全流程真实日志
assets/npu_device_call.pngnpu-smi、torch.npu.is_available()、设备名、模型参数 device/dtype
assets/model_result.png默认 python inference.py 真实输出与 PASS

9. 已知限制

  • 使用官方 perception_models 代码加载权重(core/vision_encoder/),非 transformers AutoModel。
  • 本仓库验证为固定样例零样本分类 + CPU-NPU 一致性 + 性能测试,未在完整 ImageNet 等数据集上做全量评测。
  • 文本上下文长度固定为 32 token;超过部分按官方 tokenizer 截断。
  • 推理精度为 FP32;未对 FP16/BF16 做额外精度校准。

10. 标签

NPU、Ascend、Ascend910、zero-shot-image-classification、Perception-Encoder、pytorch、vision