康奈尔大学发布在一张显卡上微调650亿参数大模型的框架:LLMTune

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

  • LLMTune简介
  • LLMTune的使用方法
  • 1、安装LLMTune
  • 2、下载预训练结果文件
  • 3、下载数据集
  • 4、微调模型
  • LLMTune微调总结
  • 大模型高效微调总结

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的功能包括:

  1. 对多个LLM的模块化支持(目前支持MetaAI开源的2个模型,LLaMA和OPT)
  2. 支持广泛的消费级NVIDIA的GPU显卡(包括RTX系列、A系列、GTX系列等)
  3. 代码库微小且易于使用(整个源代码仅64k大小)

Cornell Tech开源LLMTune的最终目的是为了提供一个可以简单微调大模型的平台,并促进LLM相关的研究。

LLMTune的使用方法

LLMTune底层实现了LoRA算法,它依赖的库也很少,主要包括:

注意,LLMTune目前仅支持在NVIDIA显卡上的微调,所以上述PyTorch也需要cuda版本才可以使用。具体的LLMTune要求如下:

使用方法也很简单,首先从官方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支持的模型规模和所需要的显存大小:

未来,LLMTune还将陆续增加如下功能:

  • 支持直接从HuggingFace hub中直接载入模型
  • 开箱即用地支持更多的LLM
  • 接口优化,如自动停止等
  • 自动量化脚本

大模型高效微调总结

LLMTune的出现让我们看到了在消费级显卡上进行大模型微调的可能。除了它以外也有一些大模型的微调工作在进行中。其中比较值得期待的是华盛顿大学的博士生Tim Dettmers正在进行的工作。与LLMTune类似,他们即将发表的大模型微调技术,QLoRA正在招募测试,可以用48GB显存微调650亿参数规模大模型。按照他的描述,他们做的工作包括三部分:

  1. 4-bit Normal Float:一个信的用于压缩的数据类型
  2. Paged优化器:内存优化技术
  3. 双量化:量化后再量化

不过,具体的技术细节还未公布,目前只是招募测试人员提前测试技术,我们保持密切关注。

从近期的发展看,大模型的微调成本继续在下降,未来单张显卡训练650亿参数模型应该是可以达到的。我们后续将测试这种微调技术的效果。

举报
评论 0