• 文档 >
  • 微调您的第一个 LLM
快捷方式

微调您的第一个 LLM

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

您将学到什么
  • 如何从 Hugging Face Hub 下载模型

  • 如何修改食谱的参数以满足您的需求

  • 如何运行微调

先决条件

下载模型

任何微调作业的第一步都是下载预训练的基模型。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>

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


选择食谱

食谱是 torchtune 用户的主要入口点。可以将其视为 **可修改的、专注于单个方面的 LLM 交互脚本**,包括训练、推理、评估和量化。

每个食谱包含三个部分

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

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

  • **食谱类**,通过一组 API 公开的训练核心逻辑

注意

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

torchtune 提供了用于在单个设备上微调、使用 FSDP 在多个设备上微调、使用内存高效技术(如 LoRA)等方面的内置食谱!您可以在 GitHub 上查看所有内置食谱。您还可以使用 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` 复制配置并直接修改

如果您想对配置进行更实质性的更改,可以使用 tune 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 工作流程教程 来看看我们可以对新模型做些什么。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得您的问题解答

查看资源