随着机器学习(Machine Learning)领域越来越多地使用现场可编程闸阵列(FPGA)来加速推论(inference),传统FPGA只支援定点运算的瓶颈日益突显。为了解决这一困境,Achronix设计机器学习处理(Machine Learning Processing;MLP)单元,不仅支援浮点的乘加运算,还可以支援对多种定浮点数格式进行拆分。
MLP单元是由一组至多32个乘法器的阵列,以及一个加法树、累加器,以及四舍五入(rounding)/饱和(saturation)/常规化(normalize)功能区块。同时还包括2个快取,分别是一个BRAM72k和LRAM2k,用于独立或结合乘法器使用。MLP支援定点模式和浮点模式,对应以下图1和图2。
图1:定点模式下的MLP方块图
图2:浮点模式下的MLP方块图
考虑到运算功耗以及准确度的折衷,目前机器学习引擎中最常使用的运算格式是FP16和INT8,而Google Tensor Flow支援的BF16格式则是透过降低精度,以获取更大的数值空间。下面的表1是MLP支援的最大位宽浮点格式,表2说明各自的取值范围。
表1: MLP支援的最大位宽浮点格式
表2:不同运算格式的取值范围
而且这似乎也成为未来的一种趋势。目前已经有不少研究显示,更小位宽的浮点或整数可以在确保准确度的同时,还可以减少大量的计算量。因此,为了顺应这一潮流,MLP还支援将大位元宽乘法单元拆分成多个小位元宽乘法,包括整数和浮点数。如以下的表3。
值得注意的是,这里的BFloat16即脑浮点(Brain Float)格式,而Block Float为块浮点演算法,即当应用Block Float16及更低位宽块浮点格式时,指数位宽不变,小数位缩减到了16bit以内,因此浮点加法位宽变小,并且不需要使用浮点乘法单元,而是整数乘法和加法树即可,MLP的架构可以使这些格式下的运算能力倍增。
表3是Speedster7t系列1500元件所支援的典型格式运算能力比较,从表中可以看到,单晶片FPGA的浮点运算力最高可达到123TOPS。
表3: Achronix Speedster7t系列1500元件支援的典型格式运算能力比较
下图3是MLP中FP24/FP16乘加单元的简化结构图,即一个MLP支援FP24/FP16的AxB+CxD,或者AxB、CxD。
图3: MLP中FP24/FP16乘加单元的简化结构图。
而以下的图4则是块浮点乘加单元结构。
图4:块浮点乘加单元结构。
在此考虑浮点数序列块:
浮点数序列块:
各序列块内均拥有相同的指数ea和eb。则:
因此,不难看出,乘法单元的个数取决于尾数(即整数)位宽。
表4: MLP中乘法单元的个数与整数位宽之关系。