• Docs >
  • Fine-Tune Your First LLM
Shortcuts

微调您的第一个LLM

本指南将引导您完成使用 torchtune 启动您的第一个微调任务的过程。

What you will learn
  • 如何从Hugging Face Hub下载模型

  • 如何修改食谱的参数以适应您的需求

  • 如何运行微调

Prerequisites

下载模型

任何微调任务的第一步都是下载一个预训练的基础模型。torchtune 支持与 Hugging Face Hub 的集成 - 这是一个包含最新和最优秀模型权重的集合。

在本教程中,您将使用Meta的Llama2 7B模型。Llama2是一个“受控模型”,这意味着您需要获得授权才能下载权重。请按照这些说明在Hugging Face上托管的官方Meta页面上完成此过程。这应该不到5分钟。要验证您是否拥有访问权限,请转到模型页面。您应该能够看到模型文件。如果没有,您可能需要接受协议以完成此过程。

注意

或者,您可以选择直接通过Llama2仓库下载模型。 详情请参见此页面

一旦你获得授权,你将需要与Hugging Face Hub进行身份验证。最简单的方法是向下载脚本提供一个访问令牌。你可以在这里找到你的令牌。

然后,它就像这样简单:

tune download meta-llama/Llama-2-7b-hf \
  --output-dir /tmp/Llama-2-7b-hf \
  --hf-token <ACCESS TOKEN>

此命令还将下载模型的分词器和其他一些有用的文件,例如《负责任使用指南》。


选择一个食谱

Recipes 是 torchtune 用户的主要入口点。 这些可以被视为可定制的、专注于单一任务的脚本,用于与 LLMs 进行交互,包括训练、 推理、评估和量化。

每个配方由三个部分组成:

  • 可配置参数,通过yaml配置和命令行覆盖指定

  • 配方脚本,入口点,将所有内容整合在一起,包括解析和验证配置、设置环境以及正确使用配方类

  • Recipe类,训练所需的核心逻辑,通过一组API暴露

注意

要了解更多关于“recipes”概念的信息,请查看我们的技术深度解析:什么是食谱?

torchtune 提供了内置的配方,用于在单设备上进行微调,使用FSDP在多个设备上进行微调,使用像LoRA这样的内存高效技术,以及更多!查看我们所有的内置配方,请访问我们的配方概览。你也可以使用tune ls命令来打印出所有配方和相应的配置。

$ tune ls
RECIPE                                   CONFIG
full_finetune_single_device              llama2/7B_full_low_memory
                                         mistral/7B_full_low_memory
full_finetune_distributed                llama2/7B_full
                                         llama2/13B_full
                                         mistral/7B_full
lora_finetune_single_device              llama2/7B_lora_single_device
                                         llama2/7B_qlora_single_device
                                         mistral/7B_lora_single_device
...

在本教程中,您将使用在单个设备上使用LoRA微调Llama2模型的配方。有关torchtune中LoRA的更深入讨论,您可以查看完整的“使用LoRA微调Llama2”教程。

注意

为什么要有单设备和分布式训练的独立配方? 这在“什么是配方?”中有所讨论,但我们在torchtune中的一个核心原则是最小化抽象和样板代码。如果你只想在单个GPU上进行训练,我们的单设备配方确保你不需要担心像FSDP这样仅用于分布式训练的额外功能。


修改配置

YAML 配置文件包含了运行你的配方所需的大部分重要信息。 你可以设置超参数,指定像 WandB 这样的指标记录器,选择新的数据集等等。 有关当前支持的所有数据集的列表,请参阅 torchtune.datasets

有两种方法可以修改现有的配置:

从命令行覆盖现有参数

你可以使用key=value格式从命令行覆盖现有参数。假设你想将训练轮数设置为1。

tune run <RECIPE> --config <CONFIG> epochs=1

通过 `tune cp` 复制配置并直接修改

如果您希望对配置进行更实质性的更改,可以使用调优 CLI将其复制到您的本地目录。

$ tune cp llama2/7B_lora_single_device custom_config.yaml
Copied file to custom_config.yaml

现在你可以以任何你喜欢的方式更新自定义的YAML配置。尝试设置随机种子以使复制更容易,更改LoRA等级,更新批量大小等。

注意

查看“关于配置的一切”以深入了解torchtune中的配置。


训练模型

现在你已经有了一个合适格式的模型和一个符合你需求的配置,让我们开始训练吧!

就像所有其他步骤一样,您将使用tune CLI工具来启动您的微调运行。

$ tune run lora_finetune_single_device --config llama2/7B_lora_single_device epochs=1
INFO:torchtune.utils.logging:Running LoRAFinetuneRecipeSingleDevice with resolved config:
Writing logs to /tmp/lora_finetune_output/log_1713194212.txt
INFO:torchtune.utils.logging:Model is initialized with precision torch.bfloat16.
INFO:torchtune.utils.logging:Tokenizer is initialized from file.
INFO:torchtune.utils.logging:Optimizer and loss are initialized.
INFO:torchtune.utils.logging:Loss is initialized.
INFO:torchtune.utils.logging:Dataset and Sampler are initialized.
INFO:torchtune.utils.logging:Learning rate scheduler is initialized.
1|52|Loss: 2.3697006702423096:   0%|                     | 52/25880 [00:24<3:55:01,  1.83it/s]

你可以看到所有模块都已成功初始化,模型已开始训练。 你可以通过tqdm进度条监控损失和进度,但torchtune 还会在配置中定义的时间间隔内记录一些更多的指标,例如GPU内存使用情况。


下一步

现在你已经训练了你的模型并设置了你的环境,让我们通过查看“E2E工作流教程”来看看我们可以用我们的新模型做些什么。