qlora
QLoRA 是一种高效的大型语言模型(LLM)微调技术,旨在让研究人员和开发者在有限的硬件资源下也能轻松定制强大的 AI 模型。它核心解决了传统微调方法对显存要求极高的问题:以往微调一个 650 亿参数的模型需要多张高端显卡,而 QLoRA 仅需单张 48GB 显存的 GPU 即可完成,且性能几乎无损。
这项技术非常适合希望深入研究大模型、进行垂直领域适配的开发者与科研人员,尤其是那些无法负担昂贵算力集群的个人或小团队。QLoRA 的独特之处在于其创新的内存优化策略:它采用全新的 4 位 NormalFloat 数据类型存储冻结的预训练模型权重,结合“双重量化”技术进一步压缩内存占用,并利用“分页优化器”巧妙管理训练过程中的显存峰值。通过将梯度反向传播至低秩适配器(LoRA),QLoRA 在大幅降低资源门槛的同时,依然保持了全精度微调的效果。基于该技术推出的 Guanaco 模型系列,在多项基准测试中表现优异,甚至接近 ChatGPT 的水平,真正推动了大模型研究的普及化。
使用场景
某初创公司希望基于 650 亿参数的 LLaMA 大模型,利用私有医疗数据微调出一个专业的问诊助手,但团队仅有一张 48GB 显存的消费级显卡。
没有 qlora 时
- 硬件门槛极高:全量微调 65B 模型通常需要多张 A100 显卡组成的集群,单卡显存完全无法加载模型,更别提训练。
- 成本难以承受:为了凑齐算力,必须租用昂贵的云端高性能 GPU 集群,每小时费用高昂,远超初创团队预算。
- 开发周期漫长:配置分布式训练环境复杂,且受限于资源排队等待时间,从实验想法到验证结果往往需要数周。
- 试错成本巨大:由于资源受限,研究人员不敢轻易尝试不同的数据集或超参数,严重阻碍了模型效果的迭代优化。
使用 qlora 后
- 单卡即可运行:qlora 通过 4 比特量化技术,成功将 65B 模型压缩至单张 48GB 显卡可承载的范围,直接打破了硬件墙。
- 大幅降低开销:无需租赁昂贵集群,仅在本地或低价云实例上即可完成训练,将微调成本降低了数十倍。
- 快速验证迭代:环境部署简化,研究人员能在 24 小时内完成一次完整的微调实验,迅速验证医疗数据的适配效果。
- 性能无损保留:尽管采用了量化,qlora 仍保持了与 16 比特全量微调相当的任务性能,确保最终生成的问诊回答专业准确。
qlora 让普通开发者也能在消费级硬件上轻松微调超大参数模型,真正实现了大模型研究的民主化。
运行环境要求
- Linux
- 必需 NVIDIA GPU
- 支持单卡微调 65B 模型(需 48GB 显存)
- 7B/13B 模型可在免费 Colab GPU 上运行
- 依赖 CUDA 内核(通过 bitsandbytes),未明确具体 CUDA 版本,但需支持 4-bit 训练的最新驱动
未说明(建议根据模型大小配置充足系统内存以配合 Paged Optimizers)

快速开始
QLoRA:量化大语言模型的高效微调
本仓库支持论文《QLoRA:量化大语言模型的高效微调》,旨在使大语言模型研究更加普及。
QLoRA 使用 bitsandbytes 进行量化,并与 Hugging Face 的 PEFT 和 transformers 库集成。QLoRA 由 华盛顿大学 NLP 团队 的成员开发。
更新
- 2023年7月19日 - 添加了 LLaMA 2 示例脚本并更新了版本要求
- 2023年7月18日 - 修复了添加新 token 时未冻结嵌入的问题
概述
我们提出了 QLoRA,这是一种高效的微调方法,能够显著降低内存使用量,使得在单块 48GB 显存的 GPU 上即可微调 650 亿参数的模型,同时保持全 16 位精度下的任务性能。QLoRA 通过将梯度反向传播到一个冻结的、4 位量化预训练语言模型中,进而作用于低秩适配器(LoRA)。我们最好的模型系列名为 Guanaco,在 Vicuna 基准测试上超越了所有先前公开发布的模型,达到了 ChatGPT 性能水平的 99.3%,而仅需在单个 GPU 上进行 24 小时的微调。QLoRA 引入了多项创新技术,在不牺牲性能的前提下节省内存:(a) 4 位 NormalFloat (NF4),一种在信息论上对正态分布权重最优的数据类型;(b) 双重量化,通过量化量化常数来减少平均内存占用;(c) 分页优化器,用于管理内存峰值。我们使用 QLoRA 微调了超过 1,000 个模型,并对 8 个指令数据集、多种模型类型(LLaMA、T5)以及常规微调难以运行的规模(如 330 亿和 650 亿参数模型)下的指令遵循和聊天机器人性能进行了详细分析。我们的结果表明,即使使用比之前最先进模型更小的规模,基于高质量小数据集的 QLoRA 微调也能达到最先进的效果。我们还基于人工评估和 GPT-4 评估对聊天机器人性能进行了详细分析,结果显示 GPT-4 评估是替代人工评估的一种廉价且合理的方式。此外,我们发现当前的聊天机器人基准测试并不足以准确评估聊天机器人的性能水平。我们发布了所有模型和代码,包括用于 4 位训练的 CUDA 内核。
许可与用途
我们在此仓库中以 MIT 许可证发布了与 QLoRA 微调相关的资源。 此外,我们还发布了 Guanaco 模型家族,适用于 LLaMA 基础模型的 70 亿、130 亿、330 亿和 650 亿参数版本。这些模型的使用应符合 LLaMA 许可证的要求,并需要访问 LLaMA 模型。
演示
Guanaco 是一个纯粹用于研究目的的系统,可能会产生问题输出。
请访问此处的实时演示。请注意,这里展示的是 330 亿参数的模型,650 亿参数的模型演示将在稍后推出。
或者,您也可以直接在 Colab 中使用此笔记本托管自己的 Guanaco Gradio 演示。对于 70 亿和 130 亿参数的模型,免费 GPU 即可运行。
或者,您能区分 ChatGPT 和 Guanaco 吗?不妨试一试!您可以访问此模型响应 Colab,比较 ChatGPT 和 Guanaco 650 亿参数模型在 Vicuna 提示下的表现。
安装
要使用 transformers 和 bitsandbytes 以 4 位加载模型,您需要从源码安装 accelerate 和 transformers,并确保已安装最新版本的 bitsandbytes 库。在安装 PyTorch(请按照此处的说明操作)之后,您可以通过以下命令实现上述目标:
pip install -U -r requirements.txt
快速入门
qlora.py 代码是针对各种数据集进行微调和推理的起点。
在 Alpaca 数据集上微调基线模型的基本命令如下:
python qlora.py --model_name_or_path <路径或名称>
对于大于 130 亿参数的模型,我们建议调整学习率:
python qlora.py –learning_rate 0.0001 --model_name_or_path <路径或名称>
要复现我们的 Guanaco 模型,请参阅下文。
教程与演示
这里有一篇博客,讨论了 4 位量化、QLoRA 以及它们如何集成到 transformers 中。
您可以在 Colab 中按照此笔记本直接托管自己的 Gradio Guanaco 演示。 此外,这里还有一些使用 QLoRA 进行推理和微调的 Colab 笔记本:
其他示例可在 examples/ 文件夹中找到。我们在 examples/guanaco_generate.py 中包含了一个使用 guanaco 进行生成的入门示例。
量化
量化参数通过 BitsandbytesConfig 控制(参见 HF 文档),具体如下:
- 通过
load_in_4bit激活 4 位加载 - 使用
bnb_4bit_compute_dtype指定线性层计算所用的数据类型 - 通过
bnb_4bit_use_double_quant激活嵌套量化 - 使用
bnb_4bit_quant_type指定量化所用的数据类型。需要注意的是,目前支持两种量化数据类型fp4(四比特浮点数)和nf4(正常四比特浮点数)。后者在理论上对正态分布权重最为优化,我们推荐使用nf4。
model = AutoModelForCausalLM.from_pretrained(
model_name_or_path='/模型路径或名称',
load_in_4bit=True,
device_map='auto',
max_memory=max_memory,
torch_dtype=torch.bfloat16,
quantization_config=BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type='nf4'
),
)
分页优化器
您可以通过 --optim paged_adamw_32bit 参数访问分页优化器。
Guanaco 微调
你可以选择 --dataset oasst1 来加载用于训练 Guanaco 的 OpenAssistant 数据集。你也可以在 Hugging Face 上找到它,地址是 timdettmers/openassistant-guanaco。
我们在 ./scripts/finetune_guanaco*.sh 中提供了脚本,用于复现不同规模的 Guanaco 模型训练超参数。请确保调整 per_device_train_batch_size 和 gradient_accumulation_steps,使它们的乘积为 16,以便训练能够在你的 GPU 上顺利进行。
使用本地数据集
你可以使用 --dataset 参数指定数据集的路径。如果未设置 --dataset_format 参数,则默认使用 Alpaca 格式。以下是一些示例:
- 使用 alpaca 格式的数据集进行训练:
python qlora.py --dataset="path/to/your/dataset" - 使用 self-instruct 格式的数据集进行训练:
python qlora.py --dataset="path/to/your/dataset" --dataset_format="self-instruct"
多 GPU
多 GPU 训练和推理可以直接通过 Hugging Face 的 Accelerate 库实现。需要注意的是,per_device_train_batch_size 和 per_device_eval_batch_size 参数实际上是全局批次大小,与名称所暗示的不同。
在多 GPU 上加载模型进行训练或推理时,你应该将类似以下内容传递给 AutoModelForCausalLM.from_pretrained():
device_map = "auto"
max_memory = {i: '46000MB' for i in range(torch.cuda.device_count())}
示例输出
我们在 eval/generations 文件夹中提供了论文中描述的模型针对 OA 和 Vicuna 查询的生成结果。这些结果旨在促进对模型评估和分析的进一步研究。
你能区分 ChatGPT 和 Guanaco 吗?不妨试试!你可以访问这里的 Colab 笔记本,比较 ChatGPT 和 Guanaco 65B 在 Vicuna 提示下的回答。
评估
我们从 FastChat 仓库中改编了一些脚本,用于使用 GPT-4 自动评估模型的生成结果。我们提供了与 ChatGPT 对比的脚本,评分范围为 0 到 10;还提供了“成对比较”脚本,采用三分类标签(胜、负、平)。这些脚本位于 eval 文件夹中。
为了便于复制我们的评估方法以及未来在这方面的研究,我们公开了 GPT-4 和人类对我们系统的评分。这些评分分别位于 eval/ratings-human 和 eval/ratings-gpt4 文件夹中。
更多详细信息请参阅 eval/EVAL_README.md。
已知问题与限制
以下是已知的问题和 bug 列表。如果你遇到的问题未在此列出,请新建一个 issue 并描述问题。
- 4-bit 推理速度较慢。目前,我们的 4-bit 推理实现尚未与 4-bit 矩阵乘法集成。
- 当前 HF 的 Trainer 尚不支持恢复 LoRA 训练任务。
- 目前,使用
bnb_4bit_compute_type='fp16'可能会导致不稳定。对于 7B LLaMA 模型,只有 80% 的微调任务能够顺利完成而不会出现错误。我们已经有解决方案,但尚未集成到 bitsandbytes 中。 - 请确保
tokenizer.bos_token_id = 1,以避免生成问题。 - 如果你遇到 此问题(“非法内存访问”),则应使用更新的 HF LLaMA 转换工具,或降级你的 PyTorch 版本。
- 添加新 token 时可能出现问题,详见 #214。如果添加新 token,需要更新并重新存储/加载嵌入层。
引用
@article{dettmers2023qlora,
title={QLoRA: Efficient Finetuning of Quantized LLMs},
author={Dettmers, Tim and Pagnoni, Artidoro and Holtzman, Ari and Zettlemoyer, Luke},
journal={arXiv preprint arXiv:2305.14314},
year={2023}
}
致谢
我们感谢 Hugging Face 团队,特别是 Younes Belkada,他们在将 QLoRA 与 PEFT 和 transformers 库集成方面给予的支持。我们也感谢 Meta 公司发布了 LLaMA 模型,没有这些模型,这项工作将无法实现。
本仓库基于 Stanford Alpaca 和 LMSYS FastChat 两个项目构建。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器