CANN/GE推理调优最佳实践案例
推理调优案例【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge案例介绍本节面向推荐模型的推理场景通过一个完整的代码示例结合推理阶段的Profiling数据分析并定位影响模型吞吐性能的关键瓶颈并给出相应的优化策略。内容涵盖多实例并行、AICore控核策略以及批量H2DHost-to-Device传输等技术的实现方法并介绍这些技术对推理吞吐性能的影响。其中AI Core控核通过配置算子编译与图编译中的“ge.aicoreNum”参数配置算子编译时使用的AI Core核数。批量H2D通过调用接口aclrtMemcpyBatch来实现批量内存复制功能。多实例并行通过多线程创建多个推理实例来提升系统并发处理能力。为量化评估不同特性对推理吞吐性能的影响本实验执行10,000次推理任务本样例模型输入数据为构造的随机值记录单次推理耗时及总时延、计算模型吞吐量TPS与平均时延ms。如下是Atlas A3 训练系列产品/Atlas A3 推理系列产品在不同配置下的吞吐量与时延表现|配置方案|BatchSize128|BatchSize256| |--|--|--| |单实例|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|以单实例BatchSize128为基准数据从上述表格可以看出批量H2D可以显著降低数据搬运开销单实例场景下吞吐量提升75.9%时延降低52.9%。多实例并行吞吐量提升至单实例的2.08倍但伴随时延增加41.7%。以多实例并行BatchSize128为基准数据从上述表格可以看出AI Core控核有效避免多实例并行时的资源竞争吞吐量提升19.5%时延下降13.9%。以多实例并行(4)AI Core控核(16|16)批量H2DBatchSize128为基准数据从上述表格可以看出增大BatchSize对调度密度优化效果显著256 BatchSize场景下吞吐量较128提升95.7%时延增幅7.9%。该特性仅在如下产品型号支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品分析瓶颈点基准用例配置如下表所示基准用例中使用单实例、不使用AI Core控核策略、不开启批量H2D传输技术参考Profiling性能数据采集开启Profiling性能数据采集功能。表 1基准用例配置|推理次数|BatchSize|多实例并行|AI Core控核|批量H2D| |--|--|--|--|--| |10000|128|1|不控制可用核数|不开启|数据搬运瓶颈基于Profiling数据分析单次推理前需执行多次28独立H2D数据搬运操作导致数据准备阶段NPU处于空闲状态整体数据搬运耗时占比显著53.6%0.740230/1.383355数据分析见下图所示。图 1单次推理profiling数据分析 内核粒度不足算子调度存在间隙算子执行时间很短1us-5us算子间存在依赖关系导致NPU在算子执行间隙产生细小空泡BubblesFree空闲次数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控核多策略叠加场景的推理效果验证。验证优化方案该场景配置如下表所示使用多实例并行、配置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启用批量数据搬运Profiling数据分析 内核粒度不足算子调度间隙通过合理的并行和控核可以抹掉算子间隙通过增大BatchSize改善算子粒度提高调度密度减少调度开销占比空泡数量降低81.3%对比图3中的Free空闲次数539998资源利用率提升至72%计算时间/总时间4390.608297/6086.974405详细数据请参见图6。图 5增大BatchSize改善算子粒度 图 6空泡和资源利用率 【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考