Press "Enter" to skip to content

《如何调优大型语言模型:一步一步指南》

2023年,Alpaca、Falcon、Llama 2和GPT-4等大型语言模型(LLM)的崛起表明AI民主化的趋势。这使得即使是小公司也能负担得起定制模型,促进了广泛的采用。然而,仍然存在挑战,如开源模型的限制性许可和微调和维护的成本,这些成本主要适用于大型企业或研究机构。

发挥LLM潜力的关键在于针对特定任务进行微调和定制预训练模型。这种方法符合个体需求,提供创新和量身定制的解决方案。微调不仅可以增强模型效率和准确性,还可以优化系统资源利用率,比从头训练所需的计算资源更少。

对于具有大量参数的模型,高效的GPU内存管理至关重要。例如,以32位精度加载10亿参数模型需要4GB的GPU内存。为了解决这个问题,量化可以降低参数精度,并减少内存需求。将精度从32位转换为16位,可以将加载和训练模型所需的内存减少一半。

管理优化微调的常用技术是PEFT(参数高效微调)和RLHF(强化学习与人类反馈)。

参数高效微调方法的综述

在完全微调大型语言模型的过程中,重要的是要有一个计算设置,不仅可以高效处理可观的模型权重,对于最先进的模型而言,这些模型的大小现在已经达到几百GB,还可以管理其他关键的元素。以下是用于优化LLM微调的PEFT方法的类别。

加法方法

此类型的微调可以通过添加额外的参数或层来增强预训练模型,重点是仅训练新添加的参数。加法方法进一步分为以下子类别:

  • 适配器:在Transformer子层之后加入小型全连接网络,其中有明显的示例是AdaMix、KronA和Compactor。
  • 软提示:通过梯度下降微调模型输入嵌入的一个部分,其中著名的示例有IPT、前缀微调和WARP。
  • 其他加法方法:包括LeTS、AttentionFusion和Ladder-Side微调等技术。

选择方法

选择性PEFT可以针对层类型和内部模型结构微调有限数量的顶层。这个类别包括像BitFit和LN微调这样专注于微调特定元素(如模型偏差或特定行)的方法。

基于重新参数化的方法

这些方法利用低秩表示来减少可训练参数的数量,最著名的是低秩自适应或LoRA。

LoRA(低秩自适应)

LoRA是一种重要的PEFT技术,于2021年由Edward J. Hu等人在一篇论文中提出。它属于重新参数化的范畴,在LLM的原始权重冻结的基础上,将新的可训练低秩矩阵整合到Transformer架构的每一层中。这种方法不仅减少了可训练参数的数量,而且缩短了训练时间和计算资源的需求,为全面微调提供了更高效的替代方案。

LoRA使用< a href=”https://sihaiba.com/introducing-lqlora-lora-variant-for-efficient-language-model-finetuning-with-lowrank-quantized.html”>奇异值分解(SVD)的概念。本质上,SVD将矩阵分解为三个不同的矩阵,其中一个是包含奇异值的对角矩阵。

LoRA对这个过程进行干预,冻结所有原始模型参数,并在原始权重的基础上引入一对“秩分解矩阵”。这些较小的矩阵,标记为A和B,通过监督学习进行训练。这种策略已经通过使用HuggingFace Transformers等开源库有效实施,以显著的效率进行LoRA微调以适应各种任务。

QLoRA:将LoRA效率提高

建立在LoRA的基础上,QLoRA进一步减少了内存需求。由Tim Dettmers和其他人在2023年引入,它将低秩适应性与量化相结合,使用称为NormalFloatNumericFloat4 (nf4)的4位量化格式。量化本质上是将数据从更高的信息表示转换为具有较少信息的一种表示。这种方法保持了16位微调方法的有效性,将4位权重解量化为在计算过程中需要的16位。

QLoRA利用NumericFloat4 (nf4),针对变压器架构中的每一层,并引入双重量化的概念,以进一步减小微调所需的内存占用。这是通过对已经量化的常数执行量化来实现的,该策略通过使用分页优化器和统一内存管理来避免典型的梯度检查点内存峰值。

从人类反馈方法中的强化学习

人类反馈强化学习(RLHF)用于微调预训练语言模型,以更贴近人类价值观。RLHF过程广泛利用人类反馈,利用其来训练奖励模型。这是一个动态和迭代的过程,在语言生成的背景下,模型通过一系列反馈循环学习,进而获得奖励。RLHF的核心是强化学习范 Paradigm,这是一种种类的机器学习技术,其中代理通过执行行为和接收奖励来学习如何在环境中行事。这是一个连续的行动和反馈循环,代理受到激励选择能够产生最高奖励的选择。将其应用于语言模型的领域,代理本身就是模型,其在给定上下文窗口的环境中运行,并根据当前上下文窗口中的令牌来做出决策。 “行动空间”涵盖了模型可以选择的所有潜在令牌,目标是选择与人类偏好最接近的令牌。

基于指令的微调

生成式AI生命周期中的微调阶段的特点是整合指令输入和输出,并结合逐步推理的示例。

单任务微调

单任务微调专注于在特定任务(例如摘要)中提升模型的专业能力。这种方法在优化涉及大量文档或对话线程的工作流程中特别有益,包括法律文件和客户支持票据。通过相对较小的一组示例(从500到1000个)进行微调可以实现显著的性能增强,与预训练阶段所使用的数十亿个标记形成对比。

调优LLM的步骤

下面是对具有数十亿参数的LLM模型进行调优的步骤。

在这个例子中,使用QLoRA技术对模型进行调优。为此,您可以使用Hugging Face生态系统中的LLM库:transformers,accelerate,peft,trl和bitsandbytes。

1. 入门

首先,在具备进行用例调优的所需GPU容量的计算机上,在Python环境中安装所需的库。然后,从这些库中加载必要的模块。

2. 模型配置

访问Hugging Face库中的模型,申请请求并获得确认。

以下是对Llama 2开源模型在Hugging Face上的访问请求表单示例。批准后,从在线库中将模型下载到您的环境中。

图片来自Hugging Face

3. 加载数据集

根据模型和进行调优的方法,为您的具体用例选择一个数据集。Hugging Face库中的一个示例数据集是mlabonne/guanaco-llama2-1k。从Hugging Face hub中加载所选的数据集到您的环境中。

4. 如果需要,进行量化配置

通过QLoRA进行4位量化,可以在消费者硬件上高效进行庞大LLM模型的调优,同时保持高性能。这极大地提升了实际应用的可访问性和可用性。

QLoRA将预训练语言模型量化为4位,并冻结参数。然后,在模型中添加少量可训练的低秩适配器层。

5. 加载分词器

接下来,从HuggingFace加载分词器,并调整填充位置以解决任何问题。

6. PEFT参数

传统的预训练语言模型(PLMs)的调优方式需要更新模型的所有参数,这在计算上非常昂贵,并且需要大量的数据。

参数高效调优(PEFT)通过仅更新模型的一小部分参数来实现,使得调优过程更加高效。通过阅读PEFT官方文档了解更多参数相关信息。

7. 训练参数

以下是可以用来优化训练过程的超参数列表:

  • output_dir:模型预测和检查点存储的输出目录。
  • num_train_epochs:一个训练周期。
  • fp16/bf16:关闭fp16/bf16训练。
  • per_device_train_batch_size:每个GPU的训练批量大小。
  • per_device_eval_batch_size:每个GPU的评估批量大小。
  • gradient_accumulation_steps:更新过程中梯度累积所需的步骤数。
  • gradient_checkpointing:启用梯度检查点。
  • max_grad_norm:梯度裁剪。
  • learning_rate:初始学习率。
  • weight_decay:对除偏差/层归一化权重外的所有层应用权重衰减。
  • Optim:模型优化器(AdamW优化器)。
  • lr_scheduler_type:学习率调度。
  • max_steps:训练步骤数。
  • warmup_ratio:线性预热的步骤比例。
  • group_by_length:这可以显著提高性能并加速训练过程。
  • save_steps:每25个更新步骤保存检查点。
  • logging_steps:每25个更新步骤记录日志。

8. 模型微调

监督微调 (SFT) 是从人类反馈中进行强化学习的关键步骤。HuggingFace 的 TRL 库提供了一种易于使用的 API,可以用几行代码创建 SFT 模型并在数据集上进行训练。它提供了使用强化学习训练语言模型的工具,从监督微调开始,然后是奖励建模,最后是近端策略优化 (PPO)。训练模型后,保存模型适配器和分词器。您还可以使用类似的 API 将模型上传到Hugging Face

9. 评估

在 Tensorboard 的交互会话中查看训练结果。

要测试微调模型,请使用Transformers文本生成管道并问一些简单的问题,比如“谁是莱昂纳多·达·芬奇?”。

结论

本教程以QLoRA、PEFT和SFT等技术为例,详细介绍了如何对LLaMA 2模型进行微调,以克服内存和计算限制。通过利用像transformers、accelerate、peft、trl和bitsandbytes等 Hugging Face 库,我们成功地在消费级 GPU 上对拥有7B个参数的 LLaMA 2 模型进行了微调。

总体而言,本教程展示了近期的进展如何实现了大型语言模型的民主化和易用性,使即使是爱好者也能在资源有限的情况下构建最先进的人工智能。

Leave a Reply

Your email address will not be published. Required fields are marked *