weixin_55674987/rapidocr-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

RapidOCR Ascend 910 推理性能优化实战(Autoresearch 版)

约束与前提

  • 时间预算:5 小时(终端限时)
  • 版本管理:Git 全链路追踪,每个实验 = 一个 commit/branch
  • 自动回滚:性能/精度回退时自动 git checkout 恢复
  • 双路径:Path A(torch_npu 在线)与 Path B(OM 离线)并行探索
  • 精度红线:与 GPU/CPU 误差 < 1%,不达标立即回滚
  • AtomGit 提交:测试 token 推送能力后决定是否自动推送

Autoresearch 核心机制

1. Experiment-as-Commit

git checkout -b exp/rapidocr_{optimization}_$(date +%s)
git add -A && git commit -m "exp(...): ...
- metric_primary: XX → XX
- metric_cer_diff: XX
- status: PASS/FAIL
"

2. 结构化结果记录(results.json)

{
  "experiment_id": "exp_001_rapidocr_env",
  "timestamp": "2026-05-14T15:00:00Z",
  "hypothesis": "TASK_QUEUE_ENABLE=2 + CPU_AFFINITY_CONF=2 可提升推理吞吐",
  "changes": [],
  "metrics": {
    "throughput_images_per_sec": 22.0,
    "latency_p50_ms": 44.0,
    "latency_p99_ms": 58.0,
    "cer_diff": 0.001,
    "memory_mb": 2800
  },
  "status": "PASS",
  "commit_hash": "a1b2c3d"
}

3. 自动对比与自动回滚

if current.throughput > best.throughput * 1.05 and current.cer_diff < 0.01:
    git_merge_to_main()
    best = current
else:
    git_checkout_main()

4. 时间预算分配

时间段阶段预算说明
0:00-0:30启动准备0.5小时代码克隆、环境配置、基线建立、git初始化
0:30-1:30路径A快速优化1小时torch_npu 亲和算子 + 环境变量配置
1:30-2:30路径B模型转换1小时ONNX → ATC → OM
2:30-3:30性能分析闭环1小时L1性能分析 → 瓶颈定位
3:30-4:30方案择优与验证1小时双路径对比、精度验收
4:30-5:00成果交付与提交0.5小时SKILL.md编写、AtomGit推送

/goal 闭环定义

goal: "RapidOCR Ascend 910 推理性能达标且精度误差<1%"
termination:
  success: throughput >= baseline_target AND cer_diff < 0.01
  failure: time_budget_exceeded (5h) OR consecutive_rollbacks >= 5
metrics:
  primary: throughput
  secondary: latency_p50_ms, latency_p99_ms
  guardrail: cer_diff, memory_mb
loop:
  interval: "每个实验完成后立即评估"
  max_iterations: 50
actions:
  on_pass: git merge → update best → generate_next_hypothesis
  on_fail: git rollback → log_failure → try_alternative_path
  on_timeout: package_current_best → submit_deliverables

阶段 0:启动阶段(0:00-0:30)

0.1 环境检查

npu-smi info
python -c "import torch; import torch_npu; print(torch_npu.__version__)"

0.2 克隆与初始化

cd /workspace
git clone https://ai.gitcode.com/hf_mirrors/pitapo/rapidocr rapidocr-ascend
cd rapidocr-ascend
pip install -r requirements.txt  # torch, torchvision, onnxruntime, opencv-python
git init
git add -A && git commit -m "init: clone rapidocr upstream"

0.3 基准跑测

python eval/baseline_run.py --device npu --batch 1,4,8,16

0.4 创建 main-best 分支

git branch main-best

第一阶段:路径 A — torch_npu 在线优化(0:30-1:30)

优化优先级

实验 1:环境变量优化(预期提升 +5~15%)

git checkout -b exp/env_optimization
git checkout main-best -- .
export TASK_QUEUE_ENABLE=2
export CPU_AFFINITY_CONF=2
python eval/perf_eval.py --device npu

实验二:检测骨干网络优化(预期提升 +5~10%)

git checkout -b exp/det_backbone_optimization
# ResNet/MobileNet backbone 的 BN + ReLU
# DB head 的卷积和 sigmoid
python eval/perf_eval.py

实验 3:识别模型优化(预期提升 +5~15%)

git checkout -b exp/rec_model_optimization
# CRNN: CNN backbone + BiLSTM + CTC
# SVTR/Transformer: Attention → npu_fusion_attention (bf16)
python eval/perf_eval.py --dtype bf16

实验 4:图像预处理优化(预期提升 +2~5%)

git checkout -b exp/preprocess_optimization
# resize、normalize、padding 优化
# 尝试用 torchvision.transforms 或 NPU 预处理
python eval/perf_eval.py

实验 5:contiguous 布局优化(预期提升 1%~3%)

git checkout -b exp/contiguous_layout
python eval/perf_eval.py

特殊注意

  • RapidOCR 可能包含 ONNX 模型,如果 ONNX 推理快于 PyTorch,可能需要保留 ONNX 路径
  • 如果要用 torch_npu,需要确认 PyTorch 版本的检测/识别模型可用

第二阶段:路径 B — OM 离线转换(1:30-2:30)

2.1 PyTorch → ONNX

git checkout -b exp/om_conversion
git checkout main-best -- .
# 检测和识别模型分别导出
python om_model/export_det_onnx.py --model ch_PP-OCRv4_det
python om_model/export_rec_onnx.py --model ch_PP-OCRv4_rec
python eval/compare_onnx_torch.py

2.2 ONNX → OM(ATC)

bash om_model/atc_convert_det.sh
bash om_model/atc_convert_rec.sh

2.3 ACL 推理

python inference_acl.py --det_model om_model/det.om --rec_model om_model/rec.om --device npu
python eval/perf_eval.py --backend acl

第三阶段:基于性能分析的驱动优化(2:30-3:30)

import torch_npu
prof = torch_npu.profiler.profile(...)

运行时优化实验

实验环境变量触发条件
exp/task_queueTASK_QUEUE_ENABLE=2空闲时间 > 20%
exp/cpu_affinityCPU_AFFINITY_CONF=2CPU 调度开销高
exp/tcmallocLD_PRELOAD=libtcmalloc.somalloc 热点
exp/alloc_confPYTORCH_NPU_ALLOC_CONF=max_split_size_mb:512显存碎片
exp/fp16torch.float16 AMP模型支持且精度允许

阶段 4:择优与最终验证(3:30-4:30)

4.1 双路径对比

python eval/final_compare.py

4.2 精度验收

  • 在 ICDAR 或自定义 OCR 数据集上运行完整推理
  • 对比 NPU vs GPU vs CPU 的 CER/WER/Accuracy 指标
  • 指标:cer_diff < 0.01

4.3 确定最终方案

git tag v1.0-optimized
git checkout v1.0-optimized

阶段5:交付与 AtomGit 提交(4:30-5:00)

mkdir -p deliverables
cp inference.py readme.md eval/ logs/ SKILL.md deliverables/

REPO_URL="https://oauth2:${ATOMGIT_USER_TOKEN}@gitcode.com/yourname/rapidocr-ascend.git"
git remote add origin "$REPO_URL"
git push -u origin main

关键脚本清单

脚本功能
eval/baseline_run.py跑基线
eval/perf_eval.py性能评测
eval/accuracy_eval.py精度评测(CER/WER)
eval/compare_gpu_cpu.py三端对比
eval/parse_profiling.py解析 profiling
eval/final_compare.py双路径最终对比
om_model/export_det_onnx.py检测模型 ONNX 导出
om_model/export_rec_onnx.py识别模型 ONNX 导出
om_model/atc_convert_det.sh检测模型 ATC 转换
om_model/atc_convert_rec.sh识别模型 ATC 转换
inference_acl.pyACL 推理入口
inference.py最终交付推理脚本
readme.md部署文档
SKILL.md优化记录与复现指南

回滚策略

if experiment.cer_diff > 0.01:
    rollback("精度超标")
elif experiment.throughput < best.throughput * 0.95:
    rollback("性能倒退 > 5%")
elif experiment.memory_mb > best.memory_mb * 1.3:
    rollback("显存暴涨 > 30%")
elif experiment.latency_p99_ms > best.latency_p99_ms * 1.2:
    rollback("尾部延迟恶化 > 20%")
else:
    merge_to_main_best()

时间熔断机制

时间节点熔断动作
1hPath A 无成功实验 → 全力投入 Path B
2hPath B OM 转换失败 → 放弃 Path B,Path A + profiling 兜底
3h仍无达标方案 → 启用激进优化
4h仍未达标 → 锁定当前 best,开始生成交付件
4.5h停止所有实验,全力完成交付
5h强制终止,提交当前最优结果