道(带宽)就会堵死;精度低了,计算结果就不准,模型就会变傻。
“李工,全精度浮点数FP32方案的仿真结果出来了。”
一位负责微架构的博士指着屏幕上的数据,面色凝重,“虽然计算准确率完美。大量的数据堵在路上,计算单元有一半时间在空转。”
片上缓存就象是芯片内部的“临时仓库”,离计算内核最近,速度最快。如果仓库太小,或者数据太大塞不进去,计算内核就得停下来等数据从外面运进来,效率会大打折扣。
李工看着数据,眉头紧锁。SLRM模型中,每一个逻辑概念都是一个高维空间中的“盒子”。推理过程,就是成千上万个盒子在空间中不断求交集、求并集。这些“盒子”的数据量太大了。
“我们必须压缩数据。”李工沉声道,“但在哪里压?怎么压?”
会议室里,几位内核骨干围坐在白板前,展开了激烈的讨论。
“试试量化?转成8位整数INT8?”有人提议。
“不行。”另一位算法专家立刻反驳,“SLRM的内核是计算盒子的体积,这代表概率。体积计算需要连乘,连乘对精度非常敏感。INT8的精度不够,连乘几次误差就飞了。”
讨论陷入了短暂的僵局。
这时,一直盯着徐辰论文推导过程的一位资深工程师
“大家看,”他指着公式说道,“徐辰在论文里提到,为了数值稳定性,概率计算最好在对数域进行。”
“对数域……”李工若有所思,“在对数域里,乘法会变成加法,除法会变成减法。”
“没错!”那位工程师接着推演,“如果我们让LPU内部的所有数据,从输入那一刻起,就全部转换为对数形式存储和传输呢?”
众人的眼睛逐渐亮了起来。这不是灵光一闪,而是顺着数学逻辑推导出的必然方向。
“在对数域下,数据的动态范围会极大压缩。”李工迅速在脑海中构建架构图,“原本需要32位浮点数才能表示的概率值,在对数域下,可能只需要16位甚至更少的定点数就能表示,而且精度损失极小。”
“不仅如此,”另一位硬件专家补充道,“加法器的电路面积和功耗,远小于乘法器。如果我们把内核计算全变成了加减法,那就能省下大量的晶体管,用来堆更多的内核!”
“唯一的难点是Guel-Softplus算子,它需要非线性变换。”
“查表法。”李工当机立断,“神威的异构核正好擅长做这个。
十分钟后,结果出炉。
“误差小于1e-5!完全在SLRM的鲁棒性范围内!”
“好!”李工猛地一拍桌子,“就定这个架构!全对数域数据流。
“准备打包RTL代码。”李工下达了指令,“通知深圳那边,前端设计已经封版,可以开始物理综合了。”
……