微调你的第一个LLM¶
本指南将引导您完成使用 torchtune 启动第一个微调任务的过程。
如何从 Hugging Face Hub 下载模型
如何修改示例参数以满足您的需求
如何运行微调
确保已 安装 torchtune
下载模型¶
任何微调任务的第一步都是下载一个预训练的基础模型。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 用户的主要入口。 这些可以被视为可修改的、专注于与大型语言模型交互的脚本,包括训练、 推理、评估和量化。
每个配方由三个部分组成:
可配置参数,通过 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
...
本教程中,您将使用在单台设备上通过LoRA微调Llama2模型的方案。如需深入了解torchtune中LoRA的相关内容,可参阅完整的使用LoRA微调Llama2教程。
注意
为何要为单设备训练与分布式训练分别提供独立的配方(recipe)? 这一点在 什么是配方(Recipes)? 中已有讨论,但 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 命令行工具来启动您的微调运行。
$ 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 内存使用情况。
下一步¶
现在,您已经训练好了模型并配置好了运行环境,让我们通过查看端到端工作流教程来了解如何使用这个新模型。