输入“/”快速插入内容

QLoRA:4-bit级别的量化+LoRA方法,用3090在DB-GPT上打造基于33B LLM的个人知识库

2024年9月2日修改
作者:陆淳
一、背景
大型语言模型(LLM)的发展日新月异,是近年来自然语言处理(NLP)领域的热门话题,LLM可以通过大规模的无监督预训练来学习丰富的语言知识,并通过微调来适应不同的下游任务,从而在各种NLP任务上取得了令人瞩目的性能。然而,LLM也带来了一些挑战,其中一个便是它们的 巨大规模和高昂的计算成本 。例如,微调LLaMA的65B模型需要超过780G的显存,在BLOOM-176B上进行推理,需要8个80GB的A100 gpu(每个约1.5万美元)。这远远超出了普通用户和研究者的可用资源。虽然最近出现的一些量化方法可以减少LLM的内存占用量,但是这些技术仅适用于推理,并不适合在训练过程中使用。因此,如何在保持或提高性能的同时,降低LLM的内存占用和训练时间,是一个急需解决的问题。
5月24日华盛顿大学在《 QLORA: Efficient Finetuning of Quantized LLMs 》这篇文章中提出了一种针对LLM的低精度量化和高效微调技术,可以在保证完整的fp16的微调任务性能的同时,减少内存使用,从而能够 在单个48GB显存的 GPU上微调65B参数模型 。作者 Tim Dettmers huggingface 上已经公布了他们利用QLoRA方法训练的系列模型Guanaco,其中33b和65b的模型可以直接下载使用,7b和13b的模型需要和对应的LLaMA模型进行参数融合。同时作者表明Guanaco在Vicuna基准测试中的表现超过了所有以前 公开发布 的模型,在24 小时内微调的Guanaco 65B大模型甚至能够 达到chatgpt性能水平的99.3% 。以下是华盛顿大学的作者所公布的数据:
以下是我自己在40GB显存,500GB磁盘空间的A100上对Guanaco模型的推理实测:
MODEL
GPU RAM(括号内为未使用qlora的显存)
CPU RAM
DISK
Guanaco 7b merged
4.8GB(14.7GB)
3.6GB
36.4GB
Guanaco 13b merged
8.4GB(28.7GB)
5.9GB
60.2GB
Guanaco 33b merged
18.3GB(OOM)
8.4GB
122GB
Guanaco 65b merged
38.7GB(OOM)
13.1GB
434GB
看到这里相信有很多同学已经按捺不住准备去尝试了,但如果我告诉你 只要5元就可以在DB-GPT上部署 自己的Guanaco 33b模型呢 在安全隐私的环境下拥有如此一个强大的模型将对个人 知识库 将带来怎样的改变?不妨先耐着性子看完以下介绍
二、QLoRA
总的来说QLoRA 使用一种低精度的存储数据类型(NF4)来压缩预训练的语言模型。通过冻结 LM 参数,将相对少量的可训练参数以 Low-Rank Adapters 的形式添加到模型中,LoRA 层是在训练期间更新的唯一参数,使得模型体量大幅压缩同时推理效果几乎没有受到影响。从QLoRA的名字可以看出,QLoRA实际上是Quantize+LoRA技术。
我们首先简单了解一些微调方法。
1、Fine-Tuning
大语言模型 对特定任务或领域进行微调任务时,重新训练所有模型参数将会带来昂贵的训练成本,因此出现了各种优化的微调方案:
1.1、 Adapters-Tuning
在预训练模型每一层(或某些层)中添加Adapter(bottleneck)模块,可以理解为在attention外面整体包一个复杂的 非线性函数 进行空间变换。微调时冻结预训练模型主体,由Adapter模块学习特定下游任务的知识。每个Adapter模块由两个前馈子层组成,第一个前馈子层将Transformer块的输出作为输入,将原始输入维度d投影到m,通过控制m的大小来限制Adapter模块的参数量,通常情况下m<<d。在输出阶段,通过第二个前馈子层还原输入维度,将m重新投影到d,作为Adapter模块的输出。
Adapter方法不需要微调预训练模型的全部参数,通过引入少量针对特定任务的参数,来存储有关该任务的知识,降低了对模型微调的算力要求。论文指出adapter规模超参数在为8、256的时候, 该方案微调时每个任务仅增加3.6%的训练参数量