康奈尔大学发布可以在一张消费级显卡上微调650亿参数规模大模型的框架:LLMTune
尽管大模型的研究十分火热,开源模型也很丰富。但是对于很多研究团队来说,基于开源模型进行特定领域的模型微调依然是一项成本高昂的活动。因此,大模型的小型化、低成本训练等方法一直在快速演进。前天,Cornell Tech开源了LLMTune,这是一个可以在消费级显卡上微调大模型的框架,经过测试,可以在48G显存的显卡上微调4bit的650亿参数的LLaMA模型!

LLMTune简介
大语言模型虽然能力很强,目前开源生态也很丰富,但是在特定领域微调大模型依然需要大规格的显卡。例如,清华大学发布的ChatGLM-6B,参数规模60亿,在没有量化的情况下微调需要14GB显存(parameter-efficient fine-tuning,PEFT)。
在没有任何优化的前提下,每10亿参数的全精度(32bit)模型载入到显存中就需要4GB,而int8量化后也需要1GB显存。而目前开源最强的模型LLaMA,其最高参数维650亿规模,全精度模型载入就需要260GB,显然已经超出了大部分人的硬件水平。更不要说对模型进行微调(微调需要训练更新参数,推理只需要前向计算即可,因此,微调需要更多的显存才能支持)。
本次,Cornell Tech开源的LLMTune就是为了降低大模型微调难度所提出的一种解决方案。对于650亿参数的LLaMA模型微调仅需要40GB显存即可。
LLMTune在底层实现了LoRA算法,该算法使用GPTQ压缩LLM,需要实现量化版本LLM的反向传递。LLMTune的功能包括:
- 对多个LLM的模块化支持(目前支持MetaAI开源的2个模型,LLaMA和OPT)
- 支持广泛的消费级NVIDIA的GPU显卡(包括RTX系列、A系列、GTX系列等)
- 代码库微小且易于使用(整个源代码仅64k大小)
Cornell Tech开源LLMTune的最终目的是为了提供一个可以简单微调大模型的平台,并促进LLM相关的研究。
LLMTune的使用方法
LLMTune底层实现了LoRA算法,它依赖的库也很少,主要包括:
库名称 | 简介 |
---|---|
PyTorch | Meta开源的深度学习框架 |
sentencepiece | Google开源的无监督tokenizer工具 |
transformers | HuggingFace开源的NLP预训练模型框架 |
peft | HuggingFace开源的支持各种LLM高效微调的库 |
datasets | HuggingFace开源的数据集库 |
注意,LLMTune目前仅支持在NVIDIA显卡上的微调,所以上述PyTorch也需要cuda版本才可以使用。具体的LLMTune要求如下:
配置项 | 具体配置结果 |
---|---|
操作系统 | UNIX |
Python | 3.8以上 |
PyTorch | 1.13.1+cu116版本测试没问题 |
显卡 | NVIDIA系列,支持cuda |
使用方法也很简单,首先从官方GitHub下载LLMTune代码,然后运行如下2个命令安装:
1、安装LLMTune
pip install -r requirements.txt # 安装LLMTune依赖的库
pip setup.py install # 安装LLMTune
2、下载预训练结果文件
注意,LLMTune目前支持量化版本的模型微调,可以按照如下命令下载LLaMA的4bit版本预训练结果。
wget https://huggingface.co/kuleshov/llama-65b-4bit/resolve/main/llama-65b-4bit.pt
3、下载数据集
wget https://huggingface.co/datasets/kuleshov/alpaca-data/resolve/main/dataset.json
4、微调模型
# 先创建一个微调结果目录
mkdir alpaca-adapter-folder-65b-4bit
# 然后运行如下命令进行微调
llmtune finetune --model llama-65b-4bit --weights llama-65b-4bit.pt --adapter alpaca-adapter-folder-65b-4bit --dataset dataset.json
接下来等待微调结束即可~你也可以写一个py文件来微调模型:
import llmtune.executor as llmtune
llm, llm_config = llmtune.load_llm('llama-7b-4bit', '/path/to/llama-7b-4bit.pt')
output = llmtune.generate(
llm,
llm_config,
prompt="the pyramids were built by",
min_length=10,
max_length=50,
top_p=0.95,
temperature=0.8,
)
print(output)
LLMTune微调总结
目前,项目给出了LLMTune支持的模型规模和所需要的显存大小:
Model大小 | 最低GPU显存 | 兼容的显卡 |
---|---|---|
7b-4bit | 6GB | RTX 2060, 3050, 3060 |
13b-4bit | 10GB | GTX 1080, RTX 2060, 3060, 3080 |
30b-4bit | 20GB | RTX 3080, A5000, 3090, 4090, V100 |
65b-4bit | 40GB | A100, 2x3090, 2x4090, A40, A6000 |
未来,LLMTune还将陆续增加如下功能:
- 支持直接从HuggingFace hub中直接载入模型
- 开箱即用地支持更多的LLM
- 接口优化,如自动停止等
- 自动量化脚本
大模型高效微调总结
LLMTune的出现让我们看到了在消费级显卡上进行大模型微调的可能。除了它以外也有一些大模型的微调工作在进行中。其中比较值得期待的是华盛顿大学的博士生Tim Dettmers正在进行的工作。与LLMTune类似,他们即将发表的大模型微调技术,QLoRA正在招募测试,可以用48GB显存微调650亿参数规模大模型。按照他的描述,他们做的工作包括三部分:
- 4-bit Normal Float:一个信的用于压缩的数据类型
- Paged优化器:内存优化技术
- 双量化:量化后再量化
不过,具体的技术细节还未公布,目前只是招募测试人员提前测试技术,我们保持密切关注。
从近期的发展看,大模型的微调成本继续在下降,未来单张显卡训练650亿参数模型应该是可以达到的。我们后续将测试这种微调技术的效果。
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
