仅需一行代码即可微调大语言模型——LightningAI发布全新Python库Lit-Parrot
尽管ChatGPT的火爆让大家发现生成式大语言模型可以不需要改变模型权重即可让模型完成新任务。但是,大模型微调依然是针对大量私有数据或者特定领域不可缺少的方法。就在前不久,LightningAI发布了一个轻量级大模型微调库Lit-Parrot🦜,仅需一行代码即可微调当前开源大模型。

一、大模型finetuning的必要性和困难
ChatGPT的火爆也带火了一种新的技能——提示工程(Prompt Engineering)。由于大语言模型强大的能力,大家发现,很多时候我们不需要重新训练模型即可让模型完成一些以前没有见过的任务。而这,只需要对模型的输入做调整,或者给出一些示例即可。
然而,这种方法对于普通用户来说既是一种相当方便的方式,也是一种无奈之举。例如,当你有大量的私有数据,或者是在一个不那么广为人知的专业领域。大模型的应用经常会遇到很多问题。因此,在这种情况下,基于现有的大模型在特定领域的数据集进行微调是一种更好的解决方案。

上图展示了三种微调方法。第一种是利用预训练模型抽取原始数据特征,然后将抽取的特征应用在下游任务上。第二种是冻结预训练模型部分权重,针对特定任务更新一个或者多个全连接层。最后一种方式则是不改变预训练模型架构,更新所有的权重。
显然,在大模型时代,冻结模型大部分权重,利用模型在大量数据学习到的知识,针对部分特定数据集更新模型权重是一种两全其美的方案。
不过,微调大模型并不是一件简单的事情。首先,如今大模型的参数少则几十亿,多则几千亿,加载模型都是一种消耗资源的方式,更不用说微调了。例如,微调650亿参数规模的LLaMA模型需要780G显存。另外,微调大模型需要加载模型源代码,这也不是一件很容易的事情。
Lit-Parrot的提出也是为了降低大模型微调的门槛。
二、Lit-Parrot🦜简介
Lit-Parrot是由LightningAI开源的一个大模型微调Python库。这是一个完全开源可商用的Python库,遵循Apache 2.0协议。
Lit-Parrot是一个很简单Python库,它帮助我们集成了目前开源界最强大的几个大语言模型,内置了微调这些大模型的编程接口,对于我们使用者来说,只需要准备好数据集即可微调我们想微调的大模型。目前,Lit-Parrot发布不到3周时间,已经支持如下4个开源模型:
- StableLM:这是由著名的StabilityAI发布的语言模型,对,就是那个开发了Stable Diffusion模型的公司!https://www.datalearner.com/ai/pretrained-models/StableLM
- Pythia:Pythia是由EleutherAI开源的一组预训练大模型,是业界非常著名的开源大模型,由于其完全的开放性和高质量的数据集被大家所经常使用。https://www.datalearner.com/ai/pretrained-models/Pythia
- Redpajama-INCITE:这是TOGETHER发布的大模型,昨天刚发布7B版本已经是目前开源界最强大的模型了:https://www.datalearner.com/ai-models/pretrained-models/RedPajama-INCITE-3B
- Falcon:这是最近突然出现的一个非常优秀的开源大模型,基于1万亿tokens数据集训练,效果超过LLaMA:https://www.datalearner.com/ai-models/pretrained-models/Falcon-40B
可以看到,上述4个模型中都是目前开源界最强大的几个模型,而且十分的新颖。其中Falcon是5月24日刚发布的在HuggingFace OpenLLM上排行第一的模型,效果甚至超过了LLaMA。而RedPajama也是昨天发布了完整的7B版本模型,效果也似乎好于Falcon和LLaMA同等规模版本模型。而上述四个模型应该都是完全开源可商用的模型!都是基于Apache2.0协议开源!
除了支持这几个最强大的开源模型微调外,Lit-Parrot开发的原则也很吸引人,其特点和目标如下:
- 简单易用:只需要单个文件即可实现模型微调
- 正确性:使用量化技术微调,但效果要和原始模型一样
- 性能优化:可以在消费级硬件运行,并且可扩展性强
- 完全开源:没有任何附加条件!
从上面这些目标和特点来看,Lit-Parrot是一个非常有野心的模型,而且易用性和性能都非常强悍。因此,他们官方也宣称,避免代码的重复并不是他们的目标!代码的可读性和可破解性才是Lit-Parrot的目标!
三、Lit-Parrot🦜的使用方法
Lit-Parrot的使用非常简单。首先,Lit-Parrot是建立在Lit-LLaMA和nanoGPT基础上的,由Lightning Fabric支持。它依赖FlashAttention。Lit-Parrot可以部署在GPU上,也支持在CPU上运行。主要的步骤如下:
3.1、安装Lit-Parrot
需要先安装torch2.1及以上的版本,以及FlashAttention,然后安装即可。方法如下:
# 下载Lit-Parrot项目
git clone https://github.com/Lightning-AI/lit-parrot
# 进入项目目录
cd lit-parrot
# 安装CUDA版本的torch
pip install --index-url https://download.pytorch.org/whl/nightly/cu118 --pre 'torch>=2.1.0dev'
# 也可以选择CPU版本的torch
pip install --index-url https://download.pytorch.org/whl/nightly/cpu --pre 'torch>=2.1.0dev'
# 最后,安装所有的依赖以及Lit-Parrot
pip install -r requirements.txt
注意,上述最后一个步骤的requirements.txt文件在Lit-Parrot项目中,只要你下载了就可以看到。
3.2、下载预训练模型的权重
显然,要想微调大模型,第一步还是要下载已经训练好的模型权重。目前支持的模型和下载链接如下:
需要注意的是,这里的每个模型都有多个版本,有些版本不支持商用的,需要鉴别。例如,StableLM就有基于vicuna的版本,不要用错了。而且,目前的4个模型中也只有StableLM支持中文。
3.3、准备微调需要的数据集
Lit-Parrot的微调数据集很简单,就是如下格式:
[
{
"instruction": "Arrange the given numbers in ascending order.",
"input": "2, 4, 0, 8, 3",
"output": "0, 2, 3, 4, 8"
},
...
]
其中,instruction是指令,input是输入,output是期望的输出。你的数据集按照这个形式准备即可!
3.4、执行微调命令
当前面的步骤准备好之后,直接运行微调脚本即可。命令如下:
python finetune/adapter.py \
--data_dir data/mydata/ \
--checkpoint_dir checkpoints/stabilityai/stablelm-base-alpha-3b \
--out_dir data/mydata-finetuned
可以看到,就要一条命令,加上3个参数即可,第一个参数data_dir
是你自己的前面的数据集,第二个参数checkpoint_dir
是你预训练模型下载的位置,第三个参数out_dir
是你模型微调结果的输出。
做完这些你就可以得到一个在自己数据集上微调的模型了!
根据官方的数据,Lit-Parrot性能非常强大。由于Lit-Parrot支持量化微调LLaMA Adpater,400亿参数的Falcon正常情况下,在Alpaca指令数据集上微调需要8个A100 GPU运行30个小时。而使用Lit-Parrot只需要30分钟!
Lit-Parrot的推理性能也很好,它比官方的Falcon的推理速度提高20%:

Lit-Parrot🦜总结
从前面的描述中我们也可以看到Lit-Parrot的强大和易用。不过,目前它的缺点也很明显:支持的主流模型很少,支持中文的模型只有StableLM。
不过,由于Lit-Parrot发布时间很短(不到3周),相信未来会有更多的模型可以一键微调。而且我在官方发也问过LightningAI的CTO一些未来的计划,其中明确表示会支持最近的QLoRA和SqRA!这两个技术可以让大家在消费级显卡上微调更大的模型!在单张专业级显卡(48G)上微调650亿参数规模的模型!非常值得期待!
建议有微调诉求的童鞋紧密关注Lit-Parrot发展!
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
