赞
踩
微调 LLM
大型语言模型(LLM)已经彻底改变了自然语言处理领域,展示了先进的能力和复杂的解决方案。这些模型在文本生成、翻译、摘要和问答等任务中表现出色。尽管它们很强大,但 LLM 并不总是与特定任务或领域相吻合。
在本教程中,我们将探讨如何通过微调 LLM 可以显著提高模型性能,降低训练成本,并实现更准确和特定上下文的结果。
微调 LLM 涉及对预先存在的模型进行额外训练,该模型先前已经从大规模数据集中获得了模式和特征,使用较小的、特定领域的数据集。在“LLM 微调”的背景下,LLM 表示“大型语言模型”,例如 OpenAI 的 GPT 系列。这种方法的重要性在于,从头开始训练一个大型语言模型在计算能力和时间方面都需要大量资源。利用预训练模型中嵌入的现有知识,可以在大大减少数据和计算要求的情况下,在特定任务上实现高性能。
以下是 LLM 微调中涉及的一些关键步骤:
LLM 微调通常用于自然语言处理任务,如情感分析、命名实体识别、摘要、翻译或任何其他需要理解上下文和生成连贯语言的应用。它有助于利用预训练模型中编码的知识进行更专业和特定领域的任务。
微调大型语言模型(LLM)涉及监督学习过程。在这种方法中,利用包含标记示例的数据集来调整模型的权重,提高其在特定任务中的熟练程度。现在,让我们深入了解微调过程中使用的一些值得注意的技术。
LoRA 是一种改进的微调方法,其中不是微调构成预训练大型语言模型权重矩阵的所有权重,而是微调近似该较大矩阵的两个较小矩阵。这些矩阵构成了 LoRA 适配器。然后将这个微调的适配器加载到预训练模型中并用于推理。
在针对特定任务或用例进行 LoRA 微调之后,结果是一个不变的原始 LLM 和一个相对较小的“LoRA 适配器”,通常表示为原始 LLM 大小的个位数百分比(以 MB 而不是 GB 表示)。
在推理过程中,LoRA 适配器必须与其原始 LLM 结合使用。优势在于许多 LoRA 适配器能够重用原始 LLM,从而在处理多个任务和用例时减少总体内存需求。
QLoRA 是 LoRA 的更节省内存的迭代版本。QLoRA 进一步将 LoRA 适配器(较小矩阵)的权重量化为较低的精度(例如 4 位而不是 8 位)。这进一步减少了内存占用和存储需求。在 QLoRA 中,预训练模型使用量化为 4 位的权重加载到 GPU 内存中,而不是 LoRA 中使用的 8 位。尽管减少了位精度,QLoRA 仍然保持了与 LoRA 相当的有效性。
在本教程中,我们将使用 Parameter-efficient fine-tuning with QLoRA。
现在让我们探索如何使用 QLoRA 在单个 GPU 上对自定义数据集进行 LLM 微调。
虽然我们将在 Kaggle 笔记本中进行演示,但请随意使用任何 Jupyter 笔记本环境。Kaggle 每周提供 30 小时的免费 GPU 使用时间,对于我们的实验来说是足够的。首先,让我们打开一个新的笔记本,建立一些标题,然后继续连接到运行时。
notebook-with-headings
在这里,我们将选择 GPU P100 作为 ACCELERATOR。可以尝试 Kaggle 提供的其他 GPU 选项或任何其他环境。
在本教程中,我们将使用 HuggingFace 库来下载和训练模型。要从 HuggingFace 下载模型,我们需要一个 Access Token。如果您已经在 HuggingFace 上注册了账号,可以从设置部分生成一个新的 Access Token,或者使用任何现有的 Access Token。
现在,让我们安装这个实验所需的库。
!pip install -q -U bitsandbytes transformers peft accelerate datasets scipy einops evaluate trl rouge_score
让我们了解一下其中一些库的重要性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。