Skip to content

轻芯贯卷,双路同归 · Complete lightweight AMD recognition backend - #71

Merged
eric8810 merged 3 commits into
mainfrom
feat/amd-aie-lightweight
Oct 8, 2026
Merged

eric8810 merged 3 commits into
mainfrom
feat/amd-aie-lightweight

Conversation

@eric8810

@eric8810 eric8810 commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

完整改造

本 PR 已从首个矩阵子图原型推进到完整 Small 识别 CPU/NPU 分区后端与可安装独立包。

  • 完整识别接口 [1,3,48,width] → [1,width/8,18710],生成全部 20 个宽度桶;原有 CTC/字典保持一致。
  • 19 个较大 pointwise 卷积矩阵核心交给 AMD XDNA2;其余识别算子由 IREE CPU 执行,检测仍为 ORT CPU。BF16 操作数使用 BFP16ebs8 微内核,FP32 累加。
  • 宽矩阵每段最多 3840 行,规避固定编译器宽矩阵 shim DMA lowering 越界;2880/3200 桶各包含 32 个 NPU dispatch。
  • 新增小型版本化 C ABI 运行库、CPU/NPU 设备组与共享内存分配策略、参数加载、按需桶会话及关闭资源管理。运行库隐藏 IREE 符号并与主 ORT 共存;保留旧 vendor 部署兼容。
  • 参数按内容寻址,20 桶共享一份 IRPA。SDK/descriptor 校验运行库、配置、共享权重与所有 VMFB 的身份。
  • 固定 AMD AIE/IREE/LLVM/Peano/前端版本;build_amdaie.py 完成工具链、运行库、20 桶与 SDK 组装,CI 默认切换至轻量源码构建。
  • 独立支持包包含 addon、基础依赖、运行库、模型、许可证、SBOM 和哈希清单。编译器、Peano、Python、XRT、原始 ONNX 与完整 vendor SDK 不进入支持包。
  • AMD 单独安装、显式 execution.provider="amdnpu" 启用,不进入默认 Auto,主 package 不含 AMD/OpenVINO。cpuPartition=forbid 拒绝此分区后端。

实际构建和封装

全部 20 桶、运行库和 addon 已编译完成,已实际生成 @arcships/light-ocr-amdnpu-linux-x64-gnu@0.5.9 tarball。

制品 大小 bytes
AMD npm 下载 27,869,026
AMD npm 解包 59,690,023
C ABI 运行库 1,255,312
共享权重 17,145,856
全部 20 个 VMFB 7,590,556

下载相比历史 vendor 包的 548,609,874 bytes 缩小约 94.9%,满足 64 MiB 下载 / 128 MiB 解包门禁。

npm SHA256:2bee7052a4dbfcfea8338e1fa06e42061fc77b9d4aee21d52794f9f28cc4e8b8。

构建与逐文件记录见 docs/amd-aie-deployment-results.json;用法、完整构建步骤、方案、CHANGELOG 和中英文 0.5.9 release notes 已同步。0.5.9 继续采用补丁版本,尚未发布 npm 或公开 Release。

2026-10-08 无设备软件检查

  • 本地 40 项软件测试通过:运行时/真实包/配置 19 项、C ABI 4 项、发布工具与 workflow 合约 17 项。
  • 真实 AMD tgz 离线安装、生产路径解析和 addon 加载通过。无设备时显式 AMD 返回 unsupported_capability;Auto 选择 CPU 并完成空白图 OCR;拒绝 cpuPartition=forbid。
  • 当前 sessionFallback="cpu" 不受支持,已测试其明确拒绝行为,不宣称自动回退。
  • 修复部署 JSON 为 null 时泄漏普通 TypeError 的问题,统一为 package_load_failed;添加缺失/损坏权重、库存、桶顺序和 ABI 等回归用例。
  • 320/384/3200 三个代表宽桶的 9 组合成输入,以及 320 桶文字裁剪图完成原始 ONNX 对 FP32/BF16 CPU 转换的比较。FP32 在 rtol=1e-3, atol=1e-4 下全部通过;这些样本的 CTC 序列均一致,文字样本为 HELLO 123。
  • FP32 最大绝对误差约 5.79e-4;BF16 CPU 模拟约 0.0374。合成输入均解码为空,单个文字样本不构成数据集准确率证据。
  • 这条 CPU 流程没有执行 AMD BFP16ebs8 内核、DMA 或设备同步,也未数值检查全部 20 桶。
  • 支持包 CI 新增运行时/真实包及 C ABI 检查;CPU 数值比较作为显式工具 check_cpu_recognition.py。

结果见 docs/amd-aie-software-validation-results.json,重现命令见 docs/amd-aie-development.md。原有 AMD tarball 字节与 SHA256 未改变;运行时 JS 修复随 runtime 发布准备更新。

维护者要求与实际边界

初次构建按要求跳过验证;2026-10-08 经维护者同意补充了上述无设备软件检查。仍未执行 AMD 设备推理或性能验收。deviceValidated=false、numericsValidated=false 保持不变:CPU BF16 模拟不能证明 AMD BFP16ebs8 内核正确。用户仍需可用的 amdxdna 系统驱动与固件。

本次 AMD 改造未解决主 Small 模型既有 39 MB 要求与当前约 52.53 MB tgz 的差额,发布说明如实保留该项。

@eric8810 eric8810 changed the title 轻芯初铸,矩阵成卷 · Bootstrap lightweight AMD AIE compilation 轻芯贯卷,双路同归 · Complete lightweight AMD recognition backend Oct 7, 2026
@eric8810
eric8810 marked this pull request as ready for review October 7, 2026 14:51
@eric8810
eric8810 merged commit 4780098 into main Oct 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant