​华盛顿大学提出全新量化和微调方法,在DB-GPT上享受33B参数的LLM

华盛顿大学提出了QLoRA,这是一种针对大语言模型(LLM)的低精度量化和微调技术。QLoRA在保持性能的同时,减少了内存使用,使得在单个48GB GPU上可以微调65B参数模型。QLoRA的核心包括4-bit NormalFloat(NF4)量化、Double Quantization和Paged Optimizers。作者已在huggingface上发布了使用QLoRA训练的Guanaco模型,其中33B和65B模型可以直接使用,且在Vicuna基准测试中表现优秀。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

66f22bb402ec9f57635cd64343a888bf.gif

©PaperWeekly 原创 · 作者 | 张洪洋

单位 | 西南财经大学硕士

研究方向 | AIGC

e8bc2e2ec3081a45b03294ab26a6431e.png

背景

大型语言模型(LLM)的发展日新月异,是近年来自然语言处理(NLP)领域的热门话题,LLM 可以通过大规模的无监督预训练来学习丰富的语言知识,并通过微调来适应不同的下游任务,从而在各种 NLP 任务上取得了令人瞩目的性能。

然而,LLM 也带来了一些挑战,其中一个便是它们的巨大规模和高昂的计算成本。例如,微调 LLaMA 的 65B 模型需要超过 780G 的显存,在 BLOOM-176B 上进行推理,需要 8 个 80GB 的 A100 gpu(每个约 1.5 万美元)。这远远超出了普通用户和研究者的可用资源。虽然最近出现的一些量化方法可以减少 LLM 的内存占用量,但是这些技术仅适用于推理,并不适合在训练过程中使用。因此,如何在保持或提高性能的同时,降低 LLM 的内存占用和训练时间,是一个急需解决的问题。

a0ef4671b206f6e2e474c947a5b00b36.png

5 月 24 日华盛顿大学在《QLORA: Efficient Finetuning of Quantized LLMs》这篇文章中提出了一种针对 LLM 的低精度量化和高效微调技术,可以在保证完整的 fp16 的微调任务性能的同时,减少内存使用,从而能够在单个 48GB 显存的  GPU 上微调 65B 参数模型

作者 Tim Dettmers 在 huggingface 上已经公布了他们利用 QLoRA 方法训练的系列模型 Guanaco,其中 33b 和 65b 的模型可以直接下载使用,7b 和 13b 的模型需要和对应的 LLaMA 模型进行参数融合。同时作者表明 Guanaco 在 Vicuna 基准测试中的表现超过了所有以前公开发布的模型,在 24 小时内微调的 Guanaco 65B 大模型甚至能够达到 GPT4 性能水平的 99.3%。以下是华盛顿大学的作者所公布的数据:

b014f4f9adc53931d746d41d73977d66.png

02f4707a7f8a663eb32457960290e328.png

看到这里相信有很多同学已经按捺不住准备去尝试了,但如果我告诉你只要 5 元就可以在 DB-GPT 上部署自己的 Guanaco 33b 模型呢 🔥 在安全隐私的环境下拥有如此一个强大的模型将对个人知识库将带来怎样的改变?不妨先耐着性子看完以下介绍 😊😊

82949ef69de765934eb248a9c6247775.png

QLoRA

总的来说 QLoRA 使用一种低精度的存储数据类型(NF4)来压缩预训练的语言模型。通过冻结 LM 参数,将相对少量的可训练参数以 Low-Rank Adapters 的形式添加到模型中,LoRA 层是在训练期间更新的唯一参数,使得模型体量大幅压缩同时推理效果几乎没有受到影响。

QLoRA 的核心技术有三个:4-bit NormalFloat(NF4)量化、Double Quantization 和 Paged Optimizers。QLoRA 的 Q 其实已经很明显的说明了量化(Quantize)技术,所以我们首先简单了解一下量化。

2.1 核心技术

模型的大小通常由其参数的数量及其精度决定,常见的精度有全精度 float32(FP32)、半精度 float16(FP16)和 bfloat16(BF16)、英伟达的 TF32。

  • FP32:单精度浮点数,用 8bit 表示指数,23bit 表示小数。使用此数据类型,可以表示各种浮点数,并且支持大多硬件。

  • FP16:半精度浮点数,用 5bit 表示指数,10bit 表示小数。FP16 表示整数范围较小,但是尾数精度较高。

  • BF16:是对 FP32 单精度浮点数截断数据,用 8bit 表示指数,7bit 表示小数。BF16 可表示的整数范围与 FP32 一样广泛。但只有新的硬件(A100\3090\4090 等)才支持,V100/昇腾910等不支持

  • TF32:将 BF16 的动态范围和 FP16 的精度相结合,只使用19位。它目前仅在某些操作期间在内部使用。

849e4d8dd38e4da3ae30262c1a5f9fdf.png

在 ARM NEON 指令集中,一条指令最多 load 128bit 数据,则对于 FP32 的数据,一次性最多支持 4 个数据的并行计算;对 FP16/BF16 数据,一次性最多支持 8 个数据的并行计算,那么在计算中,FP16/BF16 的性能峰值应该是 FP32 的两倍

而且,实验表明 FP16/BF16 往往能够在模型大小减半的情况下还能获得和 FP32 模型几乎相同的推理结果,这种惊人的效果吸引着众多研究人员前往更深的领域——FP8、FP4、FP2、FP1。许多量化的技术也逐渐引入了大模型的研究中。

2.1.1 LLM.int8 量化

量化的本质实际是从一种数据类型舍入到另一种数据类型,通常包含量化和反量化两步,假如我们有两组数据类型 A、B,A 可以表示的数值为 [0, 1, 2, 3, 4, 5],B 可以表示的数值为 [0, 2, 4]。我们要做的便是:

  • 将数据范围从 A 标准化为 B。数据类型 A 表示的向量为 [3, 1, 2, 3]。

    • 找到向量 [3, 1, 2, 3] 的最大绝对值 3

    • 向量 [3, 1, 2, 3] 除以最大值 3:[3, 1, 2, 3]->[1, 0.33, 0.66, 1.0]

    • 将向量 [1, 0.33, 0.66, 1.0] 与 B 的数据范围 4 相乘:[1, 0.33, 0.66, 1.0]->[4.0, 1.33, 2.66, 4.0]

    • 将向量 [4.0, 1.33, 2.66, 4.0] 中的每个值用 B 中最接近的数值表示:[4.0, 1.33, 2.66, 4.0] -> [4, 0, 2, 4]。

  • 用 B 中最接近的数值表示 A 。

    • [4, 0, 2, 4] 除以 4->[1.0, 0.0, 0.5, 1.0]

    • 乘以量化过程中找到的最大的绝对值:[1.0, 0.0, 0.5, 1.0] -> [3.0, 0.0, 1.5, 3.0]

    • 近似表示:[3.0, 0.0, 1.5, 3.0] -> [3, 0, 2, 3]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值