概述
为什么需要自动性能调优
- AI计算芯片的计算过程需要精心排布才能充分利用算力
AI计算芯片通常由计算单元(多个)、片上存储、数据传输等模块组成。运行在其上的算子,耗时无法简单地用计算量除以算力获得,更要看各个组件间的协同情况。相同的计算任务部署在相同的计算芯片上,用不同的计算流水排布效率也会差别巨大。看似相近的计算输入可能要求的计算流水排布相差巨大。只有精心设计好的调度逻辑才能充分发挥硬件的算力。
- 组件间的pipeline需要精心设计才能达到最优性能
算子的理论最大性能是其瓶颈负载(计算、数据传输等)除以对应处理单元的效率。然而因为片上存储有限,一次计算任务通常会被切分成多片处理,这样就会产生计算或传输冗余,所以实际负载往往大于理论负载。相同的计算任务,用不同的计算流水排布方式其冗余度也会不同。通常会选择冗余较小的方案或将冗余转移到非瓶颈组件上。所以,为了达到最佳性能,需要合理地设计各组件的时序。
图6-1 不同时序效率对比 - 算子Schedule复杂,人工经验难全覆盖所有场景
在TBE中,计算组件间的Pipeline很大一部分由Schedule来承载。TVM为了提高其适用性,在Schedule到硬件行为之间还有很多其他处理层,一个很小的Schedule操作,具体到硬件行为上可能会差别巨大。而Schedule的可能情况很多,人的经验能力很难覆盖所有可能性。
下表为人工优化与自动优化的耗时及成本分析:
-
耗时
成本
人工优化
耗时长,耗时以天计数
需要有经验的专家投入
自动优化
耗时短,分钟级即可完成优化
主要消耗机器资源,人力成本低
综上所述,想让昇腾AI处理器上的算子性能达到最优,是一件很复杂的事情。人工的优化往往耗时多结果却不尽如人意,使用自动优化技术却可以充分利用机器资源来挖掘硬件性能。
Auto Tune工具作用
Auto Tune工具的作用就是充分利用硬件资源进行算子的自动调优。
用户在生成网络模型时,仅需要打开auto_tune_mode开关使能Auto Tune工具,就可以在算子编译时自动调用Auto Tune工具进行算子调优,调优后的结果会放在自定义知识库中,在后续调用相关算子时便可直接享受到调优后的算子性能。
Auto Tune工具当前版本仅支持使用DSL接口实现计算逻辑的AI Core算子的自动调优,支持的算子请参见算子列表。