已合并
[v2.9.0][feature][bugfix]support IPC 64k and HDK xx.xx.xx.b version #41876
Dring创建于 7月16日
[v2.9.0][feature][bugfix]support IPC 64k and HDK xx.xx.xx.b version #41876
已合并
Dring创建于 7月16日
Dring成员
7月16日

【合入来源】

如有社区issue,请关联issue链接
请勿携带内部流程信息(需求链接、问题单、内部issue等)
https://gitcode.com/Ascend/pytorch/issues/2919

  • [✓ ] 需求
  • [✕ ] 问题单
  • [✕ ] issue/工单
  • [✕ ] 重构优化
  • [✕ ] 资料更新

【修改方案】

请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列
如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)

64k pagesize,新版本HDK已支持,去除4k校验限制。同时增加HDK b版本判断分支。
版本排序语义:b-build < T版本 < RC版本 < 正式release

版本 release 关键项 数值
26.1.0 0 (0+1)*10000 2702010000
26.1.0.T1 -1 (1+1)*100 2702000200
26.1.0.b083 -1(不设) +83(patch) 2702000083

验证:2702000083 < 2702000200 < 2702010000 → b083 < T1 < 正式版

【资料变更】

请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”

不涉及

【接口变更】

请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”

不涉及

【功能验证】

说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤
新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图

64k页机器 ut验证:
image.png
4k页机器 ut验证:
image.png

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

  • [✓ ] 代码注释完备,正确记录错误日志
  • [✕ ] 代码实现进行了返回值、空指针等校验
  • [ ✓] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等
  • [✓ ] PR持续集成流水线(CI)执行通过,代码检查无异常
likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 Dring 的贡献)
DDring成员
7月16日 创建了 pull request,commit 3a211890
atomgit-bot
atomgit-bot
7月16日 评论:

变更摘要

此 PR 主要实现两个功能:(1) 在 IsSupportIpcEvent 中支持 64K 页大小,当驱动版本 ≥ 26.0.RC1 时跳过 4K 页检查,使 IPC Event 在 64K 页环境下可用;(2) 在 DriverVersionToNum 中新增对 HDK b-build 版本号(如 26.1.0.b083)的解析,确保 b-build < T < RC < 正式版本的正确排序。同时补充了对应的 C++ 单元测试和 Python 端到端 IPC 测试。

主要改动

  • IsSupportIpcEvent 支持 64K 页大小: 在 AclInterface.cpp 中引入驱动版本判断,当驱动 ≥ 26.0.RC1 时跳过 _SC_PAGE_SIZE == 4096 的硬性校验,并为所有调试消息追加页大小上下文字符串 page_ctx,便于排查问题。
  • DriverVersionToNum 新增 b-build 版本解析: 在 GetCANNInfo.cpp 中增加对 b 前缀构建号(如 b083)的解析分支,将其提取为 patch 值,并排除 beta 前缀的误匹配,使得 b-build < T < RC < 正式版本的数值排序正确。
  • 导出 DriverVersionToNum 供测试使用: 在 GetCANNInfo.h 中为 DriverVersionToNum 添加 TORCH_NPU_API 导出声明,使 C++ 单元测试可直接调用该纯字符串解析函数。
  • 新增 C++ 单元测试 DriverVersionTest.BBuildOrdering: 在 test/cpp/api/modules.cpp 中验证 b-build、T、RC、正式版本之间的数值大小关系,以及 b-build 内部构建号越大数值越大的排序规则。
  • 新增 Python IPC 端到端测试: 新增 test/npu/test_ipc_pagesize.py,包含 TestIpcEventPageSize(验证不同页大小下 IPC Event 的支持状态)和 TestIpcTensorTransfer(跨进程 IPC Tensor 传输验证,含超时保护和子进程异常上报机制)。
likedislike
atomgit-bot
atomgit-bot
7月16日 评论:

代码审查

我已完成对全部 5 个变更文件的审查。以下是最终总结:


审查总结

优先级 数量 文件
P1 1 test/cpp/api/modules.cpp
P2 2 torch_npu/csrc/core/npu/GetCANNInfo.cpp, test/npu/test_ipc_pagesize.py
P3 1 test/npu/test_ipc_pagesize.py

各文件审查结论

  • test/cpp/api/modules.cpp — ⚠️ 发现 1 个 P1 问题:BBuildOrdering 测试用例使用了 DriverVersionToNum 不支持的版本字符串格式("26.1.0.T1"、"26.1.0.RC1" 返回 0),导致 7 个断言中有 3 个必定失败。

  • test/npu/test_ipc_pagesize.py — ⚠️ 发现 2 个问题:P2 — 64K 页面场景的 test_page_size_branch 无断言,测试不生效;P3 — p1.join()/p2.join() 缺少超时,子进程挂死时 CI 会无限期阻塞。

  • torch_npu/csrc/core/npu/GetCANNInfo.cpp — ⚠️ 发现 1 个 P2 问题:b-build 版本解析分支未提取 release 字段,不同 release 号的 b-build 版本(如 "26.1.0.b083" vs "26.1.5.b083")会产生相同的数值。

  • torch_npu/csrc/core/npu/GetCANNInfo.h — ✅ 无问题(仅新增 TORCH_NPU_API 导出声明,正确)。

  • torch_npu/csrc/core/npu/interface/AclInterface.cpp — ✅ 无新增问题(page_ctx 诊断信息附加逻辑正确,skip_page_size_check 分支逻辑合理)。

整体风险评估

中高风险。主要风险来自测试用例中的 P1 断言失败 bug,以及 b-build 解析器潜在的版本碰撞问题(P2)。AclInterface.cpp 中的核心 64K 页面跳过逻辑本身是正确的,但配套测试覆盖不足(64K 分支无断言)。建议在合入前修复 P1 测试用例问题,并对 P2 的 release 字段处理添加注释或补充逻辑。

类型 数量
🔴 阻塞 1
🟡 建议 2

⛔ 需要修改

likedislike
ascend-robotascend-robot成员
7月16日 添加了label:ascend-cla/yes
此处折叠了69条消息 查看更多
ascend-robotascend-robot成员
7月20日 删除了label:ci-pipeline-passed
ascend-robotascend-robot成员
7月20日 合入了pull request
DDring成员
7月20日 修改了pull request 的描述
ascend-robot
ascend-robot成员
7月20日 评论:
流水线 pytorch_gitcode_PR_multiVersion#12833 [ commitID:713d7834 ] 已完成
likedislike
DDring成员
7月25日 修改了pull request 的描述