00:00
不做马上教程,只能讲知识的字。大家好,我是会识盖板你会唱歌的戴先生,同志们好,请问你们制腾过本地部署大模型吗?如果制腾过,应该都知道大名鼎鼎的olema吧,它之所以厉害是因为它背后有靠山,没错,就是今天的主角拉马点CBB。本地部署大模型意味着算力有限,算力有限就需要量化,那量化是什么呢?可以搜索近一期的视频了解一下。那么点CPP在量化算法优化这块下了不少的功夫,今天咱们就一起来探探拉马点CBP在量化上到底都有哪些优化?Let'SGO拉马点CBP的量化类型有不少,有iqu kqus等等,而kqus又可分为Q4KNQ5KN等等,这么多名词看着都犯困。
01:00
存作为技术男,性价比肯定是首位,那就挑一个最有代表性的。Q4KN用的最多,官方也默认推荐。那Q4KN各表示什么呢?Q4表示使用,是未来量化权重,K表示使用K框优化算法类型,N表示中等平衡的意思。具体都优化了啥呢?核心就两点,第一点,混合精度。大模型是一层一层叠起来的,深度学习中的深度俩字就是这么来的。如果每一层都用in式,那就是吃大锅饭了,一刀切,不管哪层更重要,通通一个待遇。咦,是不是有点像埋没人才的意思?没错,大锅饭养不出尖子参,好干的用在刀刃上,那怎么区别对待呢?给中右臣的一些关键蘸量,多分点精度呗。
02:00
比如5位或6位,张亮是啥?简单科普一下,说多就迟远了。张亮天使是数值和数值的通用旧法,数值就是标量,一维数组就是向量,二维数组就是矩阵等等。那大模型哪些城是更重要的?这些城的哪些张量是更关键?这又是另一个深度的话题了,就不展开了。顺嘴提一句,现在大模型基本都是全former架构,注意力层attention layer肯定算最重要的层之一,所以结论是大部分层的权重用4位的,像注意力层这种中右层的一些关键张量就给更多位精度,比如5位或6位,这就是混合精度。第二点更硬核,两级分组加双重量化,一听就很高级的样。
03:00
这里先简单回顾一下分组,简单理解就是把所有权重分成多个分组进行量化,也就是说不分组就是所有权重一起量化。那两级分组又是什么意思呢?把分行的分组内部再进行一次分组,不就两级了吗?第一次分组的组就超级快,Super block, 每个超级快包含256个权重参数,然后再在每个超级块内部再进行一次分组,分成8个指块,每个纸块包含32个权重参数,聪明的你肯定是听懂了,但我又问个问题了,为什么又这么干呢?直接按32个权重参数一组,你这分了不就完事了吗?这就有得说回量化原理了,不太熟悉量化原理的同学,你暂且可以用对称加密来简单理解,注意啊。
04:00
不一样的东西,只是借用了把A转成B,把B转为A这一相同特性来说明而已。对称加密是不是得有一个密钥来解密?那在量化中,密钥就是缩放因子和偏移量,密钥是需要存储的。我们先来算一笔账,假设有512个权重参数,按每32个权重参数一组分,一共有16个组,每个组要记两个密钥信息。假设都用FP16,那么所有密钥得用512位,而所有的权重参数如果按int式量化,也就4个512位,这模型不就又又又胖回去了吗?那你怎么处理呢?没错,把密钥也一并压缩了。这就是双重量化,它不直接用FP16纯齿块的密钥,而是把它们在量化。
05:00
乘6BIT的整数,但我们知道对权重参数量化需要权重参数密钥,那对权重参数密钥量化就需要权重参数密钥的密钥,那把它放在哪好呢?肯定是往上一级放式吧,那没有上一级怎么办呢?那就创造上一级,也就两级分组咯。结果就是每个超级快额外存两个高精度FP16的权重参数密钥的密钥,用来把那些6BIT的权重参数密钥还原回来,既保精度又压体积完美。那这样到底能省多少?用刚刚的示例再来算一笔账,512个权重参数按256个权重参数进行一级分组,一共有两个超级块,他们存放的所有权重参数密钥的密钥大小为64位,每个超级快按3。
06:00
12个权重参数,一组一组分,同样一共有16个纸块,所有纸块的权重参数密钥大小为192位,密柚总共消耗256位,对比刚刚只进行一级分组,512位的消耗足足节省了一半。简单捋一下,超级快存两个FP 16只快的只存两个6BIT,靠超级快这两把钥匙还原就是这个意思。总结一下,只怪分组小,精度保住了双重量化,又压住了元数据的体积膨胀,这就是平衡的艺术。在精度和体积之间找到那个性价比天花板,有没有感叹,多么精巧的设计啊,好了,又到了该说拜拜的时候了,拜拜。
我来说两句