静态Kernel编译配置
功能简介
本功能为试验特性,后续版本可能存在变更,暂不支持应用于商用产品中。
reduce-overhead模式下,对于纯静态shape网络或者shape变化较少的动态shape网络,如需提升网络执行性能,可通过算子预先静态编译达到目的,该方式简称为静态Kernel编译。它是指在模型编译时指定shape大小,运行时不需要指定shape大小,减少运行时开销,具体优势如下:
- 编译时已知所有Tensor的大小,存储空间利用率高。
- 编译时可以针对实际的shape大小做针对性优化。
- AI处理器擅长并行指令运行,不擅长逻辑计算,如果有太多的Scalar操作可能会打断并行指令的运行,从而导致性能下降。静态编译可以在编译时完成标量的计算,一定程度上可以提升性能。
- 编译工具在编译时知道确切的操作数据大小,不会额外插入同步,不会导致并行执行多个指令变成串行执行,一定程度上可以提升性能。
开启静态Kernel编译后,系统根据输入的算子信息统计文件,得到确定的shape信息,针对每一个shape都编译出一个算子二进制。
使用约束
- 目前仅适用于如下产品:
Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件 Atlas A3 训练系列产品/Atlas A3 推理系列产品
- 本功能仅支持reduce-overhead模式,约束与reduce-overhead模式配置一致。
- 注意,当Ascend PyTorch Profiler中“experimental_config”参数开启算子信息统计功能(即record_op_args=True),且“schedule”参数设置的预先跳过的step轮数为0时(即skip_first=0),不支持同时使用本功能。
- 多卡场景使用限制:必须配置环境变量LOCAL_WORLD_SIZE(它是Python中与分布式计算相关的属性,指单个物理节点(一台机器)上启动的并行进程数,常见于PyTorch多节点场景),其每个节点的LOCAL_WORLD_SIZE必须一致。
由于多卡场景在安装静态kernel run包时,会更新算子库公共文件,没有环境变量LOCAL_WORLD_SIZE协同的话,会读到过程态内容从而导致undefined行为,因此在多卡场景使用该功能时,必须配置LOCAL_WORLD_SIZE。
使用方法
- (可选)配置环境变量。仅多卡场景需要配置。
export LOCAL_WORLD_SIZE=${local_world_size}${local_world_size}表示实际运行的卡数,取值是自然数。
- 通过torchair.get_npu_backend中compiler_config配置本功能,示例如下,仅供参考不支持直接拷贝运行,参数介绍参见表1。
1 2 3 4 5 6 7 8 9
import torch_npu, torchair config = torchair.CompilerConfig() # 配置图执行模式 config.mode = "reduce-overhead" # 开启静态Kernel编译 config.experimental_config.aclgraph._aclnn_static_shape_kernel = True config.experimental_config.aclgraph._aclnn_static_shape_kernel_build_dir = "/path/test" npu_backend = torchair.get_npu_backend(compiler_config=config) opt_model = torch.compile(model, backend=npu_backend)
产物说明
假设产物路径为“/path/test”,目录结构如下,其中${timestamp}为时间戳、${pid}表示运行的进程号。
aclnn_static_shape_kernel_outputs // 固定的产物文件名
|—— ${timestamp_1}_${pid_1}_outputs
| |—— ${pid_1} // 模型中目标算子信息文件夹
| |—— MatMulV2_float_ND_1_2048_0.json // js文件表示网络中的算子统计信息,包括shape和format等
| |—— ......json
| |—— ${pid_1}_debug // 模型中全量算子信息文件夹
| |—— MatMulV2_float_ND_1_2048_0.json
| |—— ......json
| |—— static_kernel_${datetime}.run // 编译好的静态Kernel文件
|—— ${timestamp_2}_${pid_2}_outputs
|—— ......
父主题: reduce-overhead模式功能