你应该懂得AI大模型(十二)之 QLoRA
一、显存和算力
1. 基本概念
显存 (Memory)
定义:GPU 用于临时存储数据的高速内存,类似于计算机的 RAM。
作用:
- 存储模型权重、中间激活值、梯度和优化器状态。
- 数据在显存与 GPU 核心之间快速传输以支持计算。
衡量单位:GB (如 8GB、24GB)。
算力 (Computational Power)
定义:GPU 执行计算操作的能力,由 GPU 核心数量和频率决定。
作用:
- 执行矩阵乘法、卷积等计算密集型操作。
衡量单位:
- TFLOPS (万亿次浮点运算 / 秒),如 NVIDIA A100 的 312 TFLOPS (FP16)。
- CUDA 核心数或 Tensor 核心数。
2. 关键区别
| 维度 | 显存 | 算力 |
|---|---|---|
| 瓶颈表现 | 训练时出现 "CUDA out of memory" 错误 | 训练速度慢,GPU 利用率低 |
| 优化方式 | 量化模型、梯度检查点、减少 batch size | 使用更快的 GPU、优化算法复杂度 |
| 典型场景 | 大模型微调(如 13B 参数模型) | 高分辨率图像处理、大 batch 训练 |
| 资源竞争 | 模型权重 vs 激活值 vs 优化器状态 | 计算密集型操作(如矩阵乘法) |
3. 相互关系
显存决定模型规模
模型越大(参数越多),所需显存越多。
- 例如:7B 参数模型在 FP16 精度下需约 14GB 显存存储权重。
量化技术(如 QLoRA 的 4-bit 量化)通过降低精度减少显存需求。
算力决定计算速度
算力越高,单位时间内处理的数据量越大。
- 例如:A100 的算力约为 RTX 3090 的 3 倍,相同任务速度快约 3 倍。
并行计算(如 Data Parallelism)依赖算力提升效率。
显存与算力的平衡
- 小显存 + 高算力:适合小模型高速推理(如手机端 AI)。
- 大显存 + 低算力:适合训练大模型但速度较慢。
- 大显存 + 高算力:理想配置(如 A100、H100),支持大规模训练和推理。
4. 实际应用中的影响
训练阶段
显存不足:
- 无法加载完整模型或 batch,需使用梯度累积、模型并行等技术。
算力不足:
- 训练时间过长,即使显存充足也无法充分利用数据。
推理阶段
显存限制部署规模:
- 边缘设备(如车载 GPU)需压缩模型以适配有限显存。
算力影响响应速度:
- 实时应用(如自动驾驶)需高算力 GPU 保证低延迟。
5. 优化策略
显存优化
- 量化:FP16 → INT8 → 4-bit/2-bit。
- 梯度检查点:牺牲计算速度换取显存。
- 模型架构优化:使用参数效率更高的模型(如 LLaMA 比 GPT-3 参数量少 50%)。
算力优化
- 算法优化:使用 FlashAttention、TensorRT 等加速库。
- 硬件升级:从 RTX 3090 (35 TFLOPS) 升级到 A100 (312 TFLOPS)。
- 并行策略:数据并行、张量并行或流水线并行。
6. 常见误区
"显存越大越好":
- 若算力不足,大显存无法充分发挥作用(如训练小模型时)。
"算力高就能训练大模型":
- 显存不足时,高算力 GPU 仍无法加载大模型。
"量化只影响精度":
- 4-bit 量化不仅减少显存,还能加速计算(如 A100 的 4-bit Tensor Core)。
总结
显存是模型运行的 "空间",决定了你能处理多大的模型。
算力是模型运行的 "速度",决定了你能多快完成计算。
理想的配置需要两者平衡,例如:
- 微调 7B 模型:至少 16GB 显存 + 中等算力(如 RTX 4090)。
- 训练 70B 模型:80GB 显存 + 高算力(如 A100/A800)。
在资源有限时,需根据任务需求优先优化瓶颈资源(显存或算力)。
二、部署量化(打包量化)与训练量化
| 维度 | 训练量化 | 部署量化(打包量化) |
|---|---|---|
| 目标 | 在训练过程中减少显存和计算量 | 在推理时减小模型体积、加速推理速度 |
| 应用阶段 | 模型训练阶段 | 模型部署阶段 |
| 技术重点 | 保持训练稳定性和模型精度 | 最大化推理效率,最小化精度损失 |
| 典型场景 | QLoRA 微调大模型 | 在手机、边缘设备上部署模型 或者 需要极致推理速度(如实时对话系统)。 |
| 精度损失处理 | 通过技术补偿(如双重量化)减少损失 | 通过校准或微调恢复精度 |
部署量化会节约算例但不会节约显存,因为模型推理中间态对显存的占用不会因为量化而变小。但是如果我们想在24G显存的服务器上训练一个8B的模型通过训练量化就可以让开启训练。
训练量化是以量化方式训练模型,核心是在低精度下保持训练稳定性(一般情况下我们建议使用8位QLoRA训练,这时的精度损失是很小的)。
部署量化是对训练好的模型进行压缩加速,核心是在最小精度损失下提升推理效率。
两者可结合使用:例如用 QLoRA 训练,再用 GPTQ 进一步量化部署。选择哪种方法取决于你的具体需求:
- 需要高精度微调 → 训练量化(如 QLoRA)
- 需要极致部署效率 → 部署量化(如 GPTQ+llama.cpp)
三、QLoRA
QLoRA 是 2023 年提出的一种参数高效微调技术,通过将大语言模型量化与 LoRA 低秩适应相结合,大幅降低了微调所需的显存,让普通人也能在消费级 GPU 上微调 7B 甚至 70B 规模的大模型。
四、如何使QLoRA训练效果超越LoRA
以LLamaFactory为例,我们在训练时选择QLoRA,那么我们可以在LoRA参数的配置中提升LoRA秩(一般LoRA缩放参数是秩的两倍)。
在相同显存限制下,高秩 QLoRA 可以达到比 LoRA 更高的准确率。QLoRA 的训练时间更长,但性价比更高(例如 r=32 的 QLoRA 用 12GB 显存达到了 LoRA 需要 24GB 才能达到的效果)。

LoRA 秩 (rank) 是控制可训练参数数量和模型表达能力的关键参数。理论上,调高 LoRA 秩可以增强 QLoRA 的表达能力。
通过QLoRA量化大幅降低基础模型的显存占用,从而允许使用更高的 LoRA 秩。
例如:
- 传统 LoRA(FP16)在 24GB GPU 上最多使用 r=16(否则显存溢出)。
- QLoRA(4-bit)在同样 GPU 上可使用 r=32 甚至更高,获得更强表达能力。
1.如何通过高秩 QLoRA 获得更好效果?
(1) 硬件与参数配置
GPU 显存:
- 24GB GPU:推荐 r≤32
- 48GB GPU:可尝试 r=64
(2) 训练策略优化
- 学习率调整:
高秩 LoRA 需要更高学习率,推荐范围 5e-5 至 1e-4。 - 梯度累积:
使用较大的梯度累积步数(如 8-16),模拟更大 batch size。 - 更长训练时间:
高秩模型需要更多训练步数收敛,可将 max_steps 增加 50-100%。
(3) 量化技术选择
- 双重量化:
启用bnb_4bit_use_double_quant=True以节省额外显存。 - NF4 量化:
使用bnb_4bit_quant_type="nf4"而非默认的 FP4,减少精度损失。
2. 注意事项
并非秩越高越好:
对于大多数任务,r=16-32 已足够,过高的秩可能导致过拟合。量化误差累积:
4-bit 量化会引入一定误差,可通过以下方式缓解:- 使用
compute_dtype=torch.float16保持梯度计算的高精度。 - 在关键层(如注意力机制)保留 FP16 精度。
- 使用
推理部署:
高秩 LoRA 在推理时会增加计算量,可通过以下方式优化:- 将 LoRA 参数合并到基础模型中(需更多显存)。
- 使用 INT8 量化进行推理。
你应该懂得AI大模型(十二)之 QLoRA的更多相关文章
- AI大模型学习了解
# 百度文心 上线时间:2019年3月 官方介绍:https://wenxin.baidu.com/ 发布地点: 参考资料: 2600亿!全球最大中文单体模型鹏城-百度·文心发布 # 华为盘古 上线时 ...
- Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由Route&Navigation
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅
摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...
- 保姆级教程:用GPU云主机搭建AI大语言模型并用Flask封装成API,实现用户与模型对话
导读 在当今的人工智能时代,大型AI模型已成为获得人工智能应用程序的关键.但是,这些巨大的模型需要庞大的计算资源和存储空间,因此搭建这些模型并对它们进行交互需要强大的计算能力,这通常需要使用云计算服务 ...
- PowerDesigner 学习:十大模型及五大分类
个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...
- PowerDesigner 15学习笔记:十大模型及五大分类
个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...
- ThinkPHP 关联模型(二十)
原文:ThinkPHP 关联模型(二十) ThinkPHP关联模型 两表关联查询:Message 和 user 关联条件uid(参考手册:模型->关联模型) 步骤: 一:创建Message表 ...
- 从零开始学习html(十二)CSS布局模型——上
一.css布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了. 布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之 ...
- 【腾讯Bugly干货分享】腾讯验证码的十二年
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581301b146dfb1456904df8d Dev Club 是一个交流移动 ...
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
随机推荐
- 【Docker】安装
Docker安装 前提说明 CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条 ...
- HTML5
转
贴个图:
- 根据二叉树的前序和中序构建树,并按层次输出(C++)vector存树
L2-006 树的遍历 #include <bits/stdc++.h> #define int long long using namespace std; #define endl ' ...
- PHP传递参数(跨文件)的8种常见方法
以下是 PHP 中跨文件传递参数的 8 种常见方法,按场景和安全性分类整理,附详细说明和示例代码: 一.超全局变量(适合请求间数据共享) 1. $_GET / $_POST 用途:通过 URL 或表单 ...
- ESP32+Arduino入门教程(二):连接OLED屏
前言 文中视频效果可在此次观看:ESP32+Arduino入门教程(二):连接OLED屏 接线 现在先来看看接线. 我的是0.91寸的4针OLED屏. OLED引脚 ESP32-S3引脚 GND GN ...
- 基于OpenCV与PyTorch的智能相册分类器全栈实现教程
引言:为什么需要智能相册分类器? 在数字影像爆炸的时代,每个人的相册都存储着数千张未整理的照片.手动分类不仅耗时,还容易遗漏重要瞬间.本文将手把手教你构建一个基于深度学习的智能相册分类系统,实现: 三 ...
- 为什么 Spring 循环依赖需要三级缓存,二级不够吗?
Spring循环依赖解决机制中引入了三级缓存,这是因为仅使用二级缓存无法灵活处理代理Bean的早期暴露需求.以下是为什么需要三级缓存的详细分析: 1. 二级缓存的局限性 二级缓存通常用于存储早期暴露的 ...
- WIN10 由于找不到mfc140u.dll,无法继续执行代码
最近遇到win10提示mfc140u.dll找不到,总是弹窗的问题. 网上一番百度搜索后发现给的方法都不能很好的解决,DLL修复工具需登录且收费 去下载mfc140u.dll 根本不可能找到,都是垃圾 ...
- 代码随想录第一天 | Leecode 704 二分查找、27 移除元素、977 有序数组的平方
前言 今天是我开始刷Leecode的第一天,同时这也是开通博客园第一篇博客.我希望能在每篇博客中记录下我做出每一道题的过程,为此我想先说明一下我的博客内容的结构. 题目描述:首先说明题目的要求以及测试 ...
- ShadowSql之开源不易
ShadowSql集本人以前为公司内部开发的ORM之众长 再次进化而来,性能更好也更通用 其一.历时3个多月,已经发布了8个版本 在此期间深感做个开源项目非常的不易 好在现在本人想要的功能基本都已经开 ...