当前位置: 首页 > news >正文

QLoRA对大模型微调

QLoRA(Quantized Low-Rank Adapters)是一种高效的微调技术,用于在消费级硬件(如单张GPU)上微调大语言模型(LLM)。它的核心思想是通过量化(Quantization)低秩适配器(Low-Rank Adapters)来减少内存占用,同时保持模型的性能。

QLoRA 的关键技术

  1. 4-bit 量化:使用4-bit NormalFloat (NF4) 量化方法,使得模型占用的显存大幅减少。

  2. 低秩适配器(LoRA):在原始模型的参数上引入小规模的低秩适配器,只微调这些参数,而不改变原始模型的权重。

  3. Paged Optimizers:通过优化内存分页管理,进一步降低显存使用。

QLoRA 的优势

  • 降低显存需求:可以在单张消费级 GPU(如 RTX 3090 或 A100 80GB)上微调高达65B参数的模型。

  • 性能接近全参数微调:尽管减少了训练的参数量,但实验表明,QLoRA 仍能保持高质量的微调效果。

  • 适用于大语言模型(LLM):适用于像 LLaMA、GPT 等大型预训练模型的个性化微调。

适用场景

  • 个人或中小企业在有限计算资源下微调大模型

  • 垂直行业(如医疗、法律、金融)微调大模型以适配特定任务

  • 本地化大模型,如适配不同语言或特定领域数据

LoRA与QLoRA的区别

LoRA(Low-Rank Adaptation)和 QLoRA(Quantized Low-Rank Adaptation)都是用于高效微调大型语言模型(LLM)的技术,但它们有以下主要区别:

1. 基础概念

  • LoRA:通过在神经网络的权重矩阵上添加低秩适配(Low-Rank Adaptation)矩阵,减少微调时的参数更新量,同时保持原始模型权重不变。这降低了存储和计算成本。

  • QLoRA:在 LoRA 的基础上引入了量化(Quantization)技术,即用更低精度(如 4-bit)存储模型权重,从而大幅降低显存占用,使得更大的模型可以在消费级 GPU 上进行微调。

2. 显存占用

  • LoRA:仍然需要加载全精度(如 FP16)的基础模型,显存占用较高。

  • QLoRA:使用 4-bit 量化存储模型权重,极大减少显存需求,使得 65B(650亿参数)级别的模型可以在 48GB 显存的 GPU 上进行微调。

3. 计算资源

  • LoRA:减少了训练时需要更新的参数,但仍需较高的计算资源,特别是对大模型来说。

  • QLoRA:通过量化减少了计算资源需求,使得较低端的硬件也能参与大模型微调。

4. 适用场景

  • LoRA:适用于有一定计算资源、希望高效微调模型但不希望量化影响模型性能的场景。

  • QLoRA:适用于计算资源有限、需要在消费级 GPU 上微调大模型的场景。

5. 性能与精度

  • LoRA:由于保持了高精度权重,微调后精度通常较高。

  • QLoRA:虽然使用了量化技术,但配合适当的量化方案(如 NF4 量化格式),可以在较低显存占用的情况下保持接近 LoRA 的微调效果。

总结

特性LoRAQLoRA
主要优化点低秩适配低秩适配 + 量化
显存需求
计算资源较高较低
微调精度较高略低(但可接受)
适用场景有较强计算资源的环境低显存设备,如消费级 GPU

如果你的设备显存较少,可以优先选择 QLoRA,这样能在更低成本的硬件上完成大模型的微调。

QLoRA微调实战

关键参数说明

  1. 量化等级(启用量化QLoRA) :8位
  2. 加速方式:flashattn2,或者auto 
  3. LoRA秩 32--128之间,比如 64  (推荐),
  4. LoRA缩放系数是 lora秩的2倍,比如 128(推荐)。
  5. 截断长度:根据训练的数据的每条记录的长度,选择一个能够覆盖大部分记录的长度。
  6. 训练轮数:一般大于300;

模型越小,LoRA秩和LoRA缩放系数越大一些。量化等级越小,LoRA秩和LoRA缩放系数越大一些。

附录


autodl学术加速
source /etc/network_turbo
https://www.autodl.com/docs/network_turbo/

http://www.dtcms.com/a/99761.html

相关文章:

  • Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(ollama方式)
  • 基于Elasticsearch的个性化内容推荐技术实践
  • 方案推介:80页产品经理培训PPT课件:产品调研、用户画像、用户需求的收集【文末附下载链接】
  • vue3+bpmn.js基本使用
  • 缓存击穿中的二次判断
  • 鸿蒙项目源码-仿抖音短视频-原创!原创!原创!
  • Nexus Docker 推送提示授权错误
  • 如何进行Prompt调优?
  • 【机械视觉】C#+VisionPro联合编程———【六、visionPro连接工业相机设备】
  • Spring Boot 项目引入 MCP 详细指南
  • css选择最后结尾的元素DOM
  • vue3项目配置别名
  • 将pytroch模型转为paddlelite模型并集成到android程序中
  • 【SQL】刷题记录
  • Python 查找PDF中的指定文本并高亮显示
  • leetcode刷题日记——跳跃游戏
  • vLLM 部署 InternVL2_5
  • Gogs 精简备份与恢复方案(仅SQLite数据库和配置)
  • 逻辑回归(Logistic Regression)模型的概率预测函数
  • Gateway实战(一)、网关基本了解、配置路由案例实操
  • YOLOv8环境配置及依赖安装过程记录
  • 爬虫工程师分享自动批量化获取商品评论数据的方法有哪些?
  • Linux中CP到一半不小心kill了能恢复吗?
  • SAP SD学习笔记36 - BackOrder(延期交货订单处理)
  • Stable Diffusion太慢?国内Midjourney平替方案—商用合规部署
  • AI Agent开发大全第十四课-零售智能导购智能体的RAG开发理论部分
  • 从分布式系统架构看LPL饭圈生态:开发者视角下的博弈平衡与演化逻辑
  • 【vue】聊一聊拖拽改变DOM大小的实现
  • Redis场景问题2:缓存击穿
  • VMware笔记之windows的vmware17pro中的ubuntu22.04调整系统空间大小