已合并
[feat] deterministic_level: add graph-mode guard and EX scope API #41762
Lyric创建于 7月15日
[feat] deterministic_level: add graph-mode guard and EX scope API #41762
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 Lyric 的贡献)atomgit-bot
7月15日 评论:
7月15日 评论:
变更摘要
此 PR 为 NPU 图模式(graph mode)下的确定性计算功能新增了两个核心能力:一是通过 install_npu_deterministic_level_guard 实现图模式编译守卫,当 deterministic_level 发生变更时触发 Dynamo 重新编译;二是在 npugraph_ex.scope 中暴露 deterministic API,允许在 EX scope 内设置确定性计算级别。同时新增了对应的单元测试和接口模式声明。
主要改动
- 新增
torch_npu/dynamo/_deterministic_guard.py:实现install_npu_deterministic_level_guard()函数,该函数在 Dynamo TracingContext 中注册一个基于GlobalStateSource的守卫,通过 lambda guard 捕获当前_get_deterministic_level()的值,当等级变化时触发图重新编译。 - 新增
test/dynamo/test_deterministic_level_graph_mode.py:添加TestDeterministicLevelGraphMode测试类,验证在torch.compile图模式下切换deterministic_level(1↔2)时仅触发两次编译(每个等级一次),确保守卫生效。 - 修改
torch_npu/npu/npugraph_ex/scope/__init__.py:在__all__中新增"deterministic"导出,并添加deterministic(level: int)函数,内部委托至torch_npu.dynamo.npugraph_ex.scope.deterministic,为用户提供 EX scope 下的确定性级别设置入口。 - 更新
test/torch_npu_schema.json:补充torch_npu.npu.npugraph_ex.scope.deterministic的函数签名声明(level: int),保持接口 schema 与实现同步。


不准确?
ascend-robot
7月15日 评论:
7月15日 评论:
atomgit-bot
7月15日 评论:
7月15日 评论:
代码审查
我已完成对所有四个变更文件的全面审查。以下是我的审查结论:
审查总结
逐文件审查结果
-
test/dynamo/test_deterministic_level_graph_mode.py(新增测试文件)- 测试
install_npu_deterministic_level_guard的守卫安装和基于 deterministic_level 变化的重新编译行为 - 逻辑正确:通过交替设置 level=1/2,验证守卫导致恰好 2 次编译(每个 unique level 缓存一次编译结果)
tearDown正确调用了torch._dynamo.reset()和super().tearDown()进行清理- 未发现问题
- 测试
-
test/torch_npu_schema.json- 新增
torch_npu.npu.npugraph_ex.scope.deterministic的 schema 条目 - signature
"(level: int)"与函数签名一致 - JSON 格式正确
- 未发现问题
- 新增
-
torch_npu/dynamo/_deterministic_guard.py(新增模块)- 实现
install_npu_deterministic_level_guard()函数,在 dynamo 追踪上下文中安装全局状态守卫 TracingContext.try_get()空值检查正确,非追踪上下文时安全返回 False- 闭包正确捕获
captured_level:_create_guard_fn和内部check_fn都引用同一值 - 使用
GlobalStateSource().make_guard()+add_lambda_guard()的模式符合 PyTorch dynamo 内部 API 惯例 - 未发现问题
- 实现
-
torch_npu/npu/npugraph_ex/scope/__init__.py- 新增
deterministic(level: int)公共 API 函数 - 在
__all__中正确导出 - 遵循与既有
limit_core_num相同的委托模式(延迟导入torch_npu.dynamo.npugraph_ex.scope) - 未发现问题
- 新增
问题统计
| 优先级 | 数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 0 |
| P3 | 0 |
整体风险评估
低风险。 此变更新增了一个确定性等级守卫(deterministic level guard)机制以及对应的公共 API 和测试。代码逻辑正确,遵循了现有代码的模式(limit_core_num 的委托模式、TracingContext 的使用方式),测试覆盖了守卫安装和重新编译的核心路径。未发现正确性、安全、可靠性或破坏性变更问题。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


不准确?
7月15日 添加了label:ascend-cla/yes
此处折叠了55条消息 查看更多
7月23日 删除了label:ci-pipeline-passed
7月23日 关闭了关联的issue
7月23日 合入了pull request
ascend-robot
7月23日 评论:
7月23日 评论:
流水线 pytorch_gitcode_PR_multiVersion#12974 [ commitID:a4c5f649 ] 已完成


7月24日 修改了pull request 的描述
【合入来源】
【修改方案】
1、新增 torch_npu.dynamo._deterministic_guard.install_npu_deterministic_level_guard()。在 Dynamo 的 TracingContext.guards_context.dynamo_guards 中注册 Lambda Guard。
2、新增 torch_npu._inductor.deterministic_cache,在 AscendC 编译 scope 内 patch。
【资料变更】
不涉及
【接口变更】
不涉及
【功能验证】
自验证ok
【CheckList】