当前位置: 首页 > 科技观察

网络性能总是不好?专家帮你“看一看”——升腾AI黑科技-网络调优专家AOE,性能效率翻倍

时间:2023-03-19 17:09:10 科技观察

随着深度学习模型复杂度和数据集规模的增加,计算效率的提升成为不可忽视的问题。然而,算法网络的多样性、输入数据的不确定性、硬件之间的差异,使得网络调优成本巨大,即使是经验丰富的专家,也需要数天时间。CANN(ComputeArchitectureforNeuralNetworks)是华为针对AI场景推出的异构计算架构。支持多种AI框架,服务于AI处理器和编程。平台的核心。为了在提升网络性能的同时降低人工调优的巨大成本,CANN推出了自动化网络调优工具AOE(AscendOptimizationEngine),不断迭代,最终得到最优的调优策略,从而在网络上获得最佳的网络性能。人工智能硬件。以ResNet50推理网络为例,AOE调优后网络性能提升100%以上,调优时间不到30分钟。对于网络模型,AOE分别提供算子调优、子图调优和梯度调优的功能。其中,算子优化主要优化算子调度(Schedule),使升腾AI处理器的多级缓存与计算单元形成高效的流水线并发作业流,充分释放硬件算力;子图优化,通过智能数据切分策略提高缓存利用率,从而大大提高计算效率;梯度优化主要应用于集群训练场景,通过自动寻找最优的梯度分割策略,减少通信拖尾时间,从而提高集群训练性能。同时,AOE能够支持多种主流开源框架,充分满足不同开发者在训练和推理场景下的网络性能调优需求。算子调优,提高计算节点执行效率1.强化学习生成Vector算子的最优调度策略计算组件由调度承载,映射到硬件行为的一个小调度操作可能会产生巨大的差异。为了提高网络性能,需要在指定设备上为给定网络开发一套专属的调度逻辑。网络的组成单位是运营商,找到运营商执行的最优调度策略是提高网络性能的关键。升腾AI处理器的核心计算单元是AICore。运行在AICore上的算子可以分为两种:Vector和Cube。Vector算子主要负责进行向量运算,Cube算子主要负责进行矩阵运算。.对于Vector算子,CANN采用RL强化学习(ReinforcementLearning)搜索框架,将算子调度过程抽象为基于MCTS蒙特卡洛树搜索(MonteCarloTreeSearch)的决策链,并模拟人工决策,然后通过不断与环境交互,获取性能数据,作为反馈值,指导下一步的决策。通过这种方法,逐步改进自身的行为,最终得到算子执行对应的完整最优调度策略。AOE调优后,Vector算子的平均性能较调优前提升10%以上。平均调优时间仅为200s,效率和性能都有了很大的提升。2.遗传算法,提高Cube算子搜索效率我们知道,深度学习网络中包含大量的矩阵乘法计算,而这部分计算是由AscendAI处理器中的Cube算力承担的,因此Cube算子被用作重算子在网络中具有更大的影响力权重,因此Cube算子的性能提升将为整个网络的性能带来更大的收益。通过强化学习模型的搜索,我们已经可以解放人力去优化Vector型算子,因为Vector算子的计算缓冲区是单一的,而调度算法可以基于各种Schedule原语为算子构建完整的调度策略.Cube算子涉及多个片上缓冲区之间的数据交互。如果采用与Vector算子相同的优化方式,最终可能会因为搜索空间过大而导致搜索效率低下,搜索策略不佳。对于Cube算子,AOE基于Schedule模板,利用GA遗传算法(GeneticAlgorithm)对影响最大的Schedule原语参数进行多轮调优,通过选择、交叉、变异得到候选Tiling集。根据在真实环境中编译和执行的性能反馈数据,对候选策略进行排序,得到最优策略。以卷积算子为例,如果手动调优,一个算子优化专家需要两天时间;如果采用AOE智能调优,平均只需3分钟即可达到相同甚至更好的性能优化效果,极大地节省了人力成本!子图调优,获得更智能的数据分割算子调优,让网络性能有了相当大的提升,但AOE并不止于此。AOE在更宏观的粒度上增加了子图调优,以实现更智能的数据分割。深度学习模型的计算往往具有较大的数据吞吐量,数据的读写往往成为网络性能的瓶颈。因此,提高缓存利用率成为优化计算效率的关键手段。升腾AI处理器内置高速缓存,降低外部存储器访问带宽压力。但由于特征图(FeatureMap)和模型参数的数据量巨大,算子计算过程中的缓存命中率会较低,影响网络计算效率。为了更好的提高缓存命中率,AOE引入了子图调优的概念。子图优化,基于算子分割的数学等价原理,根据硬件缓存大小、算子形状等信息,将网络模型中的算子划分为多个算子,然后对划分后的算子进行排序,通过获取最优的性能反馈,确定计算图切分策略和执行顺序。这样就可以将一次性的数据流计算分解为多次执行。在分解后的数据流分支上,数据大小较之前呈指数级减小,从而实现缓存命中率的大幅提升。最终,在operatortuning和subgraphtuning的共同作用下,使用AOE进行性能调优后,主流推理网络的平均性能提升了30%以上。以ResNet50推理网络为例,性能较调优前提升100%以上,全网调优不到30分钟。梯度调优提升集群训练性能在大规模集群训练场景中,存在计算节点多、梯度聚合过程复杂、通信开销高等痛点。如何在一定程度上更好地覆盖梯度聚合过程和计算过程,使整个过程能够保证更好的线性度,也是性能提升的关键问题。为此,AOE引入了梯度优化的功能。通过智能梯度分割算法,自动搜索最优梯度参数分割方式,选择合适的通信时机和通信量进行梯度传输,最大化计算和通信的并行性。这样,通信拖尾时间最小化,集群训练达到最优性能。与手动调整梯度聚合数据量相比,自动梯度调整可以将梯度聚合数据的参数调整时间从几天缩短到几十分钟,一举获得最优聚合策略,减少手动参数的不确定性调整。AOE通过调优知识库记录模型调优经验,使模型聚合策略能够动态适应不同的集群规模。AOE调优后,主流训练网络在升腾AI处理器上的执行性能较调优前平均提升了20%以上。以ResNet50训练网络为例,性能较调优前提升23%,全网调优耗时不到2H。写在最后CANN,升腾异构计算架构,一直致力于提供“开放、易用、极致性能”的AI开发体验,不断降低AI开发的门槛和成本。CANN提供的Ascend调优引擎AOE克服了传统调优方式耗时长、泛化性差、维护成本高等影响开发效率和可用性的缺点,为AI开发者提供更智能的性能优化方式。有梦为马,未来可期。相信通过CANN的不断创新和不断演进,将进一步释放AI硬件澎湃的算力,加速AI应用场景的落地,共同构建智能世界。