跳转到主要内容

用于使用原生PyTorch微调LLMs的软件包

项目描述

Unit Test Recipe Integration Test

TorchTune (alpha版本)

介绍 | 安装 | 开始使用 | 设计原则 | 贡献 | 许可

 

介绍

TorchTune是一个原生PyTorch库,用于轻松创建、微调和实验LLMs。

该库提供

  • 流行LLMs的原生PyTorch实现
  • 支持各种格式的检查点,包括HF格式的检查点
  • 流行微调技术的训练配方,包括参考基准和全面的正确性检查
  • 与HuggingFace Datasets进行集成,用于训练,与EleutherAI的Eval Harness进行评估
  • 支持使用PyTorch Distributed的FSDP进行分布式训练
  • YAML配置,用于轻松配置训练运行
  • [即将推出] 支持来自TorchAO的更低精度dtypes和量化技术
  • [即将推出] 与各种推理引擎的互操作性

 

该库目前支持以下模型和微调方法。

模型 尺寸 微调方法
Llama2 7B 全微调[单设备分布式],LoRA[单设备分布式]

 

微调资源需求

注意:这些资源需求基于使用指定配置进行训练时保留的GPU峰值内存。您可能会根据配置/训练中的更改而遇到不同的峰值内存利用率。请参阅表格中链接的配置,以获取用于获得峰值内存的批大小、FSDP、激活检查点、优化器等特定设置。

硬件资源 微调方法 配置 模型大小 每GPU峰值内存
2 x RTX 4090 LoRA lora_finetune_distributed 7B 18 GB *
1 x A6000 LoRA lora_finetune_single_device 7B 29.5 GB *
4 x T4 LoRA lora_finetune_distributed 7B 12 GB *
2 x A100 80G 全微调 full_finetune_distributed 7B 62 GB
8 x A6000 全微调 full_finetune_distributed 7B 42 GB *

注意:*表示基于在A100 GPU上进行的实验得出的估算指标。每GPU峰值内存是通过对数百次训练迭代进行监控的nvidia-smi报告的。如果在某些硬件上运行TorchTune时无法重现这些结果,请提交问题。

 


安装

目前,必须通过克隆存储库并按以下方式安装torchtune

注意:TorchTune目前仅与最新的稳定PyTorch版本进行了测试,目前是2.2

git clone https://github.com/pytorch/torchtune.git
cd torchtune
pip install -e .

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

tune

然后应看到以下输出

usage: tune [options] <recipe> [recipe_args]
tune: error: the following arguments are required: recipe, recipe_args

 


入门

有关我们快速入门指南,帮助您快速进行LLM微调,请参阅我们的使用TorchTune微调Llama2教程。您也可以按照以下步骤操作。

下载模型

按照官方meta-llama存储库上的说明进行操作,以确保您有权访问Llama2模型权重。一旦确认了访问权限,您就可以运行以下命令将权重下载到您的本地计算机。这将同时下载分词器模型和负责任的使用指南。

设置环境变量HF_TOKEN或将--hf-token传递到命令中,以验证您的访问权限。您可以在https://hugging-face.cn/settings/tokens找到您的令牌。

tune download --repo-id meta-llama/Llama-2-7b \
--hf-token <HF_TOKEN> \
--output-dir /tmp/llama2

注意:虽然tune download命令允许您从枢纽下载任何模型,但无法保证模型可以使用TorchTune进行微调。目前支持的模式可以在此处找到。

 

运行食谱

TorchTune包含以下食谱

使用FSDP在两个设备上对Alpaca数据集进行全微调。

tune --nnodes 1 --nproc_per_node 2 \
full_finetune_distributed \
--config full_finetune_distributed

传递给--nproc_per_node的参数可以根据您拥有的GPU数量进行调整。完整的微调可能非常耗费内存,因此请确保您正在足够的设备上运行。请参阅此表格以获取常见硬件配置的资源要求。

同样,您可以通过以下方式在两个设备上使用LoRA对Alpaca数据集进行微调。

tune --nnodes 1 --nproc_per_node 2 \
lora_finetune_distributed \
--config lora_finetune_distributed

再次强调,--nproc_per_node的参数可以根据您的设备内存限制进行调整。

 

复制并编辑自定义配方

要复制配方进行自定义,然后运行

tune cp full_finetune_distributed.py my_recipe/full_finetune_distributed.py
tune cp full_finetune_distributed.yaml my_recipe/full_finetune_distributed.yaml
tune my_recipe/full_finetune_distributed.py --config my_recipe/full_finetune_distributed.yaml

 

命令工具

tune提供了启动torchtune配方以及本地配方的功能。除了torchtune配方工具之外,它还集成了torch.distributed.run以默认支持分布式作业启动。tune提供了torchrun所做的所有功能,并具有以下附加功能

  1. tune <torchrun_options> <recipe> <recipe_args>将启动一个torchrun作业

  2. <recipe>和配方参数<config>都可以作为名称而不是路径传递,如果它们包含在torchtune中

  3. tune lstune cp命令提供了列出和复制打包配方和配置的实用工具

 


设计原则

TorchTune体现了PyTorch的设计理念 [详情],特别是“易用性胜过一切”。

原生PyTorch

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

简单性和可扩展性

TorchTune被设计成易于理解、使用和扩展。

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

正确性

TorchTune提供了经过良好测试的组件,对正确性要求很高。该库永远不会是第一个提供功能,但提供的功能将经过彻底测试。我们提供

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

 

贡献

我们欢迎社区提出的任何功能请求、错误报告或拉取请求。请参阅CONTRIBUTING文件以了解如何提供帮助。

 

许可

TorchTune根据BSD 3许可证发布。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分布

此版本没有可用的源分布文件。请参阅生成分布存档的教程。

构建分布

torchchat-0.0.1-py3-none-any.whl (155.8 kB 查看哈希值)

上传时间 Python 3

由以下支持