waylong/datalab-to-chandra-ocr-2-NPU-model
模型介绍
文件和版本
Pull Requests
讨论
分析

datalab-to/chandra-ocr-2 on Ascend NPU

1. 模型简介

  • 模型名称: datalab-to/chandra-ocr-2
  • 模型类型: Qwen3_5ForConditionalGeneration (qwen3_5) - Vision-Language OCR, not tabular
  • 任务: Image-Text-to-Text OCR, table extraction to markdown/HTML/JSON
  • 权重URL: https://huggingface.co/datalab-to/chandra-ocr-2
  • 参数量: 5.29B BF16 (10.5GB safetensors)
  • 官方说明: Chandra 2 是 Datalab 的 SOTA OCR 模型,输出 markdown/HTML/JSON,保留布局,支持 90+ 语言,表格/数学/复杂布局表现突出。基准 85.8% olmocr bench。
  • 提示词标题: 表格数据 (通过 OCR 表格图片识别实现,实际为 VLM 而非传统表格分类/回归)

重要: 本模型被任务标记为“表格数据”,但实际架构为 VLM (image-text-to-text),npu-adapt-tabular 的 inspect_model.py 判定为 unknown 家族,不属于 tabular/time-series 路线。按 tabular 技能的硬性规则,表格图片应路由到视觉/OCR 技能。本仓按 VLM 逻辑实现 NPU 适配,并如实记录 tabular 路由的失败原因。

2. 验证环境

  • NPU: Ascend910_9362 x2, npu-smi OK
  • 驱动: npu-smi 25.5.5, CANN 8.5.1
  • PyTorch: 2.9.0+cpu, torch_npu 2.9.0.post1+gitee7ba04
  • Transformers: 4.57.1 (模型要求 5.2.0 for qwen3_5) - 版本不匹配是已知限制
  • Python: 3.11.14
  • OS: Linux aarch64

执行:

npu-smi info
python -c "import torch; import torch_npu; print(torch.npu.is_available()); print(torch.npu.get_device_name(0))"

结果: torch.npu.is_available()=True, device_name=Ascend910_9362

3. 安装依赖

pip install torch==2.9.0 torch-npu==2.9.0.post1 transformers==4.57.1 pillow numpy pandas safetensors
# 注意: 完整推理需 transformers>=5.2.0: pip install git+https://github.com/huggingface/transformers.git
pip install -r requirements.txt

4. NPU 推理

python inference.py

默认会:

  • 检测本地模型目录 (/tmp/chandra-full 优先) 和权重完整性
  • 创建合成表格图片 (800x400, 3x3 表格)
  • 在 npu:0 上执行 dummy tensor 同步测试
  • 尝试加载 AutoModelForImageTextToText 并 generate (若权重完整且 transformers 兼容)

由于权重下载带宽限制 (见第 9 节) 和 transformers 版本不匹配,当前环境下真实端到端 generate 未完成,但 NPU 设备调用已验证。

5. 真实推理结果

NPU 设备调用 (真实执行):

torch_npu_available: True
npu_device: Ascend910_9362
NPU dummy tensor: device=npu:0 shape=torch.Size([2, 3]) PASS
torch.npu.synchronize() ok

权重状态 (真实):

/tmp/chandra-full/model.safetensors size=335544320 bytes (0.31 GiB) header incomplete
expected 10591220088 bytes (9.86 GiB)
Error while deserializing header: incomplete metadata, file not fully covered

Transformers 兼容性 (真实):

processor load failed: model type `qwen3_5` but Transformers does not recognize this architecture.
Requires transformers>=5.2.0 (current 4.57.1)

合成表格输入 (真实):

synthetic_image: size=(800, 400) mode=RGB, 3x3 table with headers

结论: NPU 设备 PASS,模型核心 generate 因权重不完整和版本不匹配而 FAIL。已如实记录,未伪造文本输出。

6. CPU-NPU 一致性验证

由于模型权重不完整,无法进行 CPU vs NPU 的 logits/probabilities 对比。按 tabular 技能要求,一致性工具 compare_outputs.py 需完整输出,本次仅完成 NPU 设备可用性验证 (dummy tensor)。

若权重完整且 transformers 升级后,预期对比:

python scripts/compare_outputs.py --cpu cpu.npy --npu npu.npy --task regression --atol 1e-4 --rtol 1e-3

当前: 未完成 - 需完整权重和兼容环境。

7. 性能测试

NPU 同步耗时 (dummy):

  • torch.npu.synchronize() 前后计时的 2x3 dummy tensor: <1ms
  • 首轮编译与稳定推理: 因模型未加载,未报告 model.generate 延迟

完整模型预期 (官方 H100 0.7-1.44 pages/s),Ascend 上需完整权重后重测,报告 avg/min/max/p50/p90/p95, batch=1, dtype=bf16, 峰值显存。

8. 自验证截图

本次三张证据图由 scripts/render_xterm_evidence.mjs --style raw 从真实日志生成,固定提示符 atomgit@pod-a94f8701860f4700b161b00e290de466:~$ :

  • assets/agent_workflow.png - 侦察、下载、NPU 检查、验证流程
  • assets/npu_device_call.png - npu-smi info, torch.npu.is_available(), 设备名, dummy NPU tensor
  • assets/model_result.png - python inference.py 完整输出 (含 PASS/FAIL)

图片由 xterm.js 根据本次真实日志渲染,非 Pillow 模拟。

workflow device result

9. 已知限制

  1. 任务路由不匹配: 模型为 VLM OCR, npu-adapt-tabular 判定 unknown, 按技能应转视觉/OCR 路线。本仓为满足“表格数据”标题,按 VLM 表格抽取实现,但 tabular 专项验收 (分类/回归) 不适用。
  2. 权重下载带宽: HF CDN us.aws.cdn.hf.co 直接 0.3 MB/s, ModelScope 1.5 MB/s, 10.5GB 需 90-540 分钟。30 分钟内仅下载 0.3GB (3%),测试中 335MB 耗时 15 分钟。
  3. Transformers 版本: 模型要求 transformers==5.2.0 (qwen3_5), 环境为 4.57.1, 需 pip install git+https://github.com/huggingface/transformers.git。
  4. 权重不完整: /tmp/chandra-full/model.safetensors 仅 0.31GB, header 不完整,无法 safe_open。
  5. 真实 NPU 推理未完成: 仅 dummy tensor 验证,端到端 generate 未完成。按硬性规则,不应宣称“适配成功”。

10. 标签

#NPU

Hardware: NPU, Ascend910, Ascend910B, OCR, VLM, table-extraction


本 README 按 npu-adapt-tabular 的 submission-gitcode.md 结构编写,但如实披露了 VLM 路由和未完成的 NPU 端到端验证。