#NPU
b4648cfa171985a6745f37ddd637e98c0da958ac)VisionEncoderDecoderModel = DeiT-S 风格 ViT 图像编码器(hidden 384,12 层,输入 384×384,
patch 16)+ TrOCR/RoBERTa 风格文本解码器(d_model 256,6 层,词表 64044),自回归 greedy 生成文本。pytorch_model.bin,FP32,约 234 MB;无需 trust_remote_code。本仓库将该模型适配到华为昇腾单卡 npu:0(Ascend910_9362)上完成真实推理、CPU-NPU 一致性验证与性能测试。
| 项目 | 值 |
|---|---|
| 硬件 | Ascend910(Ascend910_9362),HBM 64 GB |
| CANN | 8.5.1 |
| torch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| transformers | 4.46.3 |
| 推理设备 / dtype | npu:0 / float32 |
pip install -r requirements.txt模型权重通过 huggingface_hub.snapshot_download("microsoft/trocr-small-handwritten")
下载到本地 HF 缓存后离线加载;已配置 HF_ENDPOINT=https://hf-mirror.com 时自动走国内镜像。
仓库自带 8 个固定的 IAM 手写单词测试图(samples/,含真实标注 labels.json)。默认命令即完成
「CPU 参考推理 + npu:0 真实推理 + 一致性校验 + CER 统计 + 性能基准」:
python inference.py仅跑性能基准:
python inference.py --mode benchmarkpython inference.py 在 npu:0 上的固定样例输出(完整日志见 assets/model_result.png 所渲染内容):
model : microsoft/trocr-small-handwritten
task : handwritten text recognition (OCR, image-to-text)
backend : transformers VisionEncoderDecoderModel + torch_npu
dtype : float32
input : 8 fixed IAM handwriting word images (e.g. sample_00.png [118, 112])
model parameters on : npu:0
sample_00.png: gt='little' | cpu='lifts' | npu='lifts' | CER=0.500 | cpu==npu: True
sample_01.png: gt='always' | cpu='always ,' | npu='always ,' | CER=0.333 | cpu==npu: True
sample_02.png: gt='It' | cpu='r t' | npu='r t' | CER=1.000 | cpu==npu: True
sample_03.png: gt='endeavour' | cpu='gmclea von :' | npu='gmclea von :' | CER=0.889 | cpu==npu: True
sample_04.png: gt='For' | cpu='for' | npu='for' | CER=0.333 | cpu==npu: True
sample_05.png: gt='in' | cpu='jn' | npu='jn' | CER=0.500 | cpu==npu: True
sample_06.png: gt='happened' | cpu='happened' | npu='happened' | CER=0.000 | cpu==npu: True
sample_07.png: gt='an' | cpu='cm' | npu='cm' | CER=1.000 | cpu==npu: True
RESULT: PASSnpu:0 上执行官方 greedy generate(),
对解码文本做逐字符精确比较。计时区间为单张图端到端 model.generate()(含编码器 forward 与解码器自回归循环),
前后调用 torch.npu.synchronize();预热 3 次、正式计时 10 次。
[benchmark] single-image end-to-end generate() on npu:0 (Ascend910_9362), dtype=float32, batch=1, input 384x384
latency ms: avg=67.3 min=67.2 max=67.4 p50=67.3 p90=67.4 p95=67.4
throughput: 14.85 images/s
peak NPU memory allocated: 387.6 MBassets/agent_workflow.png — 下载、侦察、加载、NPU 推理、验证、性能各阶段真实日志assets/npu_device_call.png — npu-smi info、torch.npu.is_available()、设备名与模型参数所在设备assets/model_result.png — 默认 python inference.py 的真实输出与 PASS 判定config.json 中 use_cache=false(沿用上游配置),解码速度存在优化空间。NPU Ascend Ascend910 Hardware: NPU OCR 计算机视觉