ASCEND_GE_PY_PASS_PATH
功能描述
ASCEND_GE_PY_PASS_PATH是GE(Graph Engine)Python Pass系统的路径发现环境变量,用于告诉GE引擎去哪些路径加载用户编写的Python融合Pass插件。
该环境变量控制的是一个完整的“发现-注册-执行”链路:
- GE编译阶段启动Pass加载流程时,C++侧检查ASCEND_GE_PY_PASS_PATH是否已设置且非空。
- 若已设置,GE通过C++/Python bridge将该环境变量同步到Python侧。
- Python侧按路径扫描并加载用户编写的Pass模块。
- 模块加载过程中,用户通过@register_fusion_pass或@register_decompose_pass等装饰器将Pass注册到Python注册表。
- 注册信息回传到C++侧的PassRegistry,在后续编译阶段由GE Pass调度框架统一执行。
当前阶段,ASCEND_GE_PY_PASS_PATH是Python Pass发现的主路径(而非兜底机制),后续版本将补充entry_points(group="ge.passes.plugins")自动发现机制。
配置取值:
ASCEND_GE_PY_PASS_PATH=<path1>[:<path2>[:...]]
路径要求:多个路径之间以冒号(:)分隔;每个路径可以是.py文件或目录;路径建议使用绝对路径。
路径类型说明:
路径类型 |
扫描行为 |
|---|---|
单个.py文件 |
直接作为Python模块加载 |
目录 |
遍历其中不以 _ 开头的.py文件作为模块加载;包含__init__.py的子目录作为Python包导入 |
配置示例
- 指向单个Python文件
export ASCEND_GE_PY_PASS_PATH=/path/to/my_pass.py
- 指向目录(目录下所有 .py文件和Python包都会被扫描)
export ASCEND_GE_PY_PASS_PATH=/path/to/pass_dir/
- 支持多个路径,以冒号分隔
export ASCEND_GE_PY_PASS_PATH=/path/to/pass1.py:/path/to/pass_dir2/
扫描规则
- 目录扫描规则
当路径指向目录时,bootstrap模块按以下规则扫描:
- 目录下以_开头的文件和子目录将被跳过,不参与扫描。
- 非下划线开头的.py文件作为独立模块直接加载。
- 包含__init__.py的子目录作为Python包通过importlib.import_module()导入。
- 目录下的子目录按名称排序后依次扫描。
- 模块命名
每个通过文件路径加载的模块均分配唯一内部名称,格式为_ge_py_pass_{stem}_{hash},避免与用户自定义模块名冲突。同一个文件路径不会被重复加载。
使用约束
- 必须在GE初始化之前设置该环境变量。GE在编译阶段首次加载Pass时读取该变量,运行过程中动态修改环境变量不会生效。
- 路径指向的.py文件必须包含合法的Python代码,且应使用@register_fusion_pass或@register_decompose_pass装饰器注册至少一个Pass。未注册任何Pass的模块会被加载但不会产生效果。
- 路径指向的目录必须存在,否则会在Pass加载阶段抛出FileNotFoundError。
- 文件路径必须以.py为后缀,否则会抛出ValueError。
- 环境变量值为空或不设置时,GE将跳过Python Pass加载流程,不影响C++自定义Pass的正常加载。
- 同一个文件路径只会被加载一次,重复出现在多个路径段中不会导致重复注册。
支持的型号
全量芯片支持
父主题: 图编译