ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

PyPTO 调试配置查询接口 pypto.get_debug_options 详解:功能说明、返回值与典型应用

2026/9/18 5:36:59 拓冰建站 浏览量
PyPTO 调试配置查询接口 pypto.get_debug_options 详解:功能说明、返回值与典型应用 PyPTO 调试配置查询接口 pypto.get_debug_options 详解功能说明、返回值与典型应用【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pyptopypto.get_debug_options()是 CANN PyPTOParallel Tensor/Tile Operation 编程范式框架中用于获取当前配置作用域Config Scope下全部 debug 调试配置项的查询接口。本文以 docs/zh/api/tensor_api/config/pypto-get_debug_options.md 文档为核心结合仓库源码与单元测试系统讲解该接口的函数原型、返回值语义、底层实现原理以及配合set_debug_options/pypto.frontend.jit(debug_options...)在编译期与运行期调试中的典型用法帮助读者在算子开发与问题定位时准确读取和校验调试状态。产品支持情况pypto.get_debug_options接口在以下产品形态上均受支持Ascend 950PR / Ascend 950DT支持Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持。该接口属于配置config类通用能力不依赖特定算子的硬件实现细节因此在上述各代硬件产品上行为一致。功能说明get_debug_options的功能是获取当前配置作用域Config Scope内的全部 debug 配置项信息。它本身不接收任何参数、不做任何修改是一个纯查询接口返回结果以 dict 形式呈现供用户在 kernel 编译、图编译或运行阶段读取当前生效的调试开关从而判断编译期调试模式compile_debug_mode是否开启、处于哪一档运行期调试模式runtime_debug_mode是否开启、处于哪一档指定转储计算图dump pass graph的 pass 标识列表dump_pass_graph当前是什么。从源码实现看get_debug_options的核心逻辑位于 python/pypto/config.pydef get_debug_options() - Dict[str, Union[str, int, List[str], List[int], Dict[int, int]]]: Get debug options. scope get_current_scope() return scope.get_debug_options()它首先通过get_current_scope()获取当前配置作用域对应的ConfigScope实例内部调用pypto_impl.CurrentScope()见 python/pypto/config.py随后委托给ConfigScope.get_debug_options()完成实际的键值提取def get_debug_options(self): return self.get_options(debug)其中get_options(prefix)会遍历当前作用域内的全部配置项只返回以debug.为前缀的键并剥离该前缀后以子字典形式返回见 python/pypto/config.py。也就是说接口返回的 dict 的 key 是去掉debug.前缀后的配置项名称例如runtime_debug_mode、compile_debug_mode、dump_pass_graph。函数原型get_debug_options() - Dict[str, Union[str, int, List[int], Dict[int, int]]]参数说明无。该接口为纯查询接口不接收任何位置参数或关键字参数调用时不传参即可。返回值说明返回值为dict包含当前作用域下 debug 配置的所有项。常见可返回的配置键包括配置键类型含义compile_debug_modeint编译期调试模式开关0/1/2详见下文与 set_debug_options 的配套关系runtime_debug_modeint运行期调试模式开关0/1/2/3/4dump_pass_graphList[str]需要转储计算图并打印 IR 的 pass 标识列表需要说明的是接口返回的具体键集取决于当前作用域中实际设置过哪些 debug 配置未显式设置的配置项不会出现在返回 dict 中set_debug_options内部仅收集非 None 参数见 python/pypto/config.py因此调用方应使用.get(key, default)方式安全取值而非直接下标访问。约束说明无。接口本身没有使用前置条件或后置约束可在任意配置作用域内安全调用。调用示例最基本的调用方式即文档给出的示例直接打印或读取当前 debug 配置import pypto # 读取当前作用域内的全部 debug 配置 debug_options pypto.get_debug_options() print(debug_options) # 安全地读取单项配置 runtime_debug_mode pypto.get_debug_options().get(runtime_debug_mode, 0) compile_debug_mode pypto.get_debug_options().get(compile_debug_mode, 0) dump_pass_graph pypto.get_debug_options().get(dump_pass_graph, [])由于未设置项不会出现在返回值中推荐统一使用.get(key, default)方式读取并显式提供默认值这与框架内部的使用习惯保持一致见下文框架内部消费点。与 set_debug_options 的配套关系get_debug_options读取的配置通常由以下两类入口写入pypto.set_debug_options(...)全局性地设置当前作用域下的 debug 配置函数原型与各参数含义见 python/pypto/config.pydef set_debug_options( *, compile_debug_mode: Optional[int] None, runtime_debug_mode: Optional[int] None, dump_pass_graph: Optional[List[str]] None, ) - None:各参数语义如下compile_debug_modeint是否在编译阶段开启调试模式。0关闭1开启一键使能与图编译相关的配置例如转储 compute graph2开启并固定 CCE 设备端代码输出路径不覆盖已有 CCE 文件。并行编译线程仍由codegen.parallel_compile控制kernel 名称确定性分配保证多线程 codegen 输出可复现。runtime_debug_modeint是否在运行阶段开启调试模式。0关闭1开启一键使能与运行相关的配置例如泳道图 swimlane graph2开启 AICORE_MODEL 仿真3开启运行期依赖校验dependency-verification数据转储4开启运行期 GM 内存越界检查并为每个由用户显式登记且归一化后的assume_divisible表达式在控制流入口生成取模断言编译器推导、未显式登记的表达式不检查。**dump_pass_graphList[str]**指定需要转储计算图并打印 IR 的 pass 标识列表空列表表示关闭。未匹配到的标识会被忽略并给出 warning若compile_debug_mode为1则所有 pass 都会转储图并打印 IR此时dump_pass_graph 不再起筛选作用。pypto.frontend.jit(debug_options{...})在 kernel 级 JIT 装饰器中按 kernel 粒度注入 debug 配置例如仓库测试中的用法pypto.frontend.jit(debug_options{compile_debug_mode: 0}) def kernel(...): ...相关示例可参见 python/tests/st/frontend/test_reshape_copy_out.py 与 python/tests/st/frontend/test_reshape_validshape_matmul.py。set_debug_options内部通过set_options(debug_optionsoptions_dict)写入配置并由_Options.prepare_options统一转换为debug.前缀的扁平键见 python/pypto/config.py因此get_debug_options读取到的键与写入时的参数名一一对应。底层实现与框架内部消费点1. 配置作用域Config Scope机制get_debug_options的读取对象是当前配置作用域。PyPTO 的配置体系以作用域为粒度管理所有配置项codegen / host / pass / runtime / verify / debug / operation 等每个作用域由 C 侧pypto_impl.BeginScope/EndScope创建与销毁Python 侧通过ConfigScope类见 python/pypto/config.py封装GetAllConfig()返回的全量配置。get_debug_options等价于对全量配置执行仅保留debug.前缀的过滤视图是作用域机制面向调试场景的只读入口。2. 运行期调试模式的 Launcher 路由runtime_debug_mode的值会直接影响运行期 Launcher 的选择。在 python/src/bindings/runtime.cpp 中框架会读取_debug_options字典中的runtime_debug_modeif (debugOptions.contains(runtime_debug_mode)) { auto debugMode debugOptions[runtime_debug_mode].castint64_t(); launchMode_ LauncherRouter::ResolveByDebugMode(debugMode); isDebugMode_ (debugMode CFG_DEBUG_ALL); }即通过LauncherRouter::ResolveByDebugMode依据 debug 模式解析出对应的启动方式并在 debug 模式全开时标记为调试运行。这说明get_debug_options所读取的runtime_debug_mode并非装饰性配置而是真实参与运行期执行路径决策的关键开关。3. pass 图转储的校验与告警dump_pass_graph中的 pass 标识在 pass 管理器中会被校验框架在 framework/src/passes/pass_mgr/pass_manager.cpp 附近对debug.dump_pass_graph中不存在于当前 pass 策略strategy中的标识输出告警日志与set_debug_options文档中未匹配标识忽略并告警的行为一致。4. JIT 入口的默认值兜底在 python/pypto/frontend/parser/entry.py 中JIT 编译器初始化_debug_options时会以全局配置为默认值兜底if runtime_debug_mode not in self._debug_options: self._debug_options[runtime_debug_mode] pypto.get_debug_options().get(runtime_debug_mode, 0)即当用户未在 JIT 装饰器中显式指定runtime_debug_mode时框架会通过pypto.get_debug_options()读取全局 debug 配置作为默认值默认回退为0。这正体现了get_debug_options在框架内部的真实消费场景——它既是用户调试的查询工具也是编译管线默认参数的重要来源。典型应用场景与示例场景一在 kernel 内部校验调试配置是否生效结合set_debug_options与get_debug_options可以在 kernel 编译过程中断言调试开关已正确透传。仓库单元测试 python/tests/ut/interface/test_config_scope.py 给出了完整范式import torch import pypto pypto.frontend.jit(runtime_options{run_mode: 1}) def kernel_with_dynamic( a: pypto.Tensor([pypto.DYNAMIC, pypto.STATIC], pypto.DT_FP32), out: pypto.Tensor([pypto.DYNAMIC, pypto.STATIC], pypto.DT_FP32), ): # 在 kernel 内部获取全局配置并校验 assert 1 pypto.get_debug_options().get(runtime_debug_mode) assert 1 pypto.get_debug_options().get(compile_debug_mode) assert [RemoveRedundantReshape, InferMemoryConflict] pypto.get_debug_options().get(dump_pass_graph) pypto.set_vec_tile_shapes(16, 16) for idx in pypto.loop(a.shape[0], nameLOOP, idx_namek): temp a[idx:idx 1, :] out[idx:idx 1, :] temp 1 def test_config_scope(): pypto.set_debug_options(compile_debug_mode1) pypto.set_debug_options(runtime_debug_mode1) pypto.set_debug_options(dump_pass_graph[RemoveRedundantReshape, InferMemoryConflict]) # 构造输入并调用 kernel_with_dynamic ...该用例展示了三条关键能力get_debug_options可在 kernel 编译期JIT 捕获阶段读取全局配置.get(key, default)是安全取值方式多个 debug 配置项编译调试、运行调试、pass 图转储可同时生效并被逐一校验。场景二按 kernel 粒度注入并查询 debug 配置当希望仅对某个算子开启调试、而不影响全局时可在pypto.frontend.jit装饰器中按 kernel 注入import pypto pypto.frontend.jit(debug_options{runtime_debug_mode: 0, compile_debug_mode: 0}) def my_kernel(a: pypto.Tensor([pypto.STATIC], pypto.DT_FP32), out: pypto.Tensor([pypto.STATIC], pypto.DT_FP32)): # 编译期读取确认调试模式按 kernel 粒度生效 assert 0 pypto.get_debug_options().get(runtime_debug_mode, -1) ...相关写法可参考仓库测试 python/tests/st/operation/matmul/test_batchmatmul.py 中对debug_options{runtime_debug_mode: 0, compile_debug_mode: 0}的批量使用。场景三运行时依赖校验runtime_debug_mode3/4当需要排查动态 shape 下的整除性假设问题时可将runtime_debug_mode设置为3转储运行期依赖校验数据或4为显式登记的assume_divisible表达式生成取模断言再通过get_debug_options确认开关已生效。关于runtime_debug_mode4的语义契约与 codegen 行为可进一步阅读 python/pypto/frontend/developer_doc.md 及对应英文文档 python/pypto/frontend/developer_doc_en.md。小结pypto.get_debug_options()是 PyPTO 调试配置体系的统一只读入口它无参数、无约束返回当前配置作用域下所有debug.前缀配置项组成的 dict其底层由ConfigScope过滤实现返回键与set_debug_options/ JITdebug_options的写入参数一一对应。在实际开发中它既可用于在 kernel 内断言调试开关生效也是 JIT 编译管线读取默认runtime_debug_mode的内部数据源。掌握该接口配合compile_debug_mode、runtime_debug_mode、dump_pass_graph三组开关即可系统化地开展编译期图转储、运行期仿真与内存越界检查等调试工作。【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考