用于使用原生PyTorch微调LLMs的软件包
项目描述
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的多个设备上进行全微调。
- 在单个设备和具有FSDP的多个设备和。
使用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
所做的所有功能,并具有以下附加功能
-
tune <torchrun_options> <recipe> <recipe_args>
将启动一个torchrun作业 -
<recipe>
和配方参数<config>
都可以作为名称而不是路径传递,如果它们包含在torchtune中 -
tune ls
和tune cp
命令提供了列出和复制打包配方和配置的实用工具
设计原则
TorchTune体现了PyTorch的设计理念 [详情],特别是“易用性胜过一切”。
原生PyTorch
TorchTune是一个原生PyTorch库。虽然我们提供了与周围生态系统(例如:HuggingFace Datasets,EluetherAI Eval Harness)的集成,但所有核心功能都是用PyTorch编写的。
简单性和可扩展性
TorchTune被设计成易于理解、使用和扩展。
- 组合优于实现继承 - 代码重用的继承层使得代码难以阅读和扩展
- 没有训练框架 - 明确说明训练逻辑使得它易于扩展以适应自定义用例
- 代码重复优先于不必要的抽象
- 模块化构建块优于单体组件
正确性
TorchTune提供了经过良好测试的组件,对正确性要求很高。该库永远不会是第一个提供功能,但提供的功能将经过彻底测试。我们提供
- 广泛的单元测试,以确保组件级数值与参考实现保持一致
- 检查点测试,以确保模型级数值与参考实现保持一致
- 集成测试,以确保配方级性能与参考实现保持一致,在标准基准测试中
贡献
我们欢迎社区提出的任何功能请求、错误报告或拉取请求。请参阅CONTRIBUTING文件以了解如何提供帮助。
许可
TorchTune根据BSD 3许可证发布。
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪一个,请了解更多关于安装包的信息。