昇腾社区首页
中文
注册
开发者
下载

推理调优案例

案例介绍

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

  • AI Core控核:通过配置options参数说明中的“ge.aicoreNum”参数,配置算子编译时使用的AI Core核数。
  • 批量H2D:通过调用acl接口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 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 空泡和资源利用率