http://arxiv.org/abs/2305.14314 Quantization + LoRA,了解一下呢。 LoRA之前写过博客了,这里主要想说一些如何与量化结合起来,以及用到的一些新的tech 当然像分页优化这种就掠过了...需要用到Nvidia统一内存去做内存/GPU交换,cuda编程不会捏,感兴趣可以看论文附的链接https://docs.nvidia.com/cuda/cuda-c-programming-guide/ 4-bit NormalFloat(NF4) 之前谈量化说到INT8/INT4,是把浮点数量化成定点数。量化操作一般是除去一个量化因子$s = \frac {2^{N-1}} {ABSMAX}$,这个其实潜在地假设了数据满足的是均匀分布,实际上LLM权重满足的是一个正态分布。 那么NF4就把概率作为量化间隔,而不是把实际的数值差作为量化间隔。看以下这个图就明白了。p满足等差数列,而X明显不满足,越近0,X的分布越密集。 图源 https://zhuanlan.zhihu.com/p/654967425 这个时候把X归一化到到[-1,1],得到
挺有意思的一篇论文 Stealing Part of a Production Language Model(arxiv2403.06634),给出了一种通过black-box API查询来恢复LLM投影矩阵的方法。实际意义嘛...可以拿来蒸馏?但是成本还挺高的( 同期工作 Logits of API-Protected LLMs Leak Proprietary Information arxiv/2403.09539 简单讲一下Algorithm 1(其他的看不懂 这里假设攻击者的能力是可以拿到LLM的Logit-Vector API,也就意味着可以拿到每个token对应的logits,注意这里还没有过softmax,所以算法里没有考虑softmax的影响。这个假设其实很强,之后会慢慢放开到目前商用的API。 假设LLM的hidden-dim是$h$,词表大小是$l$。那么我们可以假设一个$n$,也就是查询API的次数,我们希望它比$h$要大。每次查询,我们输入LLM随机的前缀作为Prompt,那么我们会拿到一个长为$l$的logit-vector。 虽然论文里没讲,但这里
为什么开始看量化了,我也不知道 量化原理 我们一般谈LLM的精度,会涉及到FP32,FP16,BF16,INT8,INT4等字样。这些字段确定了LLM中一个参数所占的内存空间(如FP32指4字节浮点数,FP16和BF16指2字节浮点数,其中BF具有更多的指数位,INT8/4分别占8/4个比特)。其中INT8/4就涉及了模型量化,一个浮点数如何量化成一个定点数,这是量化干的最基本的事儿。 最直观的想法就是一组浮点数除去他们的ABS MAX,这些参数就落在了[-1,1]之间,然后根据量化位数N的不同乘以对应的步长$2^{N-1}$,接下来得到的数就是量化结果啦。 但上面这个问题在于浮点数的分布不均时,量化空间会有所浪费,所以实际应用时会进行一定的截断。 量化结束后,这组浮点数(weight/activation)就以定点数的形式存了下来。那么如何利用量化后的权重/激活呢?我们知道量化的时候一个浮点数先除了一个ABS MAX,再乘了一个$2^{N-1}$,那么$2^{N-1}/MAX$就是一个$\Delta$,我们实际做运算的时候额外把这个数除一下就可以了,比如$WX = \frac {
6.824 Lab1 done!
写bug之前 得先学会debug(悲) Debugging by Pretty Printing
Axuanz
Updating as per fate.