已合并
[inductor][docs]update on inductor docs #45550
jimmycao9929创建于 11 天前
[inductor][docs]update on inductor docs #45550
已合并
共 8 个文件变更+36-5
| @@ -22,6 +22,7 @@ TorchNPU环境变量请参考《[TorchNPU环境变量参考](https://www.hiascen | |||
| 22 | | 自动Tiling优化 |INDUCTOR_ASCEND_AGGRESSIVE_AUTOTUNE| 控制是否启用batch profiler,默认值为0 | | 22 | | 自动Tiling优化 |INDUCTOR_ASCEND_AGGRESSIVE_AUTOTUNE| 控制是否启用batch profiler,默认值为0 | |
| 23 | | 自动Tiling优化 |TORCHINDUCTOR_COMPILE_THREADS| 多进程编译进程数量,与社区保持一致,默认值为32 | | 23 | | 自动Tiling优化 |TORCHINDUCTOR_COMPILE_THREADS| 多进程编译进程数量,与社区保持一致,默认值为32 | |
| 24 | | 自动Tiling优化 |TORCHNPU_PRECOMPILE_THREADS| 控制多线程编译线程数量,默认为最大核数的一半(max_precompiled_thread_num = os.cpu_count() // 2),大于1时,使用并发编译 | | 24 | | 自动Tiling优化 |TORCHNPU_PRECOMPILE_THREADS| 控制多线程编译线程数量,默认为最大核数的一半(max_precompiled_thread_num = os.cpu_count() // 2),大于1时,使用并发编译 | |
| 25 | +| 分核 / 限核 |NPU_DEVICE_LIMIT| 控制最多可使用的Cube和Vector的核数,默认值为全部cube和vector核 | | ||
| 25 | | CostModel |INDUCTOR_ASCEND_ENABLE_COSTMODEL| 控制是否启用CostModel预筛选,默认值为0 | | 26 | | CostModel |INDUCTOR_ASCEND_ENABLE_COSTMODEL| 控制是否启用CostModel预筛选,默认值为0 | |
| 26 | | CostModel |INDUCTOR_ASCEND_COSTMODEL_RATIO| 控制CostModel预筛选后保留的config比例,默认值为0.25 | | 27 | | CostModel |INDUCTOR_ASCEND_COSTMODEL_RATIO| 控制CostModel预筛选后保留的config比例,默认值为0.25 | |
| 27 | | 其他 |INDUCTOR_ASCEND_CHECK_ACCURACY| 开启triton后端精度对比工具,dump单算子用例。当启用时,会自动启用INDUCTOR_ASCEND_DUMP_FX_GRAPH功能,默认值为空。 | | 28 | | 其他 |INDUCTOR_ASCEND_CHECK_ACCURACY| 开启triton后端精度对比工具,dump单算子用例。当启用时,会自动启用INDUCTOR_ASCEND_DUMP_FX_GRAPH功能,默认值为空。 | |
| @@ -0,0 +1,27 @@ | |||
| 1 | +# NPU_DEVICE_LIMIT | ||
| 2 | + | ||
| 3 | +## 功能描述 | ||
| 4 | + | ||
| 5 | +用于将NPU卡的计算核(Cube Core、Vector Core)进行划分,例如:通过export NPU_DEVICE_LIMIT='14,28',将会划分14个Cube Core和28个Vector Core作为当前可用的计算资源。在这种情况下,一个计算图中所涉及的算子(AclNN算子、triton手写算子、triton自动融合算子、catlass算子),最多可以使用这些受限的计算核。 | ||
| 6 | + | ||
| 7 | +适用于小shape模型场景,算子shape较小,打不满cube core和vector core导致浪费。因此,通过分核/限核,支持多个实例同时推理,即多个算子同时运行在同一个NPU卡上。 | ||
| 8 | + | ||
| 9 | +| 值 | 说明 | | ||
| 10 | +|---|---| | ||
| 11 | +| 例'7,14'或者'14,28' | Cube和Vector的核数限制 | | ||
| 12 | + | ||
| 13 | +## 配置示例 | ||
| 14 | + | ||
| 15 | +```bash | ||
| 16 | +export NPU_DEVICE_LIMIT='14,28' | ||
| 17 | +``` | ||
| 18 | + | ||
| 19 | +## 使用约束 | ||
| 20 | + | ||
| 21 | +- 在A2/A3/A5代际,Cube和Vector的配比是1:2。因此,设置NPU_DEVICE_LIMIT时,建议Cube和Vector的数量比例达成1:2。 | ||
| 22 | + | ||
| 23 | +- 如不设置,则默认使用NPU上全部的Cube和Vector核; | ||
| 24 | + | ||
| 25 | +## 支持的型号 | ||
| 26 | + | ||
| 27 | +- <term>Atlas A5 系列产品</term> | ||
| @@ -2,13 +2,13 @@ | |||
| 2 | 2 | ||
| 3 | ## 简介 | 3 | ## 简介 |
| 4 | 4 | ||
| 5 | -Inductor-Ascend在继承Pytorch社区Inductor能力的基础上,针对昇腾Ascend硬件,进行了亲和性改进和优化。其目标是:提供昇腾亲和的torch.compile图模式后端;生成昇腾亲和的Triton DSL,支持基于triton的算子自动融合;支持动态shape。 | 5 | +Inductor-Ascend在继承社区Pytorch Inductor能力的基础上,针对昇腾Ascend硬件,进行了亲和性改进和优化。其目标是:提供昇腾亲和的torch.compile图模式后端;支持基于triton的算子自动融合;支持动态shape。 |
| 6 | 6 | ||
| 7 | -如图1(推荐场景-图模式-软件栈)所示,Inductor-Ascend和社区Inductor的执行流程类似,其内嵌于TorchNPU中,当用户开启图模式后端torch.compile(backend="inductor")时,Inductor-Ascend承接Dynamo抓取的FX Graph,进行编译、融合,生成昇腾亲和融合算子Triton DSL;最后由Triton-Ascend、AscendNPU-IR编译优化,生成昇腾指令机器码(二进制)。 | 7 | +如图1所示,Inductor-Ascend和社区Inductor的执行流程类似,其内嵌于TorchNPU中,当用户开启图模式后端torch.compile(backend="inductor")时,Inductor-Ascend承接Dynamo抓取的FX Graph,进行图优化、融合、编译,生成昇腾亲和融合算子Triton DSL或者catlass DSL;最后由Triton-Ascend、AscendNPU-IR编译优化,生成昇腾指令机器码(二进制)。 |
| 8 | 8 | ||
| 9 | -和社区类似,对于无法参与融合的算子(AtenOp),Inductor-Ascend会将其作fallback处理,即fallback到ACLNN算子、手写算子等。 | 9 | +和社区类似,对于无法参与融合的算子(AtenOp),Inductor-Ascend会将其作fallback处理,即fallback到ACLNN算子、手写AscendC算子等。 |
| 10 | 10 | ||
| 11 | -图1 推荐场景-图模式-软件栈 | 11 | +图1 图模式-自动融合-软件栈 |
| 12 | <div align="left"> | 12 | <div align="left"> |
| 13 | <img src="overview_arch.png" width="70%"> | 13 | <img src="overview_arch.png" width="70%"> |
| 14 | </div> | 14 | </div> |
| @@ -17,7 +17,7 @@ Inductor-Ascend在继承Pytorch社区Inductor能力的基础上,针对昇腾As | |||
| 17 | 17 | ||
| 18 | 图2 Inductor-Ascend逻辑架构图 | 18 | 图2 Inductor-Ascend逻辑架构图 |
| 19 | <div align="left"> | 19 | <div align="left"> |
| 20 | - <img src="inductor_arch_v1.png" width="80%"> | 20 | + <img src="inductor_arch.png" width="80%"> |
| 21 | </div> | 21 | </div> |
| 22 | 22 | ||
| 23 | ## 使用约束 | 23 | ## 使用约束 |
| @@ -46,6 +46,7 @@ Inductor-Ascend在继承Pytorch社区Inductor能力的基础上,针对昇腾As | |||
| 46 | | CppWrapper | 用于生成 C++ 调用代码替代默认的 Python 包装器,以减少 torch.compile 后模型在推理时的 Python 开销。详细介绍可点击[link](https://docs.pytorch.org/tutorials/unstable/inductor_cpp_wrapper_tutorial.html) | 46 | | CppWrapper | 用于生成 C++ 调用代码替代默认的 Python 包装器,以减少 torch.compile 后模型在推理时的 Python 开销。详细介绍可点击[link](https://docs.pytorch.org/tutorials/unstable/inductor_cpp_wrapper_tutorial.html) |
| 47 | | AOTInductor | 旨在处理导出的PyTorch模型,对其进行优化,并生成动态链接库及其他相关产物。这些编译产物广泛应用于服务端推理部署场景,支持非Python环境下的推理执行。详细介绍可点击[link](https://docs.pytorch.org/docs/2.11/user_guide/torch_compiler/torch.compiler_aot_inductor.html) | 47 | | AOTInductor | 旨在处理导出的PyTorch模型,对其进行优化,并生成动态链接库及其他相关产物。这些编译产物广泛应用于服务端推理部署场景,支持非Python环境下的推理执行。详细介绍可点击[link](https://docs.pytorch.org/docs/2.11/user_guide/torch_compiler/torch.compiler_aot_inductor.html) |
| 48 | | MegaCache | 用于统一保存和恢复模型编译过程中产生的多级缓存,从而减少模型冷启动时重复执行图捕获、动态图分析、代码生成、Kernel编译和Autotune带来的耗时,提供面向`torch.compile`编译场景的端到端缓存复用能力。详细介绍可单击[link](https://docs.pytorch.org/tutorials/recipes/torch_compile_caching_tutorial.html)获取PyTorch官网详情 | 48 | | MegaCache | 用于统一保存和恢复模型编译过程中产生的多级缓存,从而减少模型冷启动时重复执行图捕获、动态图分析、代码生成、Kernel编译和Autotune带来的耗时,提供面向`torch.compile`编译场景的端到端缓存复用能力。详细介绍可单击[link](https://docs.pytorch.org/tutorials/recipes/torch_compile_caching_tutorial.html)获取PyTorch官网详情 |
| 49 | +| 分核/限核 | 用于将NPU卡的计算核(Cube Core、Vector Core)进行划分,例如:通过export NPU_DEVICE_LIMIT='14,28',将会划分14个Cube Core和28个Vector Core作为当前可用的计算核。在这种情况下,一个计算图中所涉及的算子(AclNN算子、triton手写算子、triton自动融合算子、catlass算子),最多可以使用这些受限的计算核。 | ||
| 49 | 50 | ||
| 50 | ## 使用说明 | 51 | ## 使用说明 |
| 51 | 52 | ||