作者及发刊详情
J. Jang, Y. Kim, J. Lee and J. -J. Kim, “FIGNA: Integer Unit-Based Accelerator Design for FP-INT GEMM Preserving Numerical Accuracy,” 2024 IEEE International Symposium on High-Performance Computer Architecture (HPCA), Edinburgh, United Kingdom, 2024, pp. 760-773, doi: 10.1109/HPCA57654.2024.00064.
keywords: {Training;Quantization (signal);Computational modeling;Neural networks;Computer architecture;Hardware;Energy efficiency;FP-INT GEMM;Numerical Accuracy;Weight Only Quantization;NPU},
Motivation
权重参数精度的降低可以减少访存占用,但因为FP-INT乘累加的存在,INT数据需要反量化为FP数据,计算性能并没有显著提高
Related work
BFP
BFP一个数据块的数据共享一个指数。例如一个数据块有6个数据,则开7个空间,前六个放数据,后一个放指数;指数用的是此数据块中最大值归一化后的指数,其余5个数按此指数存放二进制数;
Contribution
主要贡献:
1)算法:提出了基于整数的FP-INT GEMM计算模式,伴随这软件透明优化,包括prealigned的尾数截断和基于chunk的尾数分配
2)创新:通过理论分析,仔细设计了量化截断量,并引入了无0的INT格式,以确保该方法保持了传统FP算法的数值精度
3)硬件:介绍了一种新的FIGNA体系结构,专门用于处理基于整数的FP-INT GEMM。FIGNA利用了简单整数单元计算实现了实质性的性能增强。
硬件架构
整体架构
如fig11所示时FIGNA的整体架构。首先prealigner将FP激活转换成整型数据,然后chunk分配器在prealigned后的整型数据中选择有效的chunk;数据启动器确保输入数据正确填充到矩阵计算单元(mxu,2D的脉动阵列架构)中,2D权重矩阵存储在mxu中每个PE的寄存器中,激活向量与每一列PE进行乘累加求内积计算,直到最后一个PE输出;在mxu的最后有int2fp模块将整形计算结果转换为FP类型。
当输入向量维度超过mxu的行数时,输入向量将被分成几个子向量填充到mxu中,最后又accumulator进行几个内积结果的累加。
actsum和reformer模块用于支持补码INT格式数据和无0有符号INT格式数据间的转换。
片上buffer可分为三种类型:unified buffer负责缓冲输入和输出数据;weight buffer专门用于存储权重值,而accum buffer用于存储计算过程中生成的部分和。
如下Fig7所示时prealigner和int2fp模块的微架构:
prealigner:对齐尾数尺度,并转换为特定位宽的INT数据
prealigner将FP转换INT类型。该部件分解每个FP数的指数和尾数,并处理预对齐过程,动态地对齐FP激活的尾数,最终所有整数值共享一个共同的最大指数,以此可以表示FP激活。
步骤:
- 当prealigner分解FP数时,它通过将浮点数隐藏的首1与小数拼接来获取尾数。
- 该部件通过检测指数值是0来判断FP数是否低于正常值,如果低于正常值,则没有首1,小数直接作为尾数。通过sub模块实现
- 然后prealigner识别FP激活矩阵内单个向量中的最大指数,并基于元素本身指数和最大指数调整FP激活的尾数,确保所有尾数都保持统一尺度。该过程通过shift模块偏移尾数,实现尺度对齐
- 通过2’s模块用于求补码
- 将最大指数作为向量的共享指数,并输出给int2fp模块。与BFP不同的是,BFP中共享指数是数值格式中组成部分,而本设计中共享指数是动态调整的,是计算的中间结果,对用户不可见。
chunk分配器
根据数学证明,当激活数据是FP32时,尾数需要24bit,prealigned的尾数需要34bit( p f p 32 + n + 2 p_{fp32}+n+2 pfp32