【CANN训练营】CANN训练营_昇腾AI趣味应用实现AI趣味应用(下)随笔
承接上文《【CANN训练营】CANN训练营_昇腾AI趣味应用实现AI趣味应用(上)随笔》,我们接着来分析。
先来介绍下npu-smi
工具,其功能类似于英伟达的nvidia-smi
都是用来查看硬件状态和信息的,不同的是nvidia-smi
是用来查看显卡信息的,npu-smi
是用来查看昇腾处理器信息的,这里就是我们用到的Ascend 310。
通过这个命令可以实时查看昇腾处理器的信息,进行数据监控。还记得我们上次最后留了一个开放性问题吗?就是进行优化加速,因为之前除了模型处理外,余下操作基本是使用OpenCV等调用CPU完成,这里我们有很多可以加速的地方,将一些操作使用专用硬件电路来加速处理,从而实现性能的优化,下面来一一介绍。
DVPP
AIPP
AIPP是DVPP的补充和完善,更好地完成数据的处理,实现性能加速。
优化提升
优化提升,从本质上来,就是在实现基础功能的基础上,最大程度发挥硬件算力,从而实现性能的提升。一方面是要做亲和硬件的操作,这需要熟悉硬件特性,另一方面是找到当前性能瓶颈,针对性解决瓶颈,这样才是高效的工作方法,抓大放小,抓主要矛盾,不要过分注意那些细枝末节。
从本Demo,主要是分析数据预处理,模型推理和后处理三方面的性能问题,分别进行优化提升,下面一一分析。
数据预处理
介绍了这么多,来看看如何在我们这个项目上进行加速,具体介绍如下图所示:
如上图所示的橙色和黄色部分,就是我们可以用DVPP或AIPP来加速的。
其实,就是分析整个推理过程,查看哪些操作可以有专用硬件来代替,专用硬件电路要比CPU实现更加高效和快速,从而实现加速。
得益于acllite做了封装,使用DVPP和AIPP来加速还是比较简单的,来看下如下的示意图:
如果你希望了解更加详细的细节和底层的接口,可以到官仓查案acllite的代码和示例,我们这里是直接使用了。
后处理
后处理可以固定输出图片尺寸,从而实现性能提升,因为动态的过于灵活,对性能会有损失。其实,我们还可以将后处理做成单算子 + DVPP的操作,用硬件来取代当前的软件操作,应该能有很大的性能提升。
模型推理
前面都是数据处理方面,而模型推理本身还没有做性能优化,下面来看看对模型推理做优化,那就要对模型“下手”了。目前主要的方法是通过AMCT量化,其实质就是降低计算量,从我们朴素的思想来看,需要计算的少了,性能自然就提升了。
具体操作步骤如下,不过对于这个模型影响不大,可以不考虑。
其他调优方法
- Tuning调优
- AOE调优
- 多Batch
简单来说,就是一次推理多张图片,相比于之前,一次只推理了一张图片,我们一次推理的多了,一般来讲能提升性能。但也不一定,因为如果模型本身在推理一张的时候,就已经占用了很多资源,多Batch可能提升不大,甚至可能因为数据量增加,带来数据搬运或切分的额外损失,就得不偿失了,但一般会有收获,值得一试。
- 多线程
多线程加速应用广泛,适用范围很广,也适用于这里,一般是在硬件算力未能充分发挥的情况下,比如NPU的AI Core的利用率一直在20%左右,我们就可以考虑开启多线程加速,提高AI Core的利用率,从而提升性能。
下图是多线程处理视频文件的加速思路:
结语
总的来说,调优是最大程度发挥或者说压榨硬件性能,使得硬件利用率很高,实现性能的提升。调优是要具体问题具体分析的,思路大同小异,但具体做法却千差万别,要多积累,多分析,勤做记录和交流,才能有所收获。
最后宣传一波这次的活动,上图:
- 点赞
- 收藏
- 关注作者
评论(0)