专栏名称: GiantPandaLLM
专注于机器学习、深度学习、计算机视觉、图像处理等多个方向技术分享。团队由一群热爱技术且热衷于分享的小伙伴组成。我们坚持原创,每天一到两篇原创技术分享。希望在传播知识、分享知识的同时能够启发你,大家一起共同进步(・ω<)☆
目录
相关文章推荐
GiantPandaLLM  ·  【博客转载】Row-Major VS ... ·  9 小时前  
GiantPandaLLM  ·  【博客转载】CUDA Coalesced ... ·  2 天前  
GiantPandaLLM  ·  【博客转载】C++/CUDA Data ... ·  3 天前  
GiantPandaLLM  ·  【博客转载】CUDA Kernel ... ·  4 天前  
51好读  ›  专栏  ›  GiantPandaLLM

AWQ:模型量化应当关注激活值

GiantPandaLLM  · 公众号  · 3D  · 2024-12-25 19:16

正文

请到「今天看啥」查看全文


3. PTQ 在模型训练完成后直接对模型进行量化的方法,它不涉及模型的再训练或优化。通常在模型部署前,使用少量校准数据来调整模型的量化参数。PTQ 相对高效,但是精度损失显著。一般而言,PTQ 更常见。

4. 与 AWQ 最接近的方法是 GPTQ(Accurate Post-Training Quantization for Generative Pre-trained Transformers):使用二阶信息来执行误差补偿。GPTQ 可能会在重构过程中对校准集(calibration set)产生过拟合问题,从而在 out-of-distribution domains 上精度暴跌。此外,GPTQ 需要对某些模型进行重新排序(reordering),这在硬件实现上较为复杂。也正是因为 reorder 的问题,GPTQ 可能难以维持模型的 generalize 能力,更何谈 multi-modal。

GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers (https://arxiv.org/abs/2210.17323)

5. 作者观察到,参数的重要程度不尽相同。存在极少量(0.1%~1%)的参数有显著作用(salient),对这些参数不进行量化能够显著减轻精度损失。作者指出,应该通过模型的激活值而非直接通过模型的参数去决定那部分参数是显著的。即便我们只进行 weight only quantization,关联到更大激活值的参数才是显著的。扩大保留的 salient 参数的比例能够有效减少精度损失。基于此,作者实现了 per-channel scaling method 来搜索到最佳的 salient 参数比例。AWQ 避免了硬件效率低下的混合精度实现,并保持了良好的模型泛化能力(甚至第一次实现了跨模态的量化),无需反向传播或重构。

在物理实现上,作者开发了 TinyChat 框架:

To implement AWQ, we designed TinyChat, an efficient inference framework to convert theoretical memory savings from 4-bit LLM to measured speedup. Our framework significantly speeds up linear layers through on-the-fly dequantization. We also take advantage of efficient 4-bit weight packing and kernel fusion to minimize the inference overhead (e.g., intermediate DRAM access and kernel launch overhead), such that we can better realize the speed up from quantizing the weights to 4-bit, despite the computer is byte-aligned.

这里对一些名词进行阐述。

6. 通过实时解量化(on-the-fly dequantization),AWQ 框架(也即原文中实现的 TinyChat 框架)显著提高了线性层的推理速度:在推理过程中实时将低位量化的权重转换回高精度格式(如 FP16),而不必将解量化后的权重写入内存。通过将解量化操作与矩阵乘法等计算核混合,减少了中间数据的内存访问,提升了计算效率。

7. 4-bit weight packing:将多个 4 位权重打包到一个字节或更大的单元中,从而优化内存带宽。







请到「今天看啥」查看全文