大模型4位量化 (46)
4位量化
4位量化的情况开始变得更有意思。我们可选的量化数据类型不止一种,而是两种:FP4和NF4,分别代表浮点和归一化浮点。这种新的数据类型(NF4)是在QLoRA(量化LoRA;我们将在下一节中详细了解LoRA)论文中提出的。
“QLoRA是一种微调方法,它将模型量化至4位,并向模型中添加一组低秩适应(LoRA)权重,然后通过量化权重对其进行调优。除了标准的Float4数据类型(LinearFP4)外,该方法还引入了一种新的数据类型——4位归一化浮点(LinearNF4)。LinearNF4是适用于正态分布数据的量化数据类型,能够提升性能。”
如果选择使用这种方法对模型进行量化,还需应用BitsAndBytes配置中的其他一些参数和默认值:
- “bnb_4bit_quant_type”:“fp4”
- “bnb_4bit_use_double_quant”:False
- “bnb_4bit_compute_dtype”:torch.float32
- “bnb_4bit_quant_storage”:torch.uint8
此外,尽管命名欠佳,但仍可使用llm_int8_skip_modules参数,其作用与上一节中描述的完全一致。
使用所有默认选项是完全可行的,但自行选择参数可能仍会带来一些好处:
- nf4(归一化浮点)量化类型可提供更优的性能。
- 双重量化可用于对第一次量化得到的常数进行量化(本质上,这是嵌套量化)。据说这种方式每个参数可额外节省0.4位。
- 使用torch.bfloat16作