简介|安装|开始使用|文档|社区|许可证|引用火炬手
重要的
2024 年 9 月 25 日更新:torchtune 支持Llama 3.2 11B Vision 、 Llama 3.2 3B和Llama 3.2 1B型号!按照此处的安装说明进行尝试,然后运行此处的任何文本配置或此处的视觉配置。
torchtune 是一个 PyTorch 库,可以轻松地使用 LLM 进行创作、微调和实验。
torchtune 提供:
来自 Llama、Gemma、Mistral、Phi 和 Qwen 模型系列的流行 LLM 的 PyTorch 实现
用于全面微调、LoRA、QLoRA、DPO、PPO、QAT、知识蒸馏等的可修改培训方案
开箱即用的内存效率、性能改进以及使用最新 PyTorch API 的扩展
YAML 配置可轻松配置训练、评估、量化或推理方法
内置支持许多流行的数据集格式和提示模板
torchtune 目前支持以下型号。
模型 | 尺寸 |
---|---|
Llama3.2-视觉 | 11B [型号、配置] |
骆驼3.2 | 1B、3B [型号、配置] |
骆驼3.1 | 8B、70B、405B [型号、配置] |
骆驼3 | 8B、70B [型号、配置] |
骆驼2 | 7B、13B、70B [型号、配置] |
代码-Llama2 | 7B、13B、70B [型号、配置] |
米斯特拉尔 | 7B [型号、配置] |
芽 | 2B、7B [型号、配置] |
微软Phi3 | 迷你[型号、配置] |
Qwen2 | 0.5B、1.5B、7B [型号、配置] |
我们一直在添加新模型,但如果您希望在 torchtune 中看到新模型,请随时提出问题。
torchtune 提供以下微调方案,用于在一台或多台设备上进行训练。
微调方法 | 设备 | 食谱 | 配置示例 |
---|---|---|---|
全面微调 | 1-8 | full_finetune_single_device full_finetune_distributed | Llama3.1 8B单设备 骆驼 3.1 70B 分布式 |
LoRA 微调 | 1-8 | lora_finetune_single_device lora_finetune_distributed | Qwen2 0.5B单设备 Gemma 7B 分布式 |
QLoRA 微调 | 1-8 | lora_finetune_single_device lora_finetune_distributed | Phi3 Mini 单机 骆驼 3.1 405B 分布式 |
DoRA/QDoRA 微调 | 1-8 | lora_finetune_single_device lora_finetune_distributed | Llama3 8B QDoRA 单设备 Llama3 8B DoRA 分布式 |
量化感知训练 | 4-8 | qat_分布式 | 骆驼3 8B QAT |
直接偏好优化 | 1-8 | lora_dpo_single_device lora_dpo_分布式 | Llama2 7B 单设备 Llama2 7B 分布式 |
近端策略优化 | 1 | ppo_full_finetune_single_device | 米斯特拉尔7B |
知识蒸馏 | 1 | Knowledge_distillation_single_device | Qwen2 1.5B -> 0.5B |
上面的配置只是帮助您入门的示例。如果您看到上面未列出的型号,我们可能仍然支持它。如果您不确定某些内容是否受支持,请在存储库上提出问题。
以下是不同 Llama 3.1 模型的内存要求和训练速度的示例。
笔记
为了便于比较,以下所有数字均针对批量大小 2(无梯度累积)、打包至序列长度 2048 的数据集以及启用的 torch 编译提供。
如果您有兴趣在不同的硬件或不同的型号上运行,请在此处查看我们有关内存优化的文档,以找到适合您的设置。
模型 | 微调方法 | 可运行 | 每个 GPU 的峰值内存 | 令牌/秒 * |
---|---|---|---|---|
羊驼3.1 8B | 全面微调 | 1x 4090 | 18.9 GiB | 1650 |
羊驼3.1 8B | 全面微调 | 1 个 A6000 | 37.4GiB | 2579 |
羊驼3.1 8B | 洛拉 | 1x 4090 | 16.2GiB | 3083 |
羊驼3.1 8B | 洛拉 | 1 个 A6000 | 30.3GiB | 4699 |
羊驼3.1 8B | QLoRA | 1x 4090 | 7.4GiB | 2413 |
羊驼3.1 70B | 全面微调 | 8x A100 | 13.9 GiB ** | 1568 |
羊驼3.1 70B | 洛拉 | 8x A100 | 27.6GiB | 3497 |
羊驼3.1 405B | QLoRA | 8x A100 | 44.8GB | 第653章 |
*= 在一个完整的训练周期内测量
**= 使用带有融合优化器的 CPU 卸载
torchtune 使用最新稳定的 PyTorch 版本以及夜间预览版本进行了测试。 torchtune 利用 torchvision 来微调多模式 LLM,并利用 torchao 来获得最新的量化技术;你也应该安装这些。
# 安装稳定的 PyTorch、torchvision、torchao stablereleasespip install torch torchvision torchao pip 安装 torchtune
# 安装 PyTorch、torchvision、torchao nightliespip install --pre --upgrade torch torchvision torchao --index-url https://download.pytorch.org/whl/nightly/cu121 # 完整选项为 cpu/cu118/cu121/cu124pip install --pre --upgrade torchtune --extra-index-url https://download.pytorch.org/whl/nightly/cpu
您还可以查看我们的安装文档以获取更多信息,包括从源代码安装 torchtune。
要确认软件包是否正确安装,可以运行以下命令:
调整--帮助
并且应该看到以下输出:
用法:调整 [-h] {ls,cp,下载,运行,验证} ... 欢迎使用 torchtune CLI!选项: -h, --help 显示此帮助消息并退出...
要开始使用 torchtune,请参阅我们的第一个 Finetune 教程。我们的端到端工作流程教程将向您展示如何使用 Llama 模型评估、量化和运行推理。本节的其余部分将快速概述 Llama3.1 的这些步骤。
按照官方meta-llama
存储库上的说明进行操作,以确保您可以访问官方 Llama 模型权重。确认访问后,您可以运行以下命令将权重下载到本地计算机。这还将下载分词器模型和负责任的使用指南。
要下载 Llama3.1,您可以运行:
调下载meta-llama/Meta-Llama-3.1-8B-Instruct --output-dir /tmp/Meta-Llama-3.1-8B-Instruct --ignore-patterns "original/consolidated.00.pth" --hf-token
提示
设置环境变量HF_TOKEN
或将--hf-token
传递给命令以验证您的访问权限。您可以在 https://huggingface.co/settings/tokens 找到您的令牌
您可以使用以下命令在单个 GPU 上通过 LoRA 微调 Llama3.1 8B:
调整运行 lora_finetune_single_device --config llama3_1/8B_lora_single_device
对于分布式训练,tune CLI 与 torchrun 集成。要在两个 GPU 上运行 Llama3.1 8B 的完整微调:
调整运行 --nproc_per_node 2 full_finetune_distributed --config llama3_1/8B_full
提示
确保将所有 torchrun 命令放在配方规范之前。此后的任何 CLI 参数都将覆盖配置并且不会影响分布式训练。
您可以通过两种方式修改配置:
配置覆盖
您可以直接从命令行覆盖配置字段:
调整运行 lora_finetune_single_device --config llama2/7B_lora_single_device 批量大小=8 enable_activation_checkpointing=True max_steps_per_epoch=128
更新本地副本
您也可以将配置复制到本地目录并直接修改内容:
调整 cp llama3_1/8B_full ./my_custom_config.yaml 复制到 ./my_custom_config.yaml
然后,您可以通过将tune run
命令定向到本地文件来运行自定义配方:
调整运行 full_finetune_distributed --config ./my_custom_config.yaml
查看tune --help
了解所有可能的 CLI 命令和选项。有关使用和更新配置的更多信息,请查看我们的配置深入研究。
torchtune 支持对各种不同数据集进行微调,包括指令式、聊天式、偏好数据集等。如果您想了解有关如何应用这些组件对您自己的自定义数据集进行微调的更多信息,请查看提供的链接以及我们的 API 文档。
torchtune 专注于与生态系统中的流行工具和库集成。这些只是一些示例,更多示例正在开发中:
Hugging Face Hub 用于访问模型权重
EleutherAI 的 LM Eval Harness 用于评估经过训练的模型
拥抱人脸数据集以访问训练和评估数据集
用于分布式训练的 PyTorch FSDP2
torchao 用于较低精度的数据类型和训练后量化技术
用于记录指标和检查点以及跟踪训练进度的权重和偏差
Comet 作为日志记录的另一种选择
ExecuTorch 使用微调模型进行设备上推理
用于我们的单设备配方的低内存优化器的bitsandbytes
PEFT 用于在 Hugging Face 生态系统中使用 torchtune 模型进行持续微调或推理
我们非常重视我们的社区以及我们出色的用户所做的贡献。我们将使用本节来列出其中的一些贡献。如果您也想提供帮助,请参阅贡献指南。
@SalmanMohammadi 添加了全面的端到端强化学习方法,用于通过 PPO 进行人类反馈强化学习 (RLHF) 微调。
@fyabc 用于将 Qwen2 模型、分词器和配方集成添加到 torchtune
@solitude-alive 用于将 Gemma 2B 模型添加到 torchtune,包括配方更改、模型的数字验证和配方正确性
@yechenzhi 将直接偏好优化 (DPO) 添加到 torchtune,包括配方和配置以及正确性检查
此存储库中的 Llama2 代码受到原始 Llama2 代码的启发。
我们要大力赞扬 EleutherAI、Hugging Face 和 Weights & Biases,他们是出色的合作者,并与我们一起在 torchtune 中进行一些集成。
我们还想感谢生态系统中一些很棒的库和工具:
gpt-fast 用于高性能 LLM 推理技术,我们已采用开箱即用的技术
加入 llama2 社区的 llama 食谱
bitsandbytes 将多种基于内存和性能的技术引入 PyTorch 生态系统
@winglian 和 axolotl 对 torchtune 的设计和功能集进行早期反馈和集思广益。
lit-gpt 推动 LLM 微调社区向前发展。
HF TRL 使 PyTorch 社区更容易访问奖励建模。
torchtune 在 BSD 3 许可证下发布。但是,您可能还有其他法律义务来约束您对其他内容的使用,例如第三方模型的服务条款。
如果您发现 torchtune 库有用,请在您的作品中引用它,如下所示。
@software{torchtune, title = {torchtune: PyTorch 的微调库},作者 = {torchtune 维护者和贡献者},url = {https://github.com/pytorch/torchtune},许可证 = {BSD-3-Clause},月份= 四月,年份 = {2024}}