大模型量化原理解析
《大型语言模型微调》回顾
在“长话短说”环节,我们加载了一个4位量化模型。我们简要讨论过,量化会将32位浮点数(FP32)转换为4位浮点数(NF4),从而将模型的内存占用量大致减少到原来的1/8。
听起来很棒,对吧?但这究竟是如何实现的呢?
简而言之的量化原理
答案用一个词概括就是:分箱(binning)。
别误会,我不是说把它们扔进垃圾桶(trash bin),而是指将每个FP32数字分配到对应的带索引的分箱中。
整体思路其实很简单,和制作直方图的原理大致相同:
- 确定FP32数字可能涵盖的范围。
- 将该范围平均划分为指定数量的分箱。
- 对于每个数字,确定它属于哪个分箱,并为其分配对应的分箱索引。
我们来看一个实际例子。假设你有1000个权重,范围在-0.2到0.2之间:
torch.manual_seed(11)
weights