torchtune

torchtune

PyTorch原生库助力简化大语言模型开发

torchtune是一个PyTorch原生库,专为简化大语言模型(LLM)的创建、微调和实验而设计。该库提供了主流LLM的PyTorch实现、易用的微调技术配方、YAML配置文件和多种数据集格式支持。torchtune注重与生态系统工具集成,如Hugging Face、EleutherAI评估工具和PyTorch FSDP等。支持多种模型和微调方法,并优化内存效率,适配不同硬件环境。

torchtunePyTorchLLM微调模型训练Github开源项目

torchtune

单元测试 配方集成测试

简介 | 安装 | 开始使用 | 文档 | 设计原则 | 社区贡献 | 许可证

 

[!注意] 2024年7月: torchtune已在源代码和每日构建中更新了Llama3.1的模型权重!查看我们为8B和70B版本的模型提供的配置。支持LoRA、QLoRA和完整微调方法。即将添加对QLoRA 405B的支持。

简介

torchtune是一个PyTorch原生库,用于轻松创作、微调和实验大型语言模型(LLMs)。我们很高兴宣布我们的alpha版本发布!

torchtune提供:

  • 使用可组合和模块化构建块实现的流行LLMs的原生PyTorch实现
  • 易于使用和可修改的流行微调技术(LoRA、QLoRA)训练配方 - 无需训练器,无需框架,仅需PyTorch!
  • 用于轻松配置训练、评估、量化或推理配方的YAML配置
  • 内置支持多种流行数据集格式和提示模板,帮助您快速开始训练

torchtune专注于与生态系统中的流行工具和库集成。以下只是几个例子,还有更多正在开发中:

 

模型

torchtune目前支持以下模型。

模型规模
Llama3.18B, 70B [模型, 配置]
Llama38B, 70B [模型, 配置]
Llama27B, 13B, 70B [模型, 配置]
Code-Llama27B, 13B, 70B [模型, 配置]
Mistral7B [模型, 配置]
Gemma2B, 7B [模型, 配置]
Microsoft Phi3Mini [模型, 配置]
Qwen20.5B, 1.5B, 7B [模型, 配置]

我们一直在添加新模型,但如果您希望在torchtune中看到某个新模型,请随时提交问题

 

微调配方

torchtune提供以下微调配方。

训练微调方法
分布式训练 [1至8个GPU]完整 [代码, 示例], LoRA [代码, 示例]
单设备/低内存 [1个GPU]完整 [代码, 示例], LoRA + QLoRA [代码, 示例]
单设备 [1个GPU]DPO [代码, 示例], 使用PPO的RLHF [代码, 示例]

 

内存效率对我们来说很重要。我们所有的配方都在各种设置上进行了测试,包括具有24GB显存的商用GPU以及数据中心中找到的更强大的选项。 单GPU配方提供了一些在分布式版本中无法使用的内存优化。这些包括支持来自bitsandbytes的低精度优化器,以及将优化器步骤与反向传播融合以减少梯度的内存占用(参见示例配置)。对于内存受限的设置,我们建议使用单设备配置作为起点。

这个表格展示了torchtune中配方的峰值内存使用和训练速度。

示例硬件资源微调方法模型设置每GPU峰值内存(GB)训练速度(tokens/秒)
1 x RTX 4090QLoRA **Llama2-7B批次大小 = 4, 序列长度 = 204812.3 GB3155
1 x RTX 4090LoRALlama2-7B批次大小 = 4, 序列长度 = 204821.3 GB2582
2 x RTX 4090LoRALlama2-7B批次大小 = 4, 序列长度 = 204816.2 GB2768
1 x RTX 4090全量微调 *Llama2-7B批次大小 = 4, 序列长度 = 204824.1 GB702
4 x RTX 4090全量微调Llama2-7B批次大小 = 4, 序列长度 = 204824.1 GB1388
8 x A100LoRALlama2-70B批次大小 = 4, 序列长度 = 409626.4 GB3384
8 x A100全量微调 *Llama2-70B批次大小 = 4, 序列长度 = 409670.4 GB2032

*= 使用来自bitsandbytes的PagedAdamW

**= 使用torch compile

Llama3和Llama3.1

torchtune支持对Llama3 8B和70B规模的模型进行微调。我们目前支持在单个GPU上进行LoRA、QLoRA和全量微调,以及在多个设备上对8B模型进行LoRA和全量微调,还支持在多个设备上对70B模型进行LoRA微调。有关所有详细信息,请查看我们的教程

[!注意] 我们的Llama3和Llama3.1 LoRA和QLoRA配置默认使用指令微调模型。这是因为基础的8B和70B模型中并非所有特殊标记嵌入都已初始化。

在我们对Llama3-8B的初步实验中,QLoRA的峰值分配内存约为~9GB,而单GPU上的LoRA峰值分配内存约为~19GB。要开始使用,您可以使用我们的默认配置来启动训练。

单GPU

LoRA 8B

tune run lora_finetune_single_device --config llama3_1/8B_lora_single_device

QLoRA 8B

tune run lora_finetune_single_device --config llama3_1/8B_qlora_single_device

全量 8B

tune run full_finetune_single_device --config llama3_1/8B_full_single_device

多GPU

全量 8B

tune run --nproc_per_node 4 full_finetune_distributed --config llama3_1/8B_full

LoRA 8B

tune run --nproc_per_node 2 lora_finetune_distributed --config llama3_1/8B_lora

LoRA 70B

请注意,Meta-Llama3 70B模型的下载命令与8B模型的下载命令略有不同。这是因为我们使用HuggingFace的safetensor模型格式来加载模型。要下载70B模型,请运行

tune download meta-llama/Meta-Llama-3.1-70b --hf-token <> --output-dir /tmp/Meta-Llama-3.1-70b --ignore-patterns "original/consolidated*"

然后,可以启动微调:

tune run --nproc_per_node 8 lora_finetune_distributed --config llama3_1/70B_lora.yaml

您可以在此处找到我们所有Llama3配置的完整列表,在此处找到Llama3.1配置的完整列表。

安装

步骤1: 安装PyTorch。torchtune已经在最新的稳定版PyTorch发布以及预览的每日构建版本上进行了测试。要微调仓库中提供的多模态LLM,您还需要安装torchvision。

# 使用pip安装稳定版PyTorch
pip install torch torchvision

# 安装每日构建版以获取最新功能
pip install --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/cu121

步骤2: torchtune的最新稳定版本托管在PyPI上,可以使用以下命令下载:

pip install torchtune

要确认软件包已正确安装,您可以运行以下命令:

tune --help

您应该看到以下输出:

usage: tune [-h] {ls,cp,download,run,validate} ... 欢迎使用torchtune命令行界面! 选项: -h, --help 显示此帮助消息并退出 ...

您还可以通过安装每日构建版本来获得torchtune提供的最新和最强大的功能。

入门

要开始使用torchtune微调您的第一个LLM,请查看我们关于微调Llama2 7B的教程。我们的端到端工作流程教程将向您展示如何评估、量化和运行此模型的推理。本节的其余部分将简要概述使用Llama2进行这些步骤的过程。

下载模型

按照官方meta-llama仓库的说明确保您有权访问官方Llama模型权重。一旦确认访问权限,您可以运行以下命令将权重下载到本地机器。这还将下载分词器模型和负责任使用指南。

Llama3下载

tune download meta-llama/Meta-Llama-3-8B \ --output-dir /tmp/Meta-Llama-3-8B \ --hf-token <HF_TOKEN> \

[!提示] 设置环境变量HF_TOKEN或在命令中传入--hf-token以验证您的访问权限。您可以在https://huggingface.co/settings/tokens找到您的令牌

运行微调配方

Llama3 8B + 在单个GPU上使用LoRA:

tune run lora_finetune_single_device --config llama2/7B_lora_single_device

对于分布式训练,tune CLI 集成了 torchrun。 在两个 GPU 上运行 Llama3 8B + LoRA:

tune run --nproc_per_node 2 full_finetune_distributed --config llama2/7B_full

[!提示] 确保将任何 torchrun 命令放在配方规范之前。之后的任何 CLI 参数都将覆盖配置,而不会影响分布式训练。

 

修改配置

你可以通过两种方式修改配置:

配置覆盖

你可以轻松地从命令行覆盖配置属性:

tune run lora_finetune_single_device \ --config llama2/7B_lora_single_device \ batch_size=8 \ enable_activation_checkpointing=True \ max_steps_per_epoch=128

更新本地副本

你也可以将配置复制到本地目录并直接修改内容:

tune cp llama2/7B_full ./my_custom_config.yaml 已复制到 ./7B_full.yaml

然后,你可以通过将 tune run 命令指向你的本地文件来运行自定义配方:

tune run full_finetune_distributed --config ./my_custom_config.yaml

 

查看 tune --help 了解所有可能的 CLI 命令和选项。有关使用和更新配置的更多信息,请查看我们的配置深度探讨

 

设计原则

torchtune 体现了 PyTorch 的设计哲学[详情],特别是"可用性高于一切"。

原生 PyTorch

torchtune 是一个原生 PyTorch 库。虽然我们提供与周围生态系统的集成(例如 Hugging Face Datasets、EleutherAI Eval Harness),但所有核心功能都是用 PyTorch 编写的。

简单性和可扩展性

torchtune 旨在易于理解、使用和扩展。

  • 组合优于实现继承 - 用于代码重用的继承层会使代码难以阅读和扩展
  • 无训练框架 - 明确概述训练逻辑使其易于扩展以适应自定义用例
  • 代码重复优于不必要的抽象
  • 模块化构建块优于单一组件

正确性

torchtune 提供经过充分测试的组件,对正确性有很高的要求。该库永远不会是第一个提供某个功能的库,但可用的功能将经过彻底测试。我们提供

  • 广泛的单元测试,以确保组件级别与参考实现的数值一致性
  • 检查点测试,以确保模型级别与参考实现的数值一致性
  • 集成测试,以确保在标准基准测试上与参考实现的配方级性能一致性

 

社区贡献

我们非常重视我们的社区和我们出色用户做出的贡献。我们将在这一部分中呼吁一些这些贡献!如果你也想提供帮助,请查看 CONTRIBUTING 指南。

 

致谢

此存储库中的 Llama2 代码受到原始 Llama2 代码 的启发。

我们要向 EleutherAI、Hugging Face 和 Weights & Biases 表示衷心的感谢,感谢他们成为出色的合作伙伴,并与我们一起在 torchtune 中完成一些集成工作。

我们还要感谢生态系统中一些优秀的库和工具:

  • gpt-fast 提供了高性能的 LLM 推理技术,我们已经采用了开箱即用的方式
  • llama recipes 为 llama2 社区提供了起步支持
  • bitsandbytes 为 PyTorch 生态系统带来了多项基于内存和性能的技术
  • @winglianaxolotl 对 torchtune 的设计和功能集提供了早期反馈和头脑风暴
  • lit-gpt 推动了 LLM 微调社区的发展
  • HF TRL 使奖励建模对 PyTorch 社区更易访问

 

许可证

torchtune 根据 BSD 3 许可证 发布。但是,你可能还有其他法律义务来管理你对其他内容的使用,例如第三方模型的服务条款。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多