ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CANN PyPTO Pass 默认配置动态修改:set_pass_default_config 函数深度解析与调试实战

CANN PyPTO Pass 默认配置动态修改:set_pass_default_config 函数深度解析与调试实战 CANN PyPTO Pass 默认配置动态修改set_pass_default_config 函数深度解析与调试实战【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto导读在 CANN PyPTO 的编译管线中每个 Pass编译优化/变换阶段的行为都可以通过一套统一的配置体系进行控制。pypto.set_pass_default_config是这套体系中最常用的全局开关用于在图编译开始前动态修改 Pass 的默认运行时行为配置目前最典型的用途是打开dump 计算图开关将编译中间过程的计算图以 JSON 文件落盘从而支撑开发者对算子编译过程进行分析与调试。读完本文你将掌握该 API 的完整签名、参数语义、全局作用范围约束、底层 C 实现链路以及如何在真实算子编译场景中用它导出计算图做问题定位。产品支持情况该接口在 PyPTO 当前支持的全部 NPU 平台上均可使用覆盖以下产品系列Ascend 950PR / Ascend 950DT支持Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持功能说明set_pass_default_config用于修改 Pass 的默认配置信息其核心能力是动态修改 Pass 的运行时行为配置。当前开放的配置项为KEY_DUMP_GRAPHDump Pass 计算图开启后可在编译过程中输出各 Pass 处理前后的计算图方便分析和调试。与按策略、按 Pass 精确定位的set_pass_config(strategy, identifier, key, value)不同本接口修改的是全局默认配置default_pass_configs对未做专项覆盖的所有 Pass 生效是设置兜底默认值的入口。函数原型set_pass_default_config(key: PassConfigKey, value: bool)参数说明参数名输入/输出说明key输入PassConfigKey枚举。目前支持KEY_DUMP_GRAPH用于 Dump Pass 计算图value输入配置值布尔类型。True表示开启该配置项False表示关闭参数约束细节从源码实现python/pypto/pass_config.py可以看到接口内部会对入参做两层严格校验类型校验value必须是bool类型。传入-2、1、True等非布尔值会抛出PassError异常信息为Expected boolean type, but received int或对应实际类型名。这一点在单元测试 python/tests/ut/interface/test_pass_config.py 中有明确验证。枚举校验key必须是PassConfigKey枚举成员。传入枚举之外的值会抛出PassError异常信息为key must be a member of PassConfigKey, got {key}.。返回值说明无返回值None。约束说明使用本接口需要特别注意以下两点设置时机必须在图编译开始前调用。编译开始后修改默认配置对已进入编译流程的图不再生效。作用范围配置信息是全局性的会影响后续所有的编译过程。因此调试结束后应及时将配置恢复为False避免对后续编译造成持续影响例如持续产出计算图文件、影响性能。调用示例以下示例展示最典型的用法——在编译前打开计算图 dump 开关并在编译完成后关闭import pypto # 图编译开始前开启 Pass 计算图 dump pypto.set_pass_default_config(pypto.PassConfigKey.KEY_DUMP_GRAPH, True) # ... 在此执行算子定义与编译触发编译流程 ... # 编译结束恢复默认配置避免影响后续编译 pypto.set_pass_default_config(pypto.PassConfigKey.KEY_DUMP_GRAPH, False)与配套接口的组合使用set_pass_default_config属于 PyPTO Pass 配置体系中全局默认值的一组 API。完整能力如下python/pypto/pass_config.py 中的__all__API作用set_pass_default_config(key, value)修改 Pass 全局默认配置get_pass_default_config(key, default_value)获取 Pass 全局默认配置未找到时返回default_value详见 pypto-get_pass_default_config.mdset_pass_config(strategy, identifier, key, value)修改指定策略下指定 Pass 的专项配置详见 pypto-set_pass_config.mdget_pass_config(strategy, identifier, key, default_value)获取指定策略下指定 Pass 的专项配置详见 pypto-get_pass_config.mdget_pass_configs(strategy, identifier)一次性获取指定 Pass 的完整配置对象PassConfigs读取配置验证设置是否生效设置之后可用配套的 getter 立即校验import pypto # 先读取默认值若从未配置默认应为 False print(pypto.get_pass_default_config(pypto.PassConfigKey.KEY_DUMP_GRAPH, True)) # 输出False # 修改全局默认配置 pypto.set_pass_default_config(pypto.PassConfigKey.KEY_DUMP_GRAPH, True) # 再读取应为 True print(pypto.get_pass_default_config(pypto.PassConfigKey.KEY_DUMP_GRAPH, False)) # 输出True # 恢复 pypto.set_pass_default_config(pypto.PassConfigKey.KEY_DUMP_GRAPH, False)上述先 get 验证默认值 → set 修改 → get 验证生效 → 复位的完整流程在 python/tests/ut/interface/test_pass_config.py 的单元测试中与仓库实现完全一致。底层实现原理从 Python 到 C 的调用链路理解该接口的底层实现有助于掌握其全局语义与生效机制。整体调用链分为三层Python 层入口set_pass_default_configpython/pypto/pass_config.py完成参数类型与枚举校验后调用pypto_impl.SetPassDefaultConfig(key.value, value)。pybind11 绑定层Python 侧的调用通过 python/src/bindings/pass_config.cpp 绑定到 C 模板函数config::SetPassDefaultConfigbool(key, value)。绑定层同时为bool、int64_t、std::string三种类型提供了重载为后续扩展非布尔配置项预留了能力。C 配置管理层config::SetPassDefaultConfig最终落在ConfigManager上framework/src/interface/configs/config_manager.h其实现等价于在配置 JSON 的global.pass.default_pass_configs.key节点上写入新值随后调用RefreshGlobalPassCfg()刷新内存中的全局 Pass 配置。默认配置的真实来源global.pass.default_pass_configs的初始值来源于仓库内置的配置模板 framework/src/interface/configs/tile_fwk_config.json。该模板中dump_graph的默认值为false即默认不 dump 计算图此外还包含print_graph、dump_pass_time_cost、pre_check、post_check等兄弟配置项。KEY_DUMP_GRAPH在 C 侧的定义为字符串常量dump_graphframework/src/interface/configs/config_manager.h并通过 python/src/bindings/pass_config.cpp 暴露为 Python 侧pypto_impl.KEY_DUMP_GRAPH最终构成PassConfigKey枚举成员python/pypto/pass_config.py。全局配置如何传递到每个 PassRefreshGlobalPassCfg()会依据default_pass_configs重新构建GlobalPassConfigs.defaultPassConfigsframework/src/interface/configs/config_manager.cpp。当具体 Pass 运行时通过config::GetPassConfig(strategy, identifier, key, defaultValue)读取配置若该 Pass 在pass_strategies中有专项覆盖则使用专项值否则回落到全局默认值framework/src/interface/configs/config_manager.h。这正解释了默认配置影响后续所有编译过程的全局语义。实战场景dump Pass 计算图辅助调试开启KEY_DUMP_GRAPH后Pass 框架会在每个 Pass 执行前后输出计算图 JSON 文件。从 framework/src/passes/pass_interface/pass.cpp 的实现可以看到具体行为每个 Pass 会先创建独立的图目录CreateGraphFolder路径基于日志根目录与函数GetMagicName在PreRun阶段handlePreRunDumpGraph输出 Pass 处理前的 Function JSON对特定关键 Pass 有专属命名例如ExpandFunction后输出End_TensorGraph、SubgraphToFunction后输出End_TileGraph、RemoveRedundantReshape后输出Begin_TensorGraph对BlockGraph类 Pass还会按 subprogram 分别导出_ROOT.json与各子程序 JSONframework/src/passes/pass_interface/pass.cpp。因此当你在算子编译结果异常、或想观察 Tensor 图到 Tile 图的变换过程时可在编译前执行pypto.set_pass_default_config(pypto.PassConfigKey.KEY_DUMP_GRAPH, True)编译完成后在日志目录下即可找到按 Pass 与函数组织的计算图 JSON 文件用于对比 Pass 前后图结构差异或结合仓库中的图分析工具如 tools/verifier/graph.py、tools/verifier/pass_compare.py做结构化比对。使用建议与注意事项调试完务必复位全局默认配置会对后续所有编译生效调试结束后用pypto.set_pass_default_config(pypto.PassConfigKey.KEY_DUMP_GRAPH, False)恢复避免产生大量 dump 文件并引入额外开销。提前调用严格遵循图编译开始前调用的约束建议放在 import 之后、首次触发编译之前的初始化代码段。注意优先级若同时通过set_pass_config对某个具体 Pass 设置了专项配置专项配置优先于本接口设置的默认值本接口设置的默认值面向未被专项覆盖的 Pass。异常处理注意value必须为真正的布尔值传入0/1等整型会抛出PassError请勿依赖 Python 的隐式真值转换。【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进