如何基于CANN进行训练优化
随着深度学习领域带来的技术性突破,人工智能(artificial intelligence,AI)无论在科研还是在产业应用方面都取得了快速的发展。人工智能算法一般以深度学习算法为主,需要大量的矩阵乘加运算,对大规模并行计算能力有很高的要求,CPU和传统计算架构无法满足对于并行计算能力的需求,需要特殊定制的芯片,也就孕育了AI芯片。
AI芯片当前的核心是利用乘加计算(multiplier and accumulation,MAC)阵列来实现卷积神经网络中最主要的卷积运算的加速。MAC阵列的大量运算,会造成功耗的增加,如何达到优异的性能功耗比是AI芯片研发的一个重要目标。
深度学习算法中参与计算的数据和模型参数很多,数据量庞大,导致内存带宽成为了整个系统的一个瓶颈“,Memory Wall”也是需要优化和突破的主要问题。
除了芯片本身硬件的设计以外,软件对于AI芯片性能的发挥也有着十分重要的作用,编译器和工具链软件的优化能力、易用性现在也得到越来越多的重视。
CANN就是解决上述人工智能算法关键问题而存在的,集框架、调度、编译器、算子等模块于一身块,充分释放Ascend系列AI芯片澎湃算力;
人工智能算法有数据集标注、模型搭建、模型训练、模型推理几个重要过程,模型训练;而模型训练是最为关键的一部,其定义是“对大量的数据在平台上进行学习,并形成具备特定功能的神经网络模型”,可以这么理解,通过海量数据集来解一个方程y=wx参数为N维w,求解是一个不断拟合过程,不是我们常用的直接求解;
模型训练的顶层是算法设计,诸如上期所说的Resnet50网络,大家习惯使用TensorFlow、Pytorch框架,当然你也可以使用MIndspore(晟思)框架。在Ascend硬件平台下,框架层之下就是CANN软件栈了,通过adapter层适配,将模型训练的拟合计算过程运行在AI芯片上。想了解具体适配迁移过程的,请参考我们昇腾社区相关内容;
接下来,我们讲讲CANN软件栈上如何进行训练性能分析和优化。上一期我们了解了进行Host与Device并行对性能的巨大收益,也是性能提升的关键所在;那么如何基于CANN进行各种并行优化呢?
首先你需要输出一份这样的profiling文件,来识别你训练网络的性能瓶颈;
从这个网络的性能打点图上看,会发现:
1、左侧开始的时候又一段空白什么也没有执行计算,看下前后算子逻辑你就会发现是数据预处理更不上device的时间了,这个时候我们应该采取的措施就是优化Host侧的数据预处理,采用训练循环下成方式,使用pretch方式把Host部分过程转移到device-CPU上执行,来平衡两者并行度;
2、在最后有一段AR_1的梯度交互是单独执行的,这里就是HCCL未并行的部分,那优化措施自然就是采用自动梯度切分工具,搜索到与计算并行度更高的切分点;
3、当训练模型涉及CPU算子执行时,CANN提供了device侧的AICPU引擎,让数据留在device侧就能实现复杂逻辑的cpu算子计算,同时呢还能和张量核心并行起来;例如模型有dropout操作时,CANN提供了npu_ops.dropout()接口;
4、随着CANN包含算子个数不断累积,已经支持超过2000个算子,而且提供了丰富的融合算子原型,使得卷积计算和向量计算并行流水更丰富,Ascend 系列芯片中的CUBE和VectorCore利用效率大大提升;融合算子的被使能,有两种途径,一个是通过npu_ops的API,另外就是算子融合技术,在Ascend910平台下,我们更多是使用CANN版本自带的算子融合技术;
5、除了完成训练任务在执行器上的最大限度并行,CANN提供了一套完备的混合精度模式,保证整网精度的同时,通过降低数据量来提升训练性能;
6、针对不同类型的训练模型,CANN十八般武艺,面面俱到;如上一期说的resnet50,典型的CANN网络,对卷积正则化层的性能要求非常高,我们的应对策略自然是提升CUBE利用率,保证Ascend910-256T算子的最大发挥。
上面说到的训练性能分析和优化点,对于各种类型的网络都是有普适性的;而针对具体的网络结构也会有不同的优化措施,CANN也提供不同的性能优化模块;
- 点赞
- 收藏
- 关注作者
评论(0)