QLoRA:量化 LLM 的高效微调

这篇具有很好参考价值的文章主要介绍了QLoRA:量化 LLM 的高效微调。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

此 repo 支持论文“QLoRA:量化 LLM 的高效微调”,旨在使对 LLM 研究的访问民主化。

QLoRA 使用bitsandbytes进行量化,并与 Hugging Face 的PEFT和transformers库集成。QLoRA 由华盛顿大学 UW NLP 小组的成员开发。

概述

我们介绍了 QLoRA,这是一种有效的微调方法,可以减少内存使用量,足以在单个 48GB GPU 上微调 65B 参数模型,同时保留完整的 16 位微调任务性能。QLoRA 通过冻结的 4 位量化预训练语言模型将梯度反向传播到低阶适配器 (LoRA)。我们最好的模型系列,我们命名为 Guanaco,在 Vicuna 基准测试中优于所有以前公开发布的模型,达到 ChatGPT 性能水平的 99.3%,同时只需要在单个 GPU 上进行 24 小时的微调。QLoRA 引入了许多创新来节省内存而不牺牲性能:(a) 4 位 NormalFloat (NF4),一种新的数据类型,理论上是正态分布权重的最佳信息(b)双量化通过量化量化常量来减少平均内存占用,以及(c)分页优化器来管理内存峰值。我们使用 QLoRA 对 1,000 多个模型进行微调,提供跨 8 个指令数据集、多种模型类型(LLaMA、T5)和无法通过常规微调运行的模型规模(例如 33B 和65B参数模型)。我们的结果表明,即使使用比以前的 SoTA 更小的模型,QLoRA 在小型高质量数据集上进行微调也会产生最先进的结果。我们提供了基于人类和 GPT-4 评估的聊天机器人性能的详细分析,表明 GPT-4 评估是人类评估的廉价且合理的替代方案。此外,我们发现当前的聊天机器人基准测试无法准确评估聊天机器人的性能水平。我们发布了所有模型和代码,包括用于 4 位训练的 CUDA 内核。

许可和预期用途

我们根据 MIT 许可在此存储库中发布与 QLoRA 微调相关的资源。此外,我们还发布了用于 7B、13B、33B 和 65B 基本 LLaMA 模型尺寸的 Guanaco 模型系列。这些模型旨在用于符合 LLaMA 许可证的目的,并且需要访问 LLaMA 模型。

演示

Guanaco 是一个纯粹用于研究目的的系统,可能会产生有问题的输出。

  1. 在此处访问现场演示。注意这里是33B型号,65B型号的demo稍后会有。

  2. 或者使用此笔记本直接在 Colab 中托管您自己的 Guanaco gradio 演示。适用于 7B 和 13B 型号的免费 G​​PU。

  3. 或者,您能区分 ChatGPT 和 Guanaco 吗?试一试!您可以在此处访问模型响应 Colab,在 Vicuna 提示上比较 ChatGPT 和 Guanaco 65B。

安装

要使用 transformers 和 bitsandbytes 加载 4 位模型,您必须从源代码安装加速器和 transformers,并确保您拥有最新版本的 bitsandbytes 库 (0.39.0)。安装 PyTorch 后(按照此处的说明操作),您可以使用以下命令实现上述目标:

pip install -U -r requirements.txt

入门

qlora.py代码是对各种数据集进行微调和推理的起点。在羊驼数据集上微调基线模型的基本命令:

python qlora.py --model_name_or_path <path_or_name>

对于大于 13B 的模型,我们建议调整学习率:

python qlora.py –learning_rate 0.0001 --model_name_or_path <path_or_name>

要复制我们的 Guanaco 模型,请参见下文。

教程和演示

这是一篇讨论 4 位量化、QLoRA 以及它们如何集成到转换器中的博客。

您可以按照此笔记本直接在 Colab 中托管自己的 gradio Guanaco 演示。此外,以下是 Colab 笔记本,其中包含使用 QLoRA 进行推理和微调的示例:

  • 推理笔记本
  • 微调笔记本

其他示例位于该examples/文件夹下。

量化

BitsandbytesConfig量化参数由(参见 HF 文档)控制,如下所示:

  • 通过激活加载 4 位load_in_4bit
  • 用于线性层计算的数据类型bnb_4bit_compute_dtype
  • 嵌套量化是通过激活bnb_4bit_use_double_quant
  • 用于量化的数据类型用 指定bnb_4bit_quant_type。请注意,有两种支持的量化数据类型fp4(四位浮点数)和nf4(普通四位浮点数)。后者在理论上对于正态分布的权重是最优的,我们建议使用nf4.
    model = AutoModelForCausalLM.from_pretrained(
        model_name_or_path='/name/or/path/to/your/model',
        load_in_4bit=True,
        device_map='auto',
        max_memory=max_memory,
        torch_dtype=torch.bfloat16,
        quantization_config=BitsAndBytesConfig(
            load_in_4bit=True,
            bnb_4bit_compute_dtype=torch.bfloat16,
            bnb_4bit_use_double_quant=True,
            bnb_4bit_quant_type='nf4'
        ),
    )

分页优化器

您可以使用参数访问分页优化器--optim paged_adamw_32bit

原驼微调

您可以选择--dataset oasst1加载用于训练 Guanaco 的 OpenAssistant 数据集。您还可以在 HF 上的timdettmers/openassistant-guanaco找到它。

我们包括用于重现 Guanaco 模型训练的超参数的脚本,用于各种大小./scripts/finetune_guanaco*.sh。确保进行调整per_device_train_batch_sizegradient_accumulation_steps使他们的乘积为 16,并且训练适合您的 GPU。

使用本地数据集

您可以使用参数指定数据集的路径--dataset。如果--dataset_format未设置参数,它将默认为羊驼格式。这里有一些例子:

  • 使用羊驼格式数据集进行训练:
    python qlora.py --dataset="path/to/your/dataset"
  • 使用自指导格式数据集进行训练:
    python qlora.py --dataset="path/to/your/dataset" --dataset_format="self-instruct"

多GPU

多 GPU 训练和推理通过 Hugging Face 的 Accelerate 开箱即用。请注意,per_device_train_batch_sizeper_device_eval_batch_size参数是全局批量大小,不像它们的名字所暗示的那样。

在多个 GPU 上加载用于训练或推理的模型时,您应该将类​​似以下的内容传递给AutoModelForCausalLM.from_pretrained()

device_map = "auto"
max_memory = {i: '46000MB' for i in range(torch.cuda.device_count())}

示例输出

我们为文件夹中的 OA 和 Vicuna 查询提供论文中描述的模型的生成eval/generations。这些旨在促进对模型评估和分析的进一步研究。

你能区分 ChatGPT 和 Guanaco 吗?试一试!您可以在此处访问模型响应 Colab,在 Vicuna 提示上比较 ChatGPT 和 Guanaco 65B。

评估

我们包括改编自 FastChat 存储库的脚本,以使用 GPT-4 自动评估模型生成。我们包括用于与 ChatGPT 进行比较的脚本,得分为 10 分,以及带有三类标签(赢、松或平)的“成对比较”。这些可以在文件夹中找到eval

为了促进我们在该领域的评估和未来工作的复制,我们发布了 GPT-4 和我们系统的人工评级。这些位于eval/ratings-human和下eval/ratings-gpt4

可以在 找到更多详细信息eval/EVAL_README.md

已知问题和限制

这里是已知问题和错误的列表。如果您的问题未在此处报告,请打开一个新问题并描述问题。

  1. 4 位推理很慢。目前,我们的 4 位推理实现尚未与 4 位矩阵乘法集成
  2. 使用 HF 当前不支持的训练器恢复 LoRA 训练运行。
  3. 目前,使用bnb_4bit_compute_type='fp16'会导致不稳定。对于 7B LLaMA,只有 80% 的微调运行完成且没有错误。我们有解决方案,但它们尚未集成到 bitsandbytes 中。
  4. 确保tokenizer.bos_token_id = 1避免生成问题。
  5. 如果遇到此问题(“非法内存访问”),则应使用更新的 HF LLaMA 转换或降级 PyTorch 版本。

引用

@article{dettmers2023qlora,
  title={QLoRA: Efficient Finetuning of Quantized LLMs},
  author={Dettmers, Tim and Pagnoni, Artidoro and Holtzman, Ari and Zettlemoyer, Luke},
  journal={arXiv preprint arXiv:2305.14314},
  year={2023}
}

5月24日华盛顿大学的研究者发布了QLoRA技术及用其生成的Guanaco大模型。在Vicuna基准测试中表现优于所有先前公开发布的模型,达到ChatGPT性能水平的99.3%,仅需要单个GPU上的24小时微调时间。业界一片叫好。

QLoRA:量化 LLM 的高效微调

参考及资源链接:

代码:https://github.com/artidoro/qlora

量化代码:GitHub - TimDettmers/bitsandbytes: 8-bit CUDA functions for PyTorch

PEFT: https://github.com/huggingface/peft

Transformer:https://github.com/huggingface/transformers/

模型:timdettmers (Tim Dettmers)

BLOG : Making LLMs even more accessible with bitsandbytes, 4-bit quantization and QLoRA

论文:[2305.14314] QLoRA: Efficient Finetuning of Quantized LLMs (arxiv.org)

Demo环境:Guanaco Playground Tgi - a Hugging Face Space by uwnlp

QLoRA:量化 LLM 的高效微调

Basic usage Google Colab notebook - This notebook shows how to use 4bit models in inference with all their variants, and how to run GPT-neo-X (a 20B parameter model) on a free Google Colab instance

Fine tuning Google Colab notebook - This notebook shows how to fine-tune a 4bit model on a downstream task using the Hugging Face ecosystem. We show that it is possible to fine tune GPT-neo-X 20B on a Google Colab instance!

Original repository for replicating the paper's results

Guanaco 33b playground

以下内容主要来自论文QLoRA: Efficient Finetuning of Quantized LLMs和其他资料。

摘要:

我们提出了一种高效的微调方法QLORA,可以在单个48GB GPU上减少内存使用量,同时保持完整的16位微调任务性能,从而对一个拥有65B参数的模型进行微调。QLORA通过将梯度反向传播到冻结的4位量化预训练语言模型中,进而传递到低秩适配器(LoRA)。我们的最佳模型系列被命名为Guanaco,在Vicuna基准测试中表现优于所有先前公开发布的模型,达到ChatGPT性能水平的99.3%,仅需要单个GPU上的24小时微调时间。QLORA引入了一些创新来节省内存而不牺牲性能:(a)4位NormalFloat(NF4),这是一种对于正态分布权重来说在信息论上是最优的数据类型;(b)双量化,通过量化量化常数来减少平均内存占用;以及(c)分页优化器,用于管理内存峰值。我们使用QLORA对1,000多个模型进行微调,并对8个指令数据集、多个模型类型(LLaMA、T5)和模型规模进行了详细的指令追踪和聊天机器人性能分析,这在常规微调中是不可行的(例如33B和65B参数模型)。我们的结果表明,QLoRA在一个小型高质量数据集上进行微调可以获得最先进的结果,即使使用的模型比先前的最优模型要小。我们基于人工和GPT-4评估对聊天机器人性能进行了详细分析,结果显示GPT-4评估是评估聊天机器人的廉价且合理的替代方法。此外,我们发现当前的聊天机器人基准测试不能准确评估聊天机器人的性能水平。通过一项详细的分析,我们展示了Guanaco与ChatGPT相比存在的失败之处。我们公开发布了我们的所有模型和代码,包括4位训练的CUDA核心。

1 引言

微调大型语言模型(LLMs)是提高它们性能的一种高效方法[40, 62, 43, 61, 59, 37],也可以添加期望的行为或去除不可取的行为[43, 2, 4]。然而,对于非常大的模型,常规的16位微调是成本过高的;对LLaMA 65B参数模型[57]的常规16位微调需要超过780GB的GPU内存。尽管最近的量化方法可以减少LLMs的内存占用[14, 13, 18, 66],但这些技术只适用于推理阶段,在训练阶段会失效[65]。

我们首次证明了可以在不降低性能的情况下微调量化的4位模型。我们的方法QLORA使用一种新的高精度技术将预训练模型量化为4位,然后通过反向传播梯度来调整量化权重集合中的一小组可学习低秩适配器权重[28]。

QLORA将微调65B参数模型的平均内存需求从>780GB的GPU内存降低到<48GB,与完全微调的16位基准相比,既不降低运行时间也不降低预测性能。这标志着LLM微调的可及性出现了重大变化:现在可以在单个GPU上微调迄今为止最大的公开可用模型。使用QLORA,我们训练了Guanaco模型系列,其中第二好的模型在Vicuna[10]基准测试上达到了ChatGPT性能水平的97.8%,而在单个消费级GPU上的微调时间不到12小时;在单个专业级GPU上的24小时内,我们的最大模型达到了99.3%,基本上缩小了与Vicuna基准测试上的ChatGPT之间的差距。在部署时,我们最小的Guanaco模型(7B参数)仅需要5GB内存,在Vicuna基准测试上比26GB的Alpaca模型高出20个百分点以上(表6)。

QLORA引入了多个创新,旨在减少内存使用而不牺牲性能:(1)4位NormalFloat,一种信息论上对于正态分布数据来说最优的量化数据类型,其实际结果比4位整数和4位浮点数更好。 (2)双量化(Double Quantization),一种量化量化常数的方法,平均每个参数节省约0.37位(65B模型约为3GB)。 (3)分页优化器(Paged Optimizers),使用NVIDIA统一内存来避免在处理具有长序列长度的小批量时出现的梯度检查点内存峰值。我们将这些贡献结合到更好调整的LoRA方法中,其中包括在每个网络层中使用适配器,从而避免了先前工作中出现的几乎所有精度权衡取舍(accuracy tradeoffs)的问题。

QLORA的高效性使我们能够对指令微调和聊天机器人性能进行深入研究,这在常规微调中由于内存开销是不可能的。因此,我们在几个指令微调数据集、模型架构和参数大小在80M到65B之间训练了1,000多个模型。除了展示QLORA恢复了16位性能(§4)和训练了最先进的聊天机器人Guanaco(§5),我们还分析了训练模型的趋势。首先,我们发现数据质量远比数据集大小更重要,例如,一个9k样本的数据集(OASST1)在聊天机器人性能上优于一个450k样本的数据集(FLAN v2,子采样),即使两者都旨在支持指令跟踪泛化。其次,我们显示了强大的Massive Multitask Language Understanding(MMLU)基准性能并不意味着强大的Vicuna聊天机器人基准性能,反之亦然,换句话说,对于给定任务,数据集的适用性比大小更重要。

此外,我们还对聊天机器人性能进行了详细分析,同时使用人工评估者和GPT-4进行评估。我们采用了锦标赛风格的基准测试,其中模型在比赛中互相竞争,为给定提示产生最佳回答。一场比赛的获胜者由GPT-4或人工注释员评判。锦标赛结果被汇总为Elo分数[16, 17],确定聊天机器人性能的排名。我们发现,在锦标赛中,GPT-4和人工评估在模型性能的排名上基本一致,但我们也发现存在强烈分歧的情况。因此,我们强调基于模型的评估虽然提供了与人工注释相比的廉价替代方案,但也存在不确定性。

我们通过定性分析Guanaco模型来增强我们的聊天机器人基准测试结果。我们的分析突出了定量基准测试未能捕捉到的成功和失败案例。我们公开发布所有带有人工和GPT-4注释的模型,以促进进一步的研究。我们开源我们的代码库和CUDA核心,并将我们的方法整合到Hugging Face的transformers堆栈[64]中,使其易于访问。我们发布了7/13/33/65B大小模型的适配器集合,这些模型在8个不同的指令跟踪数据集上进行了训练,总共有32个不同的开源微调模型。文章来源地址https://www.toymoban.com/news/detail-473125.html

到了这里,关于QLoRA:量化 LLM 的高效微调的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LLMs:LLaMA Efficient Tuning(一款可高效微调【全参数/LoRA/QLoRA】主流大模型【ChatGLM2/LLaMA2/Baichuan等】的高效工具【预训练+指令监督微调+

    LLMs:LLaMA Efficient Tuning(一款可高效微调【全参数/LoRA/QLoRA】主流大模型【ChatGLM-2/LLaMA-2/Baichuan等】的高效工具【预训练+指令监督微调+奖励模型训练+PPO 训练+DPO 训练】)的简介、安装、使用方法之详细攻略 目录 相关文章 LLMs之ChatGLM:ChatGLM Efficient Tuning(一款高效微调ChatGLM-6B/Ch

    2024年02月09日
    浏览(52)
  • LLMs:LLaMA Efficient Tuning(一款可高效微调【全参数/LoRA/QLoRA】主流大模型【ChatGLM-2/LLaMA-2/Baichuan等】的高效工具【预训练+指令监督微

    LLMs:LLaMA Efficient Tuning(一款可高效微调【全参数/LoRA/QLoRA】主流大模型【ChatGLM-2/LLaMA-2/Baichuan等】的高效工具【预训练+指令监督微调+奖励模型训练+PPO 训练+DPO 训练】)的简介、安装、使用方法之详细攻略 目录 相关文章 LLMs之ChatGLM:ChatGLM Efficient Tuning(一款高效微调ChatGLM-6B/Ch

    2024年02月08日
    浏览(29)
  • 【LLM】大语言模型高效微调方案Lora||直击底层逻辑

    大白话:  DL的本质就是矩阵的乘法,就能实现LLM, 假设两个矩阵都很大,一个mxn,一个nxd的矩阵,m,n,d这几个数字可能几千甚至上万的场景,计算起来代价很大,如果我们可以small 这些数字,缩小到10甚至5这样的scenario,cost就非常的小。 训练的时候只训练 右边橙色的AB矩阵 那

    2024年02月05日
    浏览(34)
  • 迈向高效LLM微调:低秩适应(LoRA)技术的原理与实践

    在快速发展的人工智能领域中,以高效和有效的方式使用大型语言模型(LLM)变得越来越重要。在本文中,您将学习如何以计算高效的方式使用低秩适应(LoRA)对LLM进行调整! 预训练的大型语言模型通常被视为基础模型,原因很充分:它们在各种任务上表现良好,我们可以

    2024年01月16日
    浏览(38)
  • 【论文阅读】大模型参数高效微调方式——LORA

    本文成文于23年5月,当时的市场热点正在从“超大模型训练到微调应用”转变。 一段话总结: 面向大模型的全参数finetune 需要很高的计算消耗和存储成本,学界开始探索参数高效的微调方法。LoRA就是其中的代表,他在原始的Transformer模型上插入少量的参数,只训练增量的参

    2024年02月06日
    浏览(38)
  • 量化QAT QLoRA GPTQ

    模型量化的思路可以分为PTQ(Post-Training Quantization,训练后量化)和QAT(Quantization Aware Training,在量化过程中进行梯度反传更新权重,例如QLoRA),GPTQ是一种PTQ的思路。 BN需要先融合掉: 伪量化节点是根据融合图来决定的 量化过程中不可导的部分是Round函数,Hinton论文中把他

    2024年02月11日
    浏览(27)
  • 大模型微调技术LoRA与QLoRA

    大模型的参数量都在100B级别,由于算力的吃紧,在这个基础上进行所有参数的微调变得不可能。LoRA正是在这个背景下提出的解决方案。 虽然模型的参数众多,但其实模型主要依赖低秩维度的内容( low intrinsic dimension ),由此引出低秩自适应方法lora,通过低秩分解来模拟参数的

    2024年02月11日
    浏览(32)
  • ChatGLM2-6B微调实践-QLora方案

    申请阿里云GPU服务器: CentOS 7.6 64 Anaconda3-2023.07-1-Linux-x86_64 Python 3.11.5 GPU NVIDIA A10(显存24 G/1 core) CPU 8 vCore/30G 安装Anaconda、CUDA、PyTorch 参考:ChatGLM2-6B微调实践-P-Tuning方案 项目部署 准备数据集 准备我们自己的数据集,分别生成训练文件和测试文件这两个文件,放在项目dat

    2024年02月07日
    浏览(36)
  • Phi-2小语言模型QLoRA微调教程

    就在不久前,微软正式发布了一个 27 亿参数的语言模型——Phi-2。这是一种文本到文本的人工智能程序,具有出色的推理和语言理解能力。同时,微软研究院也在官方 X 平台上声称:“Phi-2 的性能优于其他现有的小型语言模型,但它足够小,可以在笔记本电脑或者移动设备上

    2024年01月16日
    浏览(30)
  • LLMs之ChatGLM2:ChatGLM2-6B本地部署之单机推理(API/CLI/GUI)、低成本部署(GPU量化部署/CPU及其量化部署/Mac部署/多卡部署)、有限资源下高效微调(全参/P-t

    LLMs之ChatGLM2:ChatGLM2-6B本地部署之单机推理(API/CLI/GUI)、低成本部署(GPU量化部署/CPU及其量化部署/Mac部署/多卡部署)、有限资源下高效微调(全参/P-tuning v2)、模型评估和推理之图文教程之详细攻略 目录 一、配置基础环境及其注意事项 第一步、检测软硬件环境

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包