微调你的第一个大语言模型¶
本指南将引导你完成使用 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 配置文件和命令行覆盖指定
**食谱脚本**,入口点,将所有内容整合在一起,包括解析和验证配置、设置环境以及正确使用食谱类
**食谱类**,训练所需的核心逻辑,通过一组 API 公开
注意
要了解有关“食谱”概念的更多信息,请查看我们的技术深入探讨:什么是食谱?。
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` 复制配置并直接修改
如果你想对配置进行更大幅度的更改,可以使用 tune 命令行工具将其复制到你的本地目录。
$ 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 内存使用情况。
后续步骤¶
现在你已经训练了模型并设置了环境,让我们看看我们可以用新模型做什么,方法是查看“端到端工作流程教程”。