当前位置:   article > 正文

使用 QLoRA 在自定义数据集上对大型语言模型(LLM)进行微调_使用数据库数据做llm微调

使用数据库数据做llm微调


img

微调 LLM

大型语言模型(LLM)已经彻底改变了自然语言处理领域,展示了先进的能力和复杂的解决方案。这些模型在文本生成、翻译、摘要和问答等任务中表现出色。尽管它们很强大,但 LLM 并不总是与特定任务或领域相吻合。

在本教程中,我们将探讨如何通过微调 LLM 可以显著提高模型性能,降低训练成本,并实现更准确和特定上下文的结果。

什么是 LLM 微调?

微调 LLM 涉及对预先存在的模型进行额外训练,该模型先前已经从大规模数据集中获得了模式和特征,使用较小的、特定领域的数据集。在“LLM 微调”的背景下,LLM 表示“大型语言模型”,例如 OpenAI 的 GPT 系列。这种方法的重要性在于,从头开始训练一个大型语言模型在计算能力和时间方面都需要大量资源。利用预训练模型中嵌入的现有知识,可以在大大减少数据和计算要求的情况下,在特定任务上实现高性能。

以下是 LLM 微调中涉及的一些关键步骤:

  1. 选择预训练模型:对于 LLM 微调,第一步是仔细选择与我们所需的架构和功能相吻合的基础预训练模型。预训练模型是通用目的的模型,已经在大量未标记数据的语料库上进行了训练。
  2. 收集相关数据集:然后我们需要收集与我们任务相关的数据集。数据集应该是标记的或以模型可以学习的方式结构化的。
  3. 预处理数据集:一旦数据集准备好,我们需要对其进行一些预处理,以便进行微调,包括清理数据、将其分割为训练、验证和测试集,并确保与我们想要微调的模型兼容。
  4. 微调:在选择了预训练模型之后,我们需要在预处理的相关数据集上对其进行微调,该数据集更加特定于手头的任务。我们选择的数据集可能与特定领域或应用相关,使模型能够适应和专门针对该上下文进行处理。
  5. 任务特定适应:在微调过程中,根据新的数据集调整模型的参数,帮助它更好地理解和生成与特定任务相关的内容。这个过程保留了预训练期间获得的一般语言知识,同时将模型调整到目标领域的细微差别中。

LLM 微调通常用于自然语言处理任务,如情感分析、命名实体识别、摘要、翻译或任何其他需要理解上下文和生成连贯语言的应用。它有助于利用预训练模型中编码的知识进行更专业和特定领域的任务。

微调方法

微调大型语言模型(LLM)涉及监督学习过程。在这种方法中,利用包含标记示例的数据集来调整模型的权重,提高其在特定任务中的熟练程度。现在,让我们深入了解微调过程中使用的一些值得注意的技术。

  1. 完全微调(指令微调):指令微调是一种通过训练模型以指导其对查询的响应来提高模型在各种任务中性能的策略。数据集的选择是关键的,并且针对特定任务进行了定制,例如摘要或翻译。这种方法被称为完全微调,它更新所有模型权重,创建一个具有改进功能的新版本。然而,它需要足够的内存和计算资源,类似于预训练,来处理训练过程中的梯度、优化器和其他组件的存储和处理。
  2. 参数高效微调(PEFT) 是指令微调的一种形式,比完全微调更高效。训练语言模型,特别是完全 LLM 微调,需要大量的计算资源。内存分配不仅用于存储模型,还用于训练过程中的关键参数,这对于简单的硬件来说是一个挑战。PEFT 通过仅更新一部分参数,有效地“冻结”其余部分来解决这个问题。这减少了可训练参数的数量,使内存需求更易管理,并防止灾难性遗忘。与完全微调不同,PEFT 保持了原始 LLM 权重,避免了先前学到的信息的丢失。这种方法在处理多个任务的微调时处理存储问题非常有益。有多种方法可以实现参数高效微调。低秩适应 LoRAQLoRA 是最常用和有效的方法。

什么是 LoRA?

LoRA 是一种改进的微调方法,其中不是微调构成预训练大型语言模型权重矩阵的所有权重,而是微调近似该较大矩阵的两个较小矩阵。这些矩阵构成了 LoRA 适配器。然后将这个微调的适配器加载到预训练模型中并用于推理。

在针对特定任务或用例进行 LoRA 微调之后,结果是一个不变的原始 LLM 和一个相对较小的“LoRA 适配器”,通常表示为原始 LLM 大小的个位数百分比(以 MB 而不是 GB 表示)。

在推理过程中,LoRA 适配器必须与其原始 LLM 结合使用。优势在于许多 LoRA 适配器能够重用原始 LLM,从而在处理多个任务和用例时减少总体内存需求。

什么是 Quantized LoRA (QLoRA)?

QLoRA 是 LoRA 的更节省内存的迭代版本。QLoRA 进一步将 LoRA 适配器(较小矩阵)的权重量化为较低的精度(例如 4 位而不是 8 位)。这进一步减少了内存占用和存储需求。在 QLoRA 中,预训练模型使用量化为 4 位的权重加载到 GPU 内存中,而不是 LoRA 中使用的 8 位。尽管减少了位精度,QLoRA 仍然保持了与 LoRA 相当的有效性。

在本教程中,我们将使用 Parameter-efficient fine-tuning with QLoRA

现在让我们探索如何使用 QLoRA 在单个 GPU 上对自定义数据集进行 LLM 微调。

  1. 设置笔记本
  2. 安装所需库
  3. 加载数据集
  4. 创建 Bitsandbytes 配置
  5. 加载预训练模型
  6. 分词
  7. 使用零样本推理测试模型
  8. 预处理数据集
  9. 为 QLoRA 准备模型
  10. 设置 PEFT 进行微调
  11. 训练 PEFT 适配器
  12. 定性评估模型(人工评估)
  13. 定量评估模型(使用 ROUGE 指标)

1. 设置笔记本。

虽然我们将在 Kaggle 笔记本中进行演示,但请随意使用任何 Jupyter 笔记本环境。Kaggle 每周提供 30 小时的免费 GPU 使用时间,对于我们的实验来说是足够的。首先,让我们打开一个新的笔记本,建立一些标题,然后继续连接到运行时。

img

notebook-with-headings

在这里,我们将选择 GPU P100 作为 ACCELERATOR。可以尝试 Kaggle 提供的其他 GPU 选项或任何其他环境。

在本教程中,我们将使用 HuggingFace 库来下载和训练模型。要从 HuggingFace 下载模型,我们需要一个 Access Token。如果您已经在 HuggingFace 上注册了账号,可以从设置部分生成一个新的 Access Token,或者使用任何现有的 Access Token。

2. 安装所需库

现在,让我们安装这个实验所需的库。

!pip install -q -U bitsandbytes transformers peft accelerate datasets scipy einops evaluate trl rouge_score
  • 1

让我们了解一下其中一些库的重要性。

  • Bitsandbytes:这是一个出色的包,提供了一个轻量级的包装器,围绕自定义 CUDA 函数,可以使 LLM 更快——优化器、矩阵乘法和量化。在本教程中,我们将使用这个库尽可能高效地加载我们的模型。
  • transformers:这是由 Hugging Face (
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/680482
推荐阅读
相关标签