分享

AI进化太快,我要学不动了。。。

 黄爸爸好 2023-05-31 发布于上海

大家好,我是 Jack。

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 的技术加上深度的量化过程。核心优化思想包括以下三点:

  1. 4bit NoramlFloat Quantization :一种新的数据类型,只用 4 字节表征参数并且保证整个模型的精度损失极小。(和我们之前的 int8, int4 量化方式不同, 原理这篇先不展开了)
  2. Double Quantization :对第一次量化后的那些常量再进行一次量化,减少存储空间。
  3. Paged optimizers : 使用 NVIDIA 统一内存功能,该功能在 CPU 和 GPU 之间进行自动 page 对 page 传输,以便在 GPU 偶尔 OOM 的情况下进行. 可以从现象上理解成出现训练过程中偶发 OOM 时能够自动处理,保证训练正常训练下去。

只能说,太厉害了,这 GPU 的的成本大大大大缩减。EleutherAI/pythia-12b 推理只需 12G, finetune 也只需 23G. 单个 3090 就能搞定了。

QLoRA 技术让 65B 参数训练从 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、推理就是直接 跑sh scripts/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:///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以上模型.

图片

使用 QLoRA 在 3090 显卡上跑 12B 模型的 finetune。

图片
图片
单卡23G即可finetune pythia-12b

以上内容整理自:

52AI:https://zhuanlan.zhihu.com/p/632398047

奉孝翼德:https://zhuanlan.zhihu.com/p/610031713

总结

QLoRA 的出现进一步节省了训练成本,再结合能够指导网络更快收敛的优化器,训练成本大幅降低。

全民都能训大模型的时代,指日可待,就像现在训练分类、检测、分割网络一样。

好了,今天就聊这么多吧,我是 Jack,我们下期见!

图片
·················END·················

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多