【小白设计AI芯片】(1) 神经网络中的舍入操作

        最近准备花时间整理一下自己在AI芯片项目中遇到的一些知识点,大多是一些基础知识的复习,供后续查阅和交流,也算是自己学习过程的记录。先从一些比较简单的开始,后续内容多了会再进行系统化整理。

        本篇文章先讨论一下神经网络中涉及的舍入操作,以及跟编程语言中基本的舍入(round)函数进行一下对比。

舍入场景

        一般神经网络算法包括训练和推理两部分,典型的涉及到舍入操作的场景有:

1.        训练过程由于精度要求多会采用浮点数据类型完成反向传播过程的计算,比如fp32, tf32, fp16, bf16等。由于芯片中的MAC单元位宽有限,不可能表示无限浮点精度,因此浮点的加法和乘法过程都要将浮点向有限尾数位宽进行舍入。

2.        推理过程大家常用的trick则是多使用定点或整数计算(如conv,pooling,fcnn等算子),只要实验结果精度下降可接受,便可成倍提升推理性能,这是因为芯片中不同数据类型的算力往往跟数据字节长度成反比。但也有一些非线性计算层需要浮点的计算,常见的比如一些激活函数(如sigmoid,tanh等)、softmax及Normalization等。因此在不同算子切换时,就必须支持浮点类型到定点(或整数)类型的舍入。

舍入模式

        有舍入便会有精度损失,甚至随着推理网络层的加深,精度误差会逐渐累积。为了减小舍入操作对推理结果的精度影响,ai芯片有时会支持多种舍入模型(round mode)供编程人员选择,常见模式如下表,这一点正如cpu对软件编程舍入模式的支持。从表中以2.5为例的舍入来看,不同舍入模式最终的结果会相差+/- 1。

Round ModeDescription
0TO ZERO

向0方向舍入。

e.g.int(2.5)=2, int(-2.5)=-2。

1OFF ZERO

远离0方向舍入。

e.g.int(2.5)=3, int(-2.5)=-3。

2UP

向上(正无穷方向)舍入。

e.g. ceil(2.5)=3, ceil(-2.5)=-2。

3DOWN

向下(负无穷方向)舍入。

e.g. floor(2.5)=2, floor(-2.5)=-3。

4ROUND

四舍六入,当尾数为.5时,远离0方向舍入。

e.g. round(2.4)=2, round(2.5)=3, round(2.6)=3;             round(-2.4)=-2,round(-2.5)=-3,round(-2.6)=-3。

5EVEN

四舍六入,当尾数为.5时,向偶数舍入。

e.g.round(2.4)=2, round(2.5)=2, round(2.6)=3; round(-2.4)=-2,round(-2.5)=-2,round(-2.6)=-3。

6ROUND TO MATH

先加0.5,再向下舍入(down)。

e.g.round(2.4)=2, round(2.5)=3, round(2.6)=3; round(-2.4)=-2,round(-2.5)=-2,round(-2.6)=-3。

与编程语言中的round函数对比 

        在一个AI芯片项目中,除了RTL语言,也会用到python和C++,因此有必要确认这两种语言中的round操作,以免出现AI芯片实际推理过程使用的舍入模式与软件建模时不一致。

1.        基于Pytorch、Tensorflow,python在神经网络模型搭建中非常方便,评估一个模型的推理精度,可以用python将推理过程先实现一遍。对于舍入场景,有时直接用round()函数,打印一下结果,可见其遵循“四舍六入五成双”原则,即与上表中舍入模式5一致。

>>> print(round(1.5))
2
>>> print(round(2.5))
2
>>> print(round(-1.5))
-2
>>> print(round(-2.5))
-2

2.        C++编程常用于使用cpu实现神经网络推理的过程,或者搭建AI芯片的模拟器(用于ESL建模或者验证)。当遇到舍入场景时,最常用std::round()函数,仍然可以打印或者查阅手册可知,其遵循“四舍六入,正数5向上舍入、负数5向下舍入(即远离0)”的规则,即与上表舍入模式4一致。

        以上就是关于舍入模式的小小总结,有的AI芯片中会支持更多舍入模式,如STOCHASTIC ROUND(根据与随机数的比较结果判断是否进位),编程中也可能遇到其他的舍入模式函数,如后续如果用到再来补充。

本文完。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值