谷歌搞了个turboquant 算法,说能让大语言模型的内存占用直接砍成六分之一。其实你不用

谷歌最近搞了个TurboQuant算法,说能让大语言模型的内存占用直接砍成六分之一。其实你不用太懂这东西怎么运行,光看结果就知道,现在内存本来就紧俏得很。这次谷歌研究院直接把这个压缩算法拿出来了,主要目的就是在少占内存的前提下,还能跑得更快、结果还不差。他们把这个算法比作是个“数字小抄”,专门用来存那些关键信息,省得每次都要从头算一遍。大模型之所以能干活儿,说白了就是靠一堆向量在那映射语义含义。当两个向量长得差不多时,就意味着它们说的是一回事儿。要是向量维度高了,可能就得存几百几千个嵌入才能把事情讲清楚,像图片里的像素或者大数据集都得靠它们来描述。可这就有个问题,向量一多就特别占地方,缓存一下子就变大了,性能自然就上不去。 为了把模型变得更苗条些、效率更高些,开发者通常会用量化技术降低精度去跑模型。但这也会带来副作用——生成的Token估计质量会变差。不过好在有了TurboQuant,谷歌的初步实验结果挺亮眼,有的测试里性能提高了8倍,内存用量少了6倍,关键是还没怎么损失质量。 那这玩意儿到底咋搞出来的?其实也就是两步走的活儿。第一步是搞个叫PolarQuant的系统来干重活。通常AI里的向量都是用XYZ这种标准坐标来编码的,可PolarQuant却把它们转成了极坐标。这样一来,向量就简化成了两部分:半径代表核心数据有多强劲,方向则是讲清楚数据的具体含义。谷歌还拿走路的事儿打比方来说明这事儿。传统的做法可能是“向东走3个街区,再向北走4个街区”,但用了极坐标后,你就可以直接说“沿着37度的方向走5个街区”,这样占用的空间少了不说,系统在处理那些昂贵的数据标准化步骤时也轻松了不少。 PolarQuant负责把粗糙的东西给压缩掉后,第二步就是收拾剩下的那些残留误差了。虽然PolarQuant挺管用的,但总会有点小瑕疵。于是谷歌就用了一种叫量化Johnson-Lindenstrauss的技术来抹平这些误差。这东西其实就是在模型上加了一层1位的错误修正层,把每个向量直接缩减成单个位(要么是1要么是-1),同时还能保住那个用来描述关系的基本向量数据。最后算出来的注意力分数也就更准了——这可是神经网络决定哪些数据重要的大道理啊。 这些数学上的玩法到底管不管用?谷歌直接拿开源的Gemma和Mistral模型在一大堆长上下文的基准测试里试了试这套算法。结果发现TurboQuant在所有测试里都拿到了满分的下游效果,把键值缓存里的内存占用给少了6倍。最绝的是这个算法能把缓存量化到只有3位宽,根本不用额外训练一遍现成的模型就能用得上。 在英伟达H100那种加速器上算下来也很给力——用4位的TurboQuant去算注意力分数可比用32位没压缩的那个要快8倍多。要是真能把这套技术落地的话,跑AI模型的成本肯定得降下来不少;至于内存压力嘛也就没那么大了。不过也有一种说法是搞出这个技术的公司可能会拿省下的这些内存去跑更复杂的模型;这事儿怎么看都是鱼和熊掌兼得的样子吧?不过我觉得在移动端的AI应用上可能能看到更多实实在在的好处。毕竟现在手机的硬件限制摆在那儿呢;有了像TurboQuant这种压缩技术撑腰;咱们就能在本地直接提高输出质量了。