在芯片相关的产品和设计中,我们经常能听到各种类型的处理器,比如APU、BPU、CPU、GPU、NPU、TPU等,这让刚入门的工程师眼花缭乱。本期干货分享,我们邀请到爱芯AI技术专家刘哥,针对NPU的技术原理进行讲解。
几种常见的“U”
关于各种“U”,举一些常见例子:
- CPU:X86的处理器,买电脑时听到的i5、i7。手机SoC里面的几核ARM处理器等;
- GPU:游戏显卡,手机内嵌GPU等;
- TPU:用来做向量计算加速;
- NPU:神经网络处理器。
NPU是为了神经网络计算而出现的
为什么我们需要一款专门为神经网络计算而设计的加速器呢?根据OpenAI发布的一项报告显示,近年来神经网络所需要的计算量正在呈指数上升。随着急速增加的计算量,神经网络复杂程度也在不断增加。神经网络的计算还涉及到一个混合精度的概念——混合精度就是将不同精度的浮点数/定点进行数值计算。
神经网络示意图(简化版)
如上图所示,其每一数列被称为一个layer层,最左边的是输入层,最右边的是输出层,中间的部分是隐藏层。图中的每个圆圈代表一个神经元,每一个神经元上都有很多链接,链接上的数字是权重,它是参与计算的重要组成。如果权重是小数的话,则代表着其为浮点数,而在真正的AI应用中,可以用定点数来代替。
NPU参与神经网络计算的两个阶段:模型训练和模型部
AI应用落地5大步骤:
确认场景目的→数据采集→模型训练→模型转换评估→模型部署应用
- 首先是确认场景目的,这个步骤是为了明确应用任务。以猪脸识别项目为例,该项目待解决的问题是生猪保险,应用场景是整个养殖场,目的是通过猪脸识别确认每一头猪的身份。明确场景和目的后,就可以有针对性地做数据采集。
- 数据采集,把真实场景以图像的形式收集起来,获取数据特征,以供后续训练需要。
- 数据采集之后就进入到模型训练的阶段。但在开始训练之前,需要对数据进行增广,该步骤是基于真实数据进行数据处理,使数据特征更具更多样性。而训练的过程也可以简单理解为确定神经网络图上的权重参数值的过程。
- 模型训练完就会进入模型转换评估阶段,也就是将训练时使用的浮点数转换为可以在部署落地场景时用到的定点数。当然也存在另一类方法,就是直接把数值按照定点数的方式来训练,这种训练方式叫做QAT。而在模型转换之后还有一个评估过程,这是为了确认在浮点数转换为点数过程中的误差影响。结束模型训练后,就进入了模型的部署应用步骤。
- 纵观整个AI应用部署过程,NPU在其中的作用主要集中在模型训练和部署两个阶段。在训练阶段,主要是负责神经网络数值计算,这个阶段也可以由GPU或者TPU来完成。而在模型部署阶段则需要通过NPU来运行神经网络并加速其中的计算。
爱芯的混合精度NPU有什么特点?
爱芯的NPU主要是在端侧和边缘侧AI应用中起作用。在端侧/边缘侧的应用中,需要重点考虑成本因素。在整个神经网络中,权重系数比较复杂,运算量繁重。但在实际应用中可以发现,其中有的信息是有冗余的,这意味着并不是所有的计算都需要高精度的浮点或是高精度的16比特,而是采用8比特或者4比特等低精度混合运算就足够了。在AI-ISP应用中,就是基于混合精度的,网络中许多中间层都是采用INT4精度。
而爱芯强调端侧的NPU,也主要是服务于应用。在早期开始尝试在端侧AI芯片中做NPU设计时,无法确定NPU的性能,因此采用堆料的方式来标称AI的能力,但在实际应用中NPU的利用率并不高,且成本巨大。
因此在设计时,工程师需要考虑以下几个问题,以在成本、性能和功耗三个方面实现突破:
- 如何在提高芯片利用率的同时降低成本;
- 处理NPU和场景的耦合关系,如何在定制和通用性之间做Trade-off;
- 兼顾NPU硬件和软件开发,加快AI开发落地效率。
基于以上的几个问题,爱芯采用全栈式优化的设计方法。首先在性能方面,爱芯要从应用到算法再到NPU做联合优化,这一步的目的是让应用、算法和NPU三者之间建立弱耦合关系,使其既可以独立进行开发迭代,同时,其中存在的一些耦合通路也允许用户从应用、算法、NPU三个方面共同提升性能。所以在NPU设计时,不仅要保证这三方面的接口独立,也要提供耦合优化的方式,以达到全方位性能优化的目的。
此外,为了提高终端客户的开发效率,增加客户易用性,爱芯准备了丰富的demo,以供用户参考。并且提供多层次的接入方式,满足开发者的不同需求。
整体来讲,整个AI视觉芯片或者整个NPU的应用非常广泛。将NPU神经网络与摄像头结合在一起,可以成为一个数字化感知单元,它可以覆盖我们眼睛可以看到的所有地方,例如智能穿戴、自动驾驶、智能家居、智慧社区、智慧城市、智能制造爱押等。