文章目录
- 前言
- 一、LoRA
- 二、QLoRA
- 1、环境准备
- 2、推理就是直接 跑shscripts/generate.sh。
- 3、前面的环境和数据都没问题了,运行scripts/generate.sh。
- 总结
前言
AI 领域的技术,真是隔一段时间就有一个新突破!
全民都能训练大模型的时代,指日可待了!
一、LoRA
在讲解新突破之前,先简单科普下 LoRA。
LoRA,英文全称 Low-Rank Adaptation of Large Language Models,直译为大语言模型的低阶适应,这是微软的研究人员为了解决大语言模型微调而开发的一项技术。
后来,LoRA 不仅被应用于大语言模型,还适配应用到了 Stable Diffusion。
LoRA 的使用,大幅节省了微调的成本。比如 GPT-3 有 1750 亿参数,为了让它能干特定领域的活儿,需要做微调,但是如果直接对 GPT-3 做微调,成本太高太麻烦了。
LoRA 的做法是,冻结预训练好的模型权重参数,然后在每个 Transformer 块里注入可训练的层,由于不需要对模型的权重参数重新计算梯度,这样就大大减少了需要训练的计算量。
LoRA 就好比是一个插件,可以帮助我们低成本的定制各种效果。
今天的主角,则是在 LoRA 基础上再进一步,加上了深度的量化过程,名为 QLoRA。
二、QLoRA
QLoRA 其实是核心就是在 LoRA 的技术加上深度的量化过程。核心优化思想包括以下三点:
4bit NoramlFloat Quantization :一种新的数据类型,只用 4 字节表征参数并且保证整个模型的精度损失极小。(和我们之前的 int8, int4 量化方式不同, 原理这篇先不展开了)
Double Quantization :对第一次量化后的那些常量再进行一次量化,减少存储空间。
Paged optimizers : 使用 NVIDIA 统一内存功能,该功能在 CPU 和 GPU 之间进行自动 page 对 page 传输,以便在 GPU 偶尔 OOM 的情况下进行. 可以从现象上理解成出现训练过程中偶发 OOM 时能够自动处理,保证训练正常训练下去。
只能说,太厉害了,这 GPU 的的成本大大大大缩减。EleutherAI/pythia-12b 推理只需 12G, finetune 也只需 23G. 单个 3090 就能搞定了。
QLoRA 技术让 650B 参数训练从 780G 降到 48G,再结合一些新的优化器,比如 Sophia,可以让模型训练 adma 提速 2 倍。
两者一结合,咱们也能训练大模型的日子,指日可待了!
项目地址:
https://github.com/artidoro/qlora
有位某乎网友,对 QLoRA 进行了实测。
我们知道 120 亿参数量的 pythia-12b,想要运行起来,需要至少 48G 显存,但是使用 QLoRA 之后,只需要 12.8G 显存。
以下是实测记录:
1、环境准备
代码如下(示例):
git clone https://github.com/artidoro/qlora.git
conda create -n qenv python-3.8
conda activate qenv
cd qlora
pip install -r requirements.txt
#项目涉及到的新代码,都需要从源码进行安装才能保证。这里有同学网络不好的或者安装失败的可参见遇到的问题手动安装
pip install -q -U bitsandbytes
pip install -q -U git+https://github.com/huggingface/transformers.git
pip install -q -U git+https://github.com/huggingface/peft.git
pip install -q -U git+https://github.com/huggingface/accelerate.git
2、推理就是直接 跑shscripts/generate.sh。
这里建议先下载好模型和数据。避免老断带来的心情烦躁。网络好的下载顺畅的可跳过此部分。
EleutherAI/pythia-12b(需要24G存储)模型介绍:
EleutherAI 是一个非营利性的人工智能研究实验室,专注于大型模型的可解释性和对齐性。pythia 是 EleutherAI 为了促进 LLM 的研究开源的一系列 LLM(70M, 160M, 410M, 1B, 1.4B, 2.8B, 6.9B, and 12B)。
#单独起一个脚本就下载模型和数据。
# test.py
#模型下载也可网上找那种不下到默认目录的。缓存目录: ll ~/.cache/huggingface/hub/models--EleutherAI--pythia-12b/
from transformers import (
AutoModelForCausalLM,
)
model = AutoModelForCausalLM.from_pretrained("EleutherAI/pythia-12b")
# download dataset.
#这里联网下载不下来的,手动下载地址 https://huggingface.co/datasets/tatsu-lab/alpaca/tree/main/data
# 就把24M数据下载下来, mkdir -p tatsu-lab/alpaca , 然后下载好数据丢里面就行
from datasets import load_dataset
dataset = load_dataset("tatsu-lab/alpaca")
3、前面的环境和数据都没问题了,运行scripts/generate.sh。
显存大小:EleutherAI/pythia-12b 推理只需要显存12.8G. 好强,我跑的第一个10B以上模型.
以上内容整理自:
52AI:https://zhuanlan.zhihu.com/p/632398047
奉孝翼德:https://zhuanlan.zhihu.com/p/610031713
总结
QLoRA 的出现进一步节省了训练成本,再结合能够指导网络更快收敛的优化器,训练成本大幅降低。
全民都能训大模型的时代,指日可待,就像现在训练分类、检测、分割网络一样。
好了,今天就聊这么多吧,我是 徐浪,我们下期见!