1. 什么是 LoRA?
LoRA(low-rank adaptation of large language models)是一种针对大型语言模型进行低秩适应的技术。大型语言模型通常具有数十亿个参数,这使得它们在计算和存储方面非常昂贵。低秩适应的目标是通过将语言模型的参数矩阵分解为低秩近似,来减少模型的复杂度和计算资源的需求。
低秩适应的方法可以通过使用矩阵分解技术,如奇异值分解(Singular Value Decomposition,SVD)或特征值分解(Eigenvalue Decomposition)。通过这种方式,可以减少模型的参数量和计算复杂度,同时保留模型的关键特征和性能。
2. LoRA 的思路是什么?
LoRA 的核心思想是对大型模型的权重矩阵进行隐式的低秩转换,整体的想法和概念与主成分分析(PCA)和奇异值分解(SVD)有关,换句话说,该方法试图找到原始特征空间(或矩阵)中少数维度的(线性)组合,能够捕捉数据集中大部分的信息。我们通过一个较低维度的表示来近似表示一个高维矩阵或数据集,通过对模型参数矩阵进行低秩分解,将其分解为两个或多个较小的矩阵的乘积作为旁路分支。然后仅调整低秩的近似矩阵,而冻结原模型的参数。这样可以减少模型的参数量和计算复杂度,同时保留模型的关键特征和性能。
3. LoRA 的特点是什么?
- 低秩适应:LoRA通过对大型语言模型的参数矩阵进行低秩分解,将其分解为较小的矩阵的乘积。
- 保持关键特征:虽然低秩适应会对模型的输出产生影响,但它会尽量保留模型的关键特征。通过选择合适的低秩近似矩阵,可以最大限度地保持模型的性能。
- 减少存储需求:低秩适应可以显著减少大型语言模型的参数量,从而降低模型的存储需求。这对于在资源受限的设备上使用语言模型非常有益。
- 加速推理过程:由于低秩适应减少了模型的计算复杂度,因此可以加速模型的推理过程。这对于实时应用和大规模部署非常重要。
- 可扩展性:LoRA 的低秩适应方法可应用于各种大型语言模型,包括预训练的 Transformer 模型等。它是一种通用的技术,可以适应不同的模型架构和任务。
4. QLoRA 的思路是怎么样的?
QLoRA 的目的是要解决当前微调特别大的模型成本太高的问题,如常规 fp16 的 LLaMA-65B 模型的参数微调需要超过780G的显存,主要包括以下三个部分:
- NF4 Quantization(4bit量化): 一种新的int4量化方法,灵感来自信息论。NF4量化可以保证量化后的数据和量化前具有同等的数据分布。意思就是NF4量化后,权重信息损失少,那么最后模型的整体精度就损失少。
- Double Quantization : 对第一次量化后的 常量做二次量化,减小模型存储。
- Paged optimizers : 使用 NVIDIA 统一内存功能,该功能在 CPU 和 GPU 之间进行自动 page 对 page 传输,以便在 OOM 的情况下进行. 可以从现象上理解成出现训练过程中偶发 OOM 时能够自动处理,保证训练正常训练下去。
5. QLoRA 的特点是什么?
- 量化参数:使用了4位 Normal Float(NF4) 数据类型,减小量化后参数的精度损失。
- 双重量化:对量化常量进行量化,进一步节省内存。在精准的4位量化中,需要较小的块大小,这也会带来较大的内存开销。
- Paged optimizers:可以在 GPU RAM 偶尔不足的情况下实现 CPU 和 GPU 之间的数据传输,确保训练不会中断。
6. AdaLoRA 的思路是怎么样的?
AdaLORA 采用奇异值分解(SVD)的形式参数化增量更新。这种参数化方式在规避大量 SVD 运算的同时,允许我们高效裁剪不重要更新中的奇异值,降低增量过程中的资源消耗。AdaLORA 主要包含两个模块:
- SVD形式参数更新(SVD-based adaptation) :直接将增量矩阵Δ参数化为 SVD 的形式,避免了在训练过程中进行 SVD 计算带来的资源消耗
- 基于重要程度的参数分配(Importance-aware rank allocation) : 裁剪一些冗余的奇异值。
7. LoRA权重是否可以合入原模型?
LoRA 权重可以合并到原模型中。在使用 LoRA 进行低秩适应时,原始模型的参数矩阵会被分解为较小的矩阵的乘积。这些较小的矩阵可以表示为低秩矩阵的形式,其中包含了原始模型的权重信息。
合并 LoRA 权重到原模型的过程通常涉及将低秩矩阵重新组合成原始模型的参数矩阵。这可以通过矩阵乘法等操作来实现。合并后的模型将包含原始模型的权重信息,同时也融入了低秩适应的优化,从而在减少计算和存储开销的同时保持模型性能。
9. LoRA微调方法为什么能加速训练?
- 冻结了大量的参数:在训练时只更新低秩矩阵的参数,预训练好的模型参数是固定不变的。在推断时可以利用重参数(reparametrization)思想,将AB与W合并,这样就不会在推断时引入额外的计算了。
- 降低了计算复杂度:由于 LoRA 微调减少了参数量,每个参数的计算量也相应减少。在训练过程中,计算参数更新和梯度传播的时间会显著减少,从而加速了训练过程。特别是在大规模语言模型中,参数量巨大,计算复杂度很高,LoRA微调可以显著减少计算开销,提高训练效率。
- 加速收敛速度:LoRA 微调通过低秩适应对原模型进行了正则化,使得模型更容易收敛到较好的解。低秩适应过程中的正则化可以帮助模型更好地利用数据进行训练,减少过拟合的风险。这样可以加快模型的收敛速度,从而加速训练过程。
10. 如何在已有 LoRA 模型上继续训练?
可先将模型与 LoRA 训练出来的权重进行合并,使其重新组合成原始模型的参数矩阵,然后就可以再次进行 LoRA 微调了。
11. LoRA 这种微调方法和全参数比起来有什么劣势?
使用 LoRA 对模型进行微调可能会牺牲一部分模型质量,但将获得更高效地提供多个模型服务的能力。同时,LoRA 在特定的应用领域中表现比较出色,但可能在需要逻辑推理等更广泛的任务中表现欠佳。