微调您的第一个 LLM¶
本指南将引导您完成启动第一次微调的过程 使用 Torchtune 的作业。
如何从 Hugging Face Hub 下载模型
如何修改配方的参数以满足您的需求
如何运行 finetune
熟悉 torchtune 概述
下载模型¶
任何微调作业的第一步都是下载预训练的基础模型。Torchtune 支持集成 与 Hugging Face Hub 一起 - 最新和最伟大的模型重量的集合。
在本教程中,您将使用 Meta 的 Llama2 7B 模型。Llama2 是一个 “门控模型”, 这意味着您需要被授予访问权限才能下载权重。按照官方 Meta 页面上的这些说明进行操作 托管在 Hugging Face 上以完成此过程。这应该需要不到 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 配置和命令行覆盖指定
配方脚本,将所有内容放在一起的入口点,包括解析和验证配置、设置环境以及正确使用配方类
Recipe 类,训练所需的核心逻辑,通过一组 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
...
在本教程中,您将使用配方在 单个设备。有关 torchtune 中 LoRA 的更深入讨论,您可以查看完整的 使用 LoRA 微调 Llama2 教程。
注意
为什么单一设备与分布式设备有单独的配方?这在 什么是配方 中讨论过?但我们在 Torchtune 中的核心原则之一是最小抽象和样板代码。 如果您只想在单个 GPU 上进行训练,我们的单设备配方可确保您不必担心额外的 仅分布式训练所需的 FSDP 等功能。
修改配置¶
YAML 配置包含运行配方所需的大部分重要信息。 您可以设置超参数、指定 WandB 等指标记录器、选择新数据集等。 有关当前支持的所有数据集的列表,请参阅 torchtune.datasets。
有两种方法可以修改现有配置:
从命令行覆盖现有参数
您可以使用格式从命令行覆盖现有参数。假设
您希望将训练 epoch 数设置为 1。key=value
tune run <RECIPE> --config <CONFIG> epochs=1
通过 tune cp 复制配置并直接修改
如果要对配置进行更实质性的更改,可以使用 CLI 将其复制到本地目录。tune
$ tune cp llama2/7B_lora_single_device custom_config.yaml
Copied file to custom_config.yaml
现在,您可以按照自己喜欢的任何方式更新自定义 YAML 配置。尝试设置随机种子以使复制更容易。 更改 LoRA 排名、更新批处理大小等。
注意
查看 关于配置的所有内容 以更深入地了解 torchtune 中的配置。
训练模型¶
现在,您已经拥有了正确格式的模型和适合您需求的配置,让我们开始训练吧!
与所有其他步骤一样,您将使用 CLI 工具启动微调运行。tune
$ 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 bar 监控丢失和进度,但 torchtune 还将按配置中定义的间隔记录更多指标,例如 GPU 内存使用情况。
后续步骤¶
现在,您已经训练了模型并设置了环境,让我们看看我们可以用 新模型。