Project Icon

torchtune

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

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

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 许可证 发布。但是,你可能还有其他法律义务来管理你对其他内容的使用,例如第三方模型的服务条款。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号