Fine-Tuning #
为什么需要微调?
- 预训练成本高:训练一个像72B参数的模型需要大量的时间、资源和计算能力,这在成本上是相当昂贵的
- 在“一文揭秘|预训练一个72b模型需要多久?”)中提到:“预训练一个qwen2-72b,给定7T tokens数据集,6000张A100,一个完整epoch需要最多30天。”
- 大模型上下文限制,制了模型一次性处理的信息量
- 基础模型缺少特定领域数据:许多大模型在预训练过程中使用的是通用数据,缺乏针对特定领域的知识和数据。通过针对特定领域数据的微调,可以显著提升模型在该领域的表现,使其更加适合行业应用。
- 数据安全和隐私:在许多情况下,企业和组织对数据的安全性和隐私性有严格的要求。使用公有大模型可能存在数据泄露的风险。通过训练私有化的大模型,组织可以在本地安全地使用和处理数据,降低隐私风险。
Fine-Tuning的分类 #
Fine-Tuning 可以根据不同的策略和方法进行分类,主要包括以下几种:
全量微调 (Full Fine-Tuning, FFT):
- 直接对整个模型的所有参数进行微调。
- 适用于计算资源充足且数据集规模较大的情况。
- 可能会遇到灾难性遗忘(catastrophic forgetting)的问题。这种现象发生在模型在新任务上训练时,可能会对之前学到的知识产生负面影响,从而导致在原始任务上的性能下降。
高效微调 (Parameter-Efficient Fine-Tuning, PEFT):
- 通过减少需要更新的参数量来提高训练效率。
- 包括:
- 有监督微调 (Supervised Fine-Tuning, SFT):在标注数据集上进行微调,以提高模型在特定任务上的表现。
- 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF):利用人类反馈来优化模型的决策过程,使其输出更符合人类偏好。优点是训练质量较高,缺点是需要人类介入。
- 基于AI反馈的强化学习 (Reinforcement Learning from AI Feedback, RLAIF):使用其他 AI 系统生成的反馈来改进模型的行为,通常是在缺乏足够人类反馈的情况下使用。
这些微调方法各有优势,可以根据具体的应用需求和资源情况进行选择。
高效微调(PEFT)的主流技术方案 #
围绕Token做文章, 语言模型(Pretrained Language Model)不变:
- Prompt Tuning: 通过设计特定的提示(prompt)来引导预训练语言模型生成所需的输出,而不是直接调整模型的参数。
- Prefix Tuning: 是一种高效的微调方法,通过在预训练模型每一层添加少量可训练的连续向量(prefix)来实现任务适配,同时保持原模型参数固定。
- P-Tuning: 一种结合了提示和嵌入的技术,直接在模型中优化输入的提示表示。使用可训练的嵌入向量来表示提示,将其嵌入到输入中,并在微调过程中优化这些嵌入向量。模型在接收到这些嵌入后生成响应。能够灵活地学习最佳提示,同时保持原始模型的完整性,提高了对特定任务的适应性。
特定场景任务:训练“本质”的低维模型
- LoRA:LoRA(Low-Rank Adaptation)是一种高效微调(PEFT)技术,旨在减少大规模预训练模型的微调所需的参数量和计算资源。其核心思想是利用低秩矩阵分解的方式,只更新模型的一小部分参数,同时保持原始模型的权重不变。
- QLoRA:QLoRA(Quantized Low-Rank Adaptation)是一种在 LoRA(Low-Rank Adaptation)基础上发展而来的高效微调技术,旨在通过量化技术进一步降低大规模预训练模型微调的计算和存储需求。QLoRA是量化版的LoRA。
- AdaLoRA:AdaLoRA(Adaptive Low-Rank Adaptation)是一种高效微调技术,结合了低秩适应(LoRA)和自适应机制的特点,以进一步提升大规模预训练模型的微调效果和灵活性。
根据模型参数量估算显存占用
只进行推理的情况,对于72B的模型,假设每个参数使用4字节(32位浮点数),那么72B参数的模型显存需求大约为288G。(
72000000000*4/1024/1024/1024=268.22
, 按1kb=1000byte算的话,可简单的用72*4=288G),即每10亿参数大约需要4G显存。如果还要训练的话,由于反向传播、Adam优化和Transformer架构等因素,保守估计,训练所需的显存是具有相同参数数量和类型的推理显存的3~4倍(1x为模型,1x为梯度,1~2x为优化器)。
新思路:少量数据、统一框架。通过在统一的框架下使用少量数据进行训练,以达到高效学习的目标。
- IA3 (Instance Adaptive Alignment):一种适应性调整的方法,旨在利用少量样本进行有效学习。
- UniPELT (Unified Prompting for Efficient Learning Transfer):一种统一的提示方法,通过简单的提示机制,提升模型在新任务上的学习效率。
微调框架 #
- Huggingface的PEFT库
- 包括LoRA,Prefix Tuning,P-Tuning,Prompt Tuning等技术方案都被集成到Huggingface的PEFT库里了