reduce-overhead模式配置(aclgraph)
功能简介

reduce-overhead模式为试验特性,后续版本可能存在变更,暂不支持应用于商用产品中。
PyTorch原生框架默认以Eager模式运行,即单算子下发后立即执行,每个算子都需要经历如下流程:Host侧Python API->Host侧C++层算子下发->Device侧算子Kernel执行,每次Kernel执行之前都要等待Host侧下发逻辑完成。因此在单个算子计算量过小或Host性能不佳场景下,很容易产生Device空闲时间,即每个Kernel执行完后都需要一段时间去等待下一个Kernel下发完成。
为了优化Host调度性能,CUDA提供了一种GPU图模式方案,称为CUDA Graph。其本质是Device调度策略,省略了算子Host调度过程,以提升图模式执行效率,该方案详细介绍请参见官网Accelerating PyTorch with CUDA Graphs。借鉴CUDA Graph,TorchAir提供了NPU图模式方案,称为aclgraph,将算子Kernel下沉到Device执行,以实现NPU上图模式执行效率提升。
本功能就是TorchAir提供的aclgraph图模式开关,当用户网络存在Host侧调度问题时,建议开启此模式。
使用约束
- 目前仅适用于如下产品:
Atlas A2 训练系列产品/Atlas 800I A2 推理产品 Atlas A3 训练系列产品
- 主要面向在线推理场景,暂不支持反向流程capture成图、不支持随机数算子capture。
- 当图执行模式为“reduce-overhead”时,不支持torch.compile的dynamic设为True(动态图编译)。
- 当图执行模式为“reduce-overhead”时,除如下功能,其他功能均不支持在该模式下开启。
- 当图执行模式为“reduce-overhead”时,其约束与CUDA Graph一致(如不支持stream sync、动态控制流等),此处不再赘述。
使用方法
该功能通过torchair.get_npu_backend中compiler_config配置,示例如下,参数介绍参见表1。
1 2 3 4 5 6 | import torch_npu, torchair config = torchair.CompilerConfig() # 设置图执行模式 config.mode = "reduce-overhead" npu_backend = torchair.get_npu_backend(compiler_config=config) opt_model = torch.compile(model, backend=npu_backend) |
父主题: 功能介绍