ziwang-com / zero-lora

zero零训练llm调参

Home Page:http://www.m-f.vip

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

QLoRA 4 位量化

ziwang-com opened this issue · comments

ggerganov/llama.cpp#1595
将这种方法与美洲驼的量化进行比较会很有趣.cpp:

https://huggingface.co/blog/4bit-transformers-bitsandbytes

我们介绍了QLORA,这是一种高效的微调方法,可以减少内存使用量,足以在单个48GB GPU上微调65B参数模型,同时保留完整的16位微调任务性能。QLORA 通过冻结的 4 位量化预训练语言模型将梯度反向传播到低秩适配器 (LoRA)。

据我了解, 主要**是在 4 位量化后,在每一层使用 LoRA 微调模型, 将性能恢复到预量化水平.

这可能也可以应用于GGML量化模型 - 通过在GGML中进行实际的微调,或者通过在Python中训练并导出LoRA。

他们声称一些额外的技术有助于生成质量:

正常浮点量化

4 位 NormalFloat 量化 NormalFloat (NF) 数据类型建立在分位数量化
[15] 的基础上,这是一种信息理论上最优的数据类型,可确保每个量化箱具有
从输入张量分配的相同数量的值。

这听起来类似于@MarcioPaishttps://github.com/ggerganov/llama.cpp/issues/397#issuecomment-1520583296中尝试的内容,他们说:

然而,这根本不值得,因为非线性映射有助于RMSE和MAE,但基本上对改善困惑度没有任何作用,这是令人失望的。

有趣的是,该论文称这是一个明显的改进。我能想到的一些可能性:

分位数量化不是尝试的非线性映射之一ggerganov/llama.cpp#397
分位数量化不会直接帮助困惑, 但保留了 LoRA 可以使用的信息.
双重量化

ggerganov/llama.cpp#1256 中使用的超级块非常相似@ikawrakow。本文对每 64 个 4 位权重使用 8 位刻度值,对每 256 个 8 位刻度使用一个 32 位刻度值。

其他注意事项

它们没有显示 3 位量化的任何结果,似乎是显而易见的下一步。

答复:1 评论
注释选项

格格尔加诺夫
2 hours ago
Maintainer
这可能也可以应用于GGML量化模型 - 通过在GGML中进行实际的微调

我同意 - 这是一个非常有趣的实验领域。

用户@xaedes已经为使用baby-llama示例进行训练奠定了基础,并且在全文训练方面也取得了非常有趣的进展:ggerganov/ggml#8(评论)

基于CPU的训练/量化支持的微调可能非常有用,因为买得起>128GB的机器要容易得多。如有必要,我们还可以将部分计算卸载到 GPU 以获得一些额外的性能。总的来说,看起来我们有一个很好的机会来演示基于微调ggml

有趣的是,该论文称这是一个明显的改进。

作者实际上承认GPTQ量化优于NF4:https://twitter.com/Tim_Dettmers/status/1661482614811918338