---
title: 推理调优案例
description: "本节面向推荐模型的推理场景，通过一个完整的代码示例，结合推理阶段的Profiling数据，分析并定位影响模型吞吐性能的关键瓶颈，并给出相应的优化策略。内容涵盖多实例并行、AICore控核策略以及批量H2D（Host-to-Device）传输等技术的实现方法，并介绍这些技术对推理吞吐性能的影响。其中："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/atlasag_25_0101.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/atlasag_25_0101.html
indexId: ddcfdeba3b6be6efae7692295173d4e98b82dab361f1da1c35589c77ee4a0f1170
---
# 推理调优案例

#### 案例介绍

本节面向推荐模型的推理场景，通过一个完整的代码示例，结合推理阶段的Profiling数据，分析并定位影响模型吞吐性能的关键瓶颈，并给出相应的优化策略。内容涵盖多实例并行、AICore控核策略以及批量H2D（Host-to-Device）传输等技术的实现方法，并介绍这些技术对推理吞吐性能的影响。其中：

- AI Core控核：通过配置  options参数说明(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/atlasgeapi_07_0150.html)
中的“ge.aicoreNum”参数，配置算子编译时使用的AI Core核数。
- 批量H2D：通过调用接口aclrtMemcpyBatch来实现批量内存复制功能。
- 多实例并行：通过多线程创建多个推理实例，来提升系统并发处理能力。

为量化评估不同特性对推理吞吐性能的影响，本实验执行10,000次推理任务（本样例模型输入数据为构造的随机值），记录单次推理耗时及总时延、计算模型吞吐量（TPS）与平均时延（ms）。

如下是 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 在不同配置下的吞吐量与时延表现：

| 配置方案 | BatchSize=128 | BatchSize=256 |
| --- | --- | --- |
| 单实例 | 745,55 TPS / 1.471ms | 132,247 TPS / 1.685ms |
| 单实例+批量H2D | 131,191 TPS / 0.792ms | 209,927 TPS / 1.030ms |
| 多实例并行(4) | 155,104 TPS / 2.089ms | 360,253 TPS / 2.034ms |
| 多实例并行(4)+AI Core控核(16\|16) | 185,415 TPS / 1.797ms | 384,163 TPS / 1.850ms |
| 多实例并行(4)+AI Core控核(16\|16)+批量H2D | 251,877 TPS / 1.285ms | 493,065 TPS / 1.317ms |


- 以单实例，BatchSize=128为基准数据，从上述表格可以看出：

  - 批量H2D可以显著降低数据搬运开销，单实例场景下吞吐量提升75.9%，时延降低52.9%。
  - 多实例并行吞吐量提升至单实例的2.08倍，但伴随时延增加41.7%。
- 以多实例并行，BatchSize=128为基准数据，从上述表格可以看出：
  AI Core控核有效避免多实例并行时的资源竞争，吞吐量提升19.5%，时延下降13.9%。

- 以多实例并行(4)+AI Core控核(16|16)+批量H2D，BatchSize=128为基准数据，从上述表格可以看出：
  增大BatchSize对调度密度优化效果显著，256 BatchSize场景下吞吐量较128提升95.7%，时延增幅7.9%。


该特性仅在如下产品型号支持：

Atlas 350 加速卡

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

Atlas A2 训练系列产品 / Atlas A2 推理系列产品


#### 分析瓶颈点

基准用例配置如表1所示，基准用例中使用单实例、不使用AI Core控核策略、不开启批量H2D传输技术；参考Profiling性能数据采集开启Profiling性能数据采集功能。


**表1 基准用例配置**

| 推理次数 | BatchSize | 多实例并行 | AI Core控核 | 批量H2D |
| --- | --- | --- | --- | --- |
| 10000 | 128 | 1 | 不控制可用核数 | 不开启 |


- 数据搬运瓶颈
  基于Profiling数据分析，单次推理前需执行多次（28）独立H2D数据搬运操作，导致数据准备阶段NPU处于空闲状态，整体数据搬运耗时占比显著（53.6%，0.740230/1.383355），数据分析见图1。

  图1 单次推理profiling数据分析

- 内核粒度不足，算子调度存在间隙
  算子执行时间很短（1us-5us），算子间存在依赖关系，导致NPU在算子执行间隙产生细小空泡（Bubbles，Free空闲次数539998），资源利用率不足（10%，计算时间/总时间=1826.548713/17889.715647），详细数据请参见图3。

  图2 算子执行时间

  图3 空泡和资源利用率


#### 设计优化方案

针对上述问题，可供使用的优化策略如下：- 多实例并行
  通过多线程交错执行推理任务，填补算子间空泡，提升NPU利用率。但并行推理可能导致资源竞争，增加推理延迟，应合理控制并行度以避免资源过度争用。

- 批量H2D优化
  启用批量数据搬运机制，将多个输入数据合并为单次H2D操作，减少数据搬运次数并提升单次搬运量。

- AI Core资源控制
  配合多实例使用，通过配置ge.aicoreNum参数限制单算子可使用的AI Core数量（如"8|8"），平衡资源分配，提高并行的同时避免过度竞争。

- 增大BatchSize
  增大单次推理BatchSize，提升算子粒度与调度密度，降低调度开销占比。


下面给出批量H2D-多实例并行-AI Core控核多策略叠加场景的推理效果验证。


#### 验证优化方案

该场景配置如表2所示，使用多实例并行、配置AI Core控核策略，开启批量H2D传输技术；参考Profiling性能数据采集开启Profiling性能数据采集功能。


**表2 批量H2D-多实例-控核用例配置**

| 推理次数 | BatchSize | 多实例并行 | AI Core控核 | 批量H2D |
| --- | --- | --- | --- | --- |
| 10000 | 5096 | 6 | 8\|8 | true |


结果验证如下：

- 数据搬运
  启用批量数据搬运机制，将多个输入数据合并为单次H2D操作，单次推理数据搬运次数显著降低（28 -->2），数据搬运耗时占比降低（53.6% -->10.4%，0.398185/3.820395），详细数据请参见图4。

  图4 启用批量数据搬运Profiling数据分析

- 内核粒度不足，算子调度间隙
  通过合理的并行和控核，可以抹掉算子间隙，通过增大BatchSize改善算子粒度，提高调度密度，减少调度开销占比，空泡数量降低81.3%（对比图3中的Free空闲次数539998），资源利用率提升至72%（计算时间/总时间=4390.608297/6086.974405），详细数据请参见图6。

  图5 增大BatchSize改善算子粒度

  图6 空泡和资源利用率
