QLoRA 其实是一种结合了量化和 LoRA 微调技术的统一方法,而不是同时使用两种不同的微调方式。换句话说,QLoRA 的意思就是:先把大模型的主权重用低精度(例如 4-bit)量化,从而大幅减少存储需求;然后在此基础上,通过 LoRA 技术,仅对少部分参数(比如 1%)进行微调,这部分参数保留在较高的精度(例如 FP16)。
详细解释
-
LoRA 微调:
LoRA(Low-Rank Adaptation)是一种微调方法,它通过引入低秩矩阵来调整模型的部分参数,而不改变原始模型的全部权重。这种方法适用于在有限数据或计算资源情况下,对大模型进行有效的微调。 -
QLoRA:
QLoRA 就是结合了量化和 LoRA 的技术。它先将大模型的主权重量化为 4-bit(从而降低存储和计算成本),然后只对模型中的一小部分参数(例如 1%)使用 LoRA 微调,保持这些额外权重为 FP16 精度。这样既能大幅降低资源消耗,又能通过 LoRA 对模型进行有效的微调。
举例说明
假设有一个 10B 参数的模型:
-
全精度存储需求:
原始模型采用 FP16,每个参数 2 字节,总共 10B × 2 = 20GB。 -
使用 QLoRA:
- 首先,将大部分 10B 参数用 4-bit 量化保存。4-bit 每个参数大约 0.5 字节,所以量化后占用 10B × 0.5 = 5GB。
- 然后,对其中 1% 的参数(即 100M 个参数)应用 LoRA 微调,这部分权重仍使用 FP16,即 100M × 2 字节 = 200MB。
- 整个模型最终存储需求约 5GB + 200MB = 5.2GB。
这里的“QLoRA”并不是同时用两种方法,而是一种集成了量化和 LoRA 微调的技术方案。
总结:
QLoRA 本身就是在基于低精度量化的基础上,通过 LoRA 微调来调整一小部分参数。它们不是互斥的,而是互补的,正是这种组合方法使得大模型在节省资源的同时还能达到较好的微调效果。
存储需求
存储需求主要根据模型中参数的总数以及每个参数占用的字节数来计算。简单来说,计算公式为:
存储需求 = 参数数量 × 每个参数所占字节数
具体举例
-
FP16存储(16位浮点数):
- 每个参数占用 16 位,也就是 2 字节。
- 如果模型有 10 亿个参数(1B),那么存储需求就是:
1B × 2 字节 = 2GB - 如果模型有 100 亿个参数(10B),存储需求就是:
10B × 2 字节 = 20GB
-
4-bit量化存储:
- 4-bit 等于 4/8 = 0.5 字节。
- 对于 10B 参数的模型,经过 4-bit 量化后的存储需求为:
10B × 0.5 字节 = 5GB
-
使用 LoRA 或 qLoRA 微调时:
- LoRA 只对模型中一小部分参数进行更新,比如 1% 的参数。
- 如果一个 10B 参数的 FP16 模型,1% 参数大约是 0.1B,存储需求为:
0.1B × 2 字节 = 0.2GB - 这部分更新的参数就需要额外的存储,而整体模型仍然以原始的量化或全精度格式存在。
总结
- 如果你用 FP16 格式存储,一个拥有 10B 参数的模型大约需要 20GB 的存储空间;如果量化到 4-bit,则大约只需要 5GB。
- 使用 LoRA 微调时,你只更新模型的一小部分参数,这部分参数所需的存储相对更少。
这样的计算方法可以帮助你评估训练和部署模型时所需的存储资源。