什么是LoRA?
LoRA,全称低秩自适应(Low-Rank Adaptation),是一种高效微调大型语言模型(LLM)的突破性技术。LoRA不重新训练庞大模型的所有参数(可能多达数十亿),而是冻结预训练模型的权重,并在模型的层中注入小型的、可训练的“秩分解矩阵”。这极大地减少了可训练参数的数量(最多可减少10,000倍),使得微调过程显著加快,内存消耗也大大降低,同时不牺牲输出质量。
主要特点
- 参数效率: 将可训练参数的数量减少99%以上,使得在消费级硬件上进行微调成为可能。
- 减少内存占用: 需要的VRAM显著减少,使得微调比以往可能微调的更大的模型成为现实。
- 无推理延迟: 适应后的权重可以与主模型权重合并,这意味着在推理过程中没有额外的计算成本。
- 任务切换: 由于原始模型被冻结,您可以为不同的任务创建许多小型的LoRA“适配器”模型,并可以即时切换。
- 广泛采用: 由Hugging Face的PEFT(Parameter-Efficient Fine-Tuning)等库实现并推广,使其易于应用于数千个模型。
应用场景
- 自定义聊天机器人: 微调像Llama 2这样的基础模型,使其具有特定的个性或成为某一领域的专家。
- 专用代码助手: 使代码生成模型适应特定公司的代码库或编程风格。
- 图像风格迁移: 微调像Stable Diffusion这样的文本到图像模型,以持续生成具有独特艺术风格的图像。
- 角色生成: 训练模型生成特定人物或角色的图像(常与Dreambooth一起使用)。
- 特定领域摘要: 微调模型以总结法律文件、医学研究或财务报告。
入门指南
这是一个使用Hugging Face peft 库将LoRA应用于模型的“Hello World”示例。
首先,安装必要的库: ```bash pip install transformers datasets peft
接下来,您可以将LoRA配置应用于预训练模型。
```python from transformers import AutoModelForCausalLM, AutoTokenizer from peft import get_peft_model, LoraConfig, TaskType
定义模型ID并创建分词器和模型
model_id = “meta-llama/Llama-2-7b-chat-hf” tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id)
定义LoRA配置
lora_config = LoraConfig( r=16, # 更新矩阵的秩。秩越低,参数越少。 lora_alpha=32, # LoRA权重的缩放因子。 target_modules=[“q_proj”, “v_proj”], # 应用LoRA的模块。 lora_dropout=0.05, bias=”none”, task_type=TaskType.CAUSAL_LM )
创建PEFT模型
peft_model = get_peft_model(model, lora_config)
打印可训练参数的数量
peft_model.print_trainable_parameters()
trainable params: 4,194,304 || all params: 6,742,609,920 || trainable%: 0.06220594176090199
您现在可以继续在您的自定义数据集上训练这个peft_model。
训练过程将只更新少量的LoRA参数。
定价
LoRA是一种开源技术,而非产品。它可以免费使用。主要成本是微调过程所需的计算资源(GPU时间),与完全微调相比,LoRA显著降低了这一成本。