使用 Unslot 轻松微调您的数据上的 LLaMA-3

使用 Unslot 这个强大的工具,可以轻松地在您的数据上微调 LLaMA-3,并承诺可以达到 30 倍的训练速度加快。了解如何设置、优化并保存您的微调模型,以便在各个平台上进行无缝推理。为您的特定用例解锁 LLaMA-3 的全部潜力。

2025年2月19日

party-gif

微调强大的开源语言模型 LLAMA-3,使用优化的 Unslot 软件包轻松完成。解锁这个 AI 模型的全部潜力,根据您的具体需求进行定制,无需复杂的设置或资源密集型训练。

使用 Unslot 微调 LLAMA-3:强大高效的方法

解锁是一个非常出色的工具,它可以让您高效地在自己的数据集上微调LLAMA-3模型。以下是一步一步的指南:

  1. 安装所需的软件包: 首先克隆Unslot GitHub仓库,并根据您的硬件配置安装必要的软件包。

  2. 设置训练参数: 定义您的训练参数,如最大序列长度、数据类型和量化方法。Unslot使用Lora适配器来实现高效的微调。

  3. 格式化训练数据: 确保您的数据按要求格式化,包含指令、输入和输出三个列。Unslot提供了使用Alpaca数据集的示例,您可以根据自己的数据进行调整。

  4. 设置SFT训练器: 从Hugging Face Transformers库创建一个SFT(监督微调)训练器对象,指定模型、标记器、数据集和其他训练参数。

  5. 训练模型: 调用训练器对象的train()函数开始微调过程。Unslot的优化内存使用和速度确保了即使在有限的GPU资源上也能高效训练。

  6. 执行推理: 训练完成后,您可以使用Unslot特有的FastLanguageModel类生成来自微调模型的响应。Unslot还提供保存模型和加载Lora适配器以供将来使用的选项。

  7. 探索其他功能: Unslot提供了高级功能,如在PyTorch Lightning等其他框架中使用模型,以及将模型转换为GGML格式以供LLAMA-CPP或GoLLAMA使用。

Unslot微调LLAMA-3的方法非常高效,利用了优化的内存使用和速度。它提供了一个用户友好且全面的解决方案,是微调大型语言模型的绝佳选择。

设置训练参数

首先,我们需要从unslot库中导入必要的类:

from unslot.models.fast_language_model import FastLanguageModel

接下来,我们设置训练参数:

  • max_sequence_length: 输入的最大序列长度。我们将其设置为248个标记,因为我们使用的数据集文本相对较短。
  • data_type: 我们使用4位量化进行高效训练。
max_sequence_length = 248
data_type = "4bit"

Unslot使用Lora适配器来实现高效的微调。有两种选择:

  1. 从unslot Hugging Face存储库中使用预加载的模型,该模型已经合并了Lora适配器。
  2. 从Hugging Face存储库中使用模型,并自行添加Lora适配器。

在本例中,我们将使用预加载的模型,因此不需要执行任何其他步骤。

model = FastLanguageModel.from_pretrained("unslot/alpaca-7b")

如果您需要使用其他模型并自行添加Lora适配器,可以取消注释以下部分并提供必要的参数。

# model_id = "your-hugging-face-model-id"
# model = FastLanguageModel.from_pretrained(model_id)
# model.add_lora_adapters()

现在我们可以进入下一步:格式化训练数据。

准备微调数据

要使用Unslot微调Lama 3模型,您需要以特定的方式格式化训练数据。示例中使用的数据集有三个列:指令、输入和输出。

指令列包含模型应完成的任务描述。输入列提供了任务的附加上下文,输出列包含模型的预期响应。

在格式化您自己的数据时,请确保以相同的方式构建,包含指令、输入和输出列。如果某个示例缺少输入,这也没有问题,因为指令本身就可以为模型提供生成输出所需的信息。

下载数据后,您需要将这三列转换为单个文本字符串,并遵循特定的格式。该格式包括指令、输入和响应的特殊标记。示例中的代码演示了如何执行此转换,创建一个单列来训练模型。

请注意,虽然示例使用了标准的Alpaca数据集,但您也可以使用其他提示模板(如OpenAI引入的ChatML格式)来构建数据。只需确保正确格式化输入示例,因为它们将在训练期间输入到语言模型中。

使用 Unslot 的监督式微调训练器训练模型

首先,我们需要设置训练参数。我们将从Unslot导入FastLanguageModel类,并定义最大序列长度、数据类型和量化方法。

接下来,我们将处理需要为模型添加Lora适配器的情况。如果我们使用的是Hugging Face存储库中的模型,我们可能需要提供一个令牌来接受服务条款。

现在,我们需要格式化训练数据。数据集应该有三个列:指令、输入和输出。我们将从Hugging Face下载数据,并将其映射到此格式。

然后,我们将从Hugging Face Transformers库设置监督微调训练器。该训练器将接受模型对象、标记器、数据集和其他参数,如优化器、学习率计划和输出目录。

最后,我们将在训练器对象上调用train()函数。我们将观察训练损失的下降,这表示模型正在学习。请注意,我们只运行了一小部分数据作为示例,但您将需要运行至少一个时期或两个时期才能获得更好的结果。

训练完成后,我们可以保存模型并加载Lora适配器以进行推理。Unslot还提供了在其他框架(如PyTorch Lightning和TensorFlow)中使用模型的选项。

使用微调后的模型进行推理

模型训练完成后,您可以将其用于推理。Unslot提供了一个简单的接口:

  1. 从Unslot导入FastLanguageModel类。
  2. 提供训练好的模型并告诉它执行推理。
  3. 使用Alpaca格式(指令、输入和预期输出)对输入进行标记。
  4. 将输入移动到GPU以利用可用资源。
  5. 调用generate函数,提供标记化的输入、要生成的最大标记数和是否使用缓存。

模型将根据提供的输入生成响应。您还可以使用TextStreamer类来流式传输文本响应。

训练完成后,您可以以多种方式保存模型:

  • 将模型推送到Hugging Face Hub,这将单独保存Lora适配器。
  • 在本地保存模型,同样单独保存Lora适配器。

要为推理加载保存的模型,您可以设置一个标志来合并Lora适配器。

Unslot还提供了其他推理选项,如使用Hugging Face Transformers库中的AutoModelForCausalLM类,这可能更慢但允许您将模型与LLAMA-CPP或GoLLAMA等其他工具一起使用。

保存和加载微调后的模型

模型训练完成后,您可以通过多种方式保存它以供将来推理使用。Unslot提供了几种保存和加载微调模型的选项:

  1. 保存到Hugging Face Hub: 您可以将微调后的模型推送到Hugging Face Hub,这样可以与他人共享和使用该模型。要做到这一点,您需要提供Hugging Face令牌。
model.push_to_hub("your-model-name")
  1. 本地保存: 您也可以在本地保存模型,这只会保存Lora适配器,而不是整个模型。这样可以轻松地加载Lora适配器并将其与基础模型合并。
model.save_pretrained("path/to/save/model")
  1. 加载保存的Lora适配器: 当您想要使用微调后的模型进行推理时,可以加载保存的Lora适配器并将其与基础模型合并。
model = FastLLamaForCausalLM.from_pretrained("path/to/base/model")
model.load_adapter("path/to/saved/model")
  1. 转换为GGML格式: Unslot还提供将微调后的模型转换为GGML格式的功能,该格式可用于LLAMA-CPP或GoLlama等工具。这允许您在仅有CPU的环境中使用该模型。
model.save_pretrained("path/to/save/model", quantization_method="nf16")

利用这些选项,您可以轻松地保存、加载和使用微调后的模型,包括在不同环境中部署以及与社区共享。

结论

该文章提供了一个全面的指南,介绍如何使用Unslot软件包微调Lama 3模型。本节的关键要点包括:

  1. Unslot提供了一种高效和优化的方式来微调Lama 3和其他语言模型,具有内存使用减少和训练速度更快等特点。
  2. 文章介绍了设置训练环境、格式化数据以及使用Unslot特有的类和方法训练模型的步骤。
  3. 它还演示了如何使用微调后的模型进行推理,包括通过Unslot接口和将模型转换为ONNX等其他格式以供其他推理工具使用。
  4. 作者强调了Unslot的优势,如其处理GPU限制的能力以及与其他微调选择(如AutoTrain)相比的易用性。
  5. 文章最后鼓励读者探索Unslot和其他微调工具,并邀请他们提出任何问题或遇到的问题。

FAQ