OFA-OCR-Recognition 昇腾 NPU 部署指南
模型信息
| 项目 | 说明 |
|---|
| 模型名称 | OFA-OCR-Recognition |
| 来源 | ModelScope (iic/OFA-OCR-Recognition) |
| 任务类型 | OCR 文字识别 |
| 适配平台 | 华为昇腾 Ascend 910 NPU |
| 框架 | PyTorch + modelscope + torch_npu |
环境要求
| 依赖 | 版本 |
|---|
| Python | 3.11 |
| PyTorch | 2.9.0 |
| torch_npu | 2.1.0 |
| CANN | 8.5.1 |
| modelscope | 1.x |
| fairseq | 0.12.2 |
| NPU 硬件 | Ascend910_9362 |
快速部署
1. 下载模型
pip install modelscope
modelscope download --model iic/OFA-OCR-Recognition --local_dir ./model
2. 安装依赖
pip install fairseq==0.12.2
pip install modelscope
3. 运行推理
# 使用样例图片
python infer_npu.py --model_dir ./model
# 指定自定义图片
python infer_npu.py --model_dir ./model --image /path/to/your/image.jpg
# 指定 NPU 设备
python infer_npu.py --model_dir ./model --device 1
4. 精度与性能评测
# NPU 性能评测 (10次推理取平均)
python benchmark.py --model_dir ./model --device npu --runs 10
# CPU 基线采集
python benchmark.py --model_dir ./model --device cpu --runs 5
# CPU vs NPU 完整对比 (自动运行两端并对比精度)
python benchmark.py --model_dir ./model --compare --runs 10
# 指定结果输出路径
python benchmark.py --model_dir ./model --compare --output results.json
CPU vs NPU 精度对比
| 测试图片 | CPU 识别结果 | NPU 识别结果 | 精度对比 |
|---|
| image_ocr_recognition.jpg | 欢迎光临 | 欢迎光临 | ✅ 一致 |
| ocr_scene.png | 大排档自助烤肉 | 大排档自助烤肉 | ✅ 一致 |
结论: CPU 与 NPU 推理结果完全一致,精度无差异。
CPU vs NPU 性能对比
| 测试图片 | CPU 平均耗时 | NPU 平均耗时 | 加速比 |
|---|
| image_ocr_recognition.jpg | 10.976s | 0.133s | 82.5x |
| ocr_scene.png | ~11.0s | 0.250s | 44.0x |
NPU 资源占用: allocated=768.8MB, reserved=1186.0MB
NPU 推理正常输出证据
============================================================
NPU 推理基准测试
============================================================
PyTorch: 2.9.0+cpu
NPU available: True
NPU device: 0
NPU name: Ascend910_9362
模型加载耗时: 2.18s
--- 识别: image_ocr_recognition.jpg ---
识别结果: 欢迎光临
推理耗时: avg=0.133s, min=0.129s, max=0.144s
各次耗时: [0.144, 0.129, 0.131, 0.129, 0.130]
--- 识别: ocr_scene.png ---
识别结果: 大排档自助烤肉
推理耗时: avg=0.250s, min=0.250s, max=0.251s
各次耗时: [0.250, 0.251, 0.251, 0.250, 0.250]
NPU 显存: allocated=768.8MB, reserved=1186.0MB
============================================================
完整运行日志见 run_log.txt。
关键适配说明
- NPU 设备映射: 通过
torch_npu.contrib.transfer_to_npu 自动将 cuda 调用映射到 npu,无需修改模型代码
- 模型加载: 使用 modelscope pipeline 直接加载,模型自动放置到 NPU
- fairseq 兼容性: fairseq 0.12.2 在 Python 3.11 下存在 dataclass 兼容警告,不影响推理
- 零代码改造: 整个适配过程仅需添加 2 行代码(import torch_npu + transfer_to_npu),模型本身无需任何修改
注意事项
transfer_to_npu 会替换 torch.Tensor.cuda 为 torch.Tensor.npu,无需手动修改模型代码
- fairseq 导入时会有
common - <dataclasses._MISSING_TYPE object> 的警告,不影响推理
- 模型首次推理会触发算子编译,后续推理速度稳定
目录结构
ofa-ocr-recognition/
├── model/ # 模型文件目录
│ ├── configuration.json # 模型配置
│ ├── config.json # 模型结构配置
│ ├── pytorch_model.bin # 模型权重
│ ├── vocab.json # 词表
│ ├── merges.txt # BPE merges
│ └── resources/ # 样例图片
│ ├── ocr_scene.png
│ └── image_ocr_recognition.jpg
├── infer_npu.py # NPU 推理脚本
├── benchmark.py # 精度与性能评测脚本
├── run_log.txt # 运行日志
└── README.md # 本文档