在各种应用中,大型语言模型(LLMs)的使用越来越广泛。然而,针对特定任务对这些强大的模型进行微调可能是一个复杂且资源密集的任务。TorchTune,一个全新的PyTorch库,直面这一挑战,提供了一个直观且可扩展的解决方案。PyTorch发布了alpha版本的TorchTune,这是一个PyTorch原生库,用于轻松微调大型语言模型。根据PyTorch的设计原则,它提供了可组合和模块化的构建块,以及易于扩展的训练配方,用于微调各种消费级和专业GPU上的大型语言技术,如LORA和QLORA。
在过去的一年里,对开放的大型语言模型(LLMs)的兴趣激增。对这些尖端模型进行微调以适应特定应用已成为一项关键技术。然而,这种适应过程可能很复杂,需要在各个阶段进行广泛的定制,包括数据和模型选择、量化、评估和推理。此外,这些模型的庞大规模在资源受限的消费级GPU上进行微调时提出了重大挑战。
当前的解决方案往往通过抽象层次隐藏关键组件,阻碍了定制和优化。这种缺乏透明度使得理解不同元素如何相互作用以及需要修改哪些元素以实现所需功能变得困难。TorchTune通过赋予开发者对整个微调过程的细粒度控制和可见性来解决这一挑战,使他们能够根据特定要求和约束定制LLMs。
TorchTune支持以下微调工作流程:下载和准备数据集和模型检查点;使用支持不同模型架构、参数高效微调(PEFT)技术和更多的可组合构建块自定义训练;记录进度和指标以洞察训练过程;微调后量化模型;在流行的基准测试上评估微调模型;运行本地推理以测试微调模型;与流行的生产推理系统兼容的检查点。
TorchTune提供以下微调配方。训练微调方法包括分布式训练(1至8个GPU)、单设备/低内存(1个GPU)和单设备(1个GPU)。所有配方都在各种设置上进行了测试,包括具有24GB VRAM的商品GPU以及数据中心中找到的更强大的选项。
单GPU配方公开了一些在分布式版本中不可用的内存优化,包括支持来自bitsandbytes的低精度优化器,以及融合优化器步骤与后向步骤以减少梯度的内存占用(参见示例配置)。对于内存受限的设置,建议使用单设备配置作为起点。例如,默认QLORA配置的峰值内存使用量约为9.3GB。同样,在单设备上使用batch_size=2的LoRA,峰值内存使用量约为17.1GB。这两个都使用dtype=bf16和AdamW作为优化器。
TorchTune的设计是可扩展的:承认微调技术的快速发展和多样化的用户需求,TorchTune优先考虑易于扩展性。其配方利用模块化组件和易于修改的训练循环。最小化的抽象确保了用户对微调过程的控制。每个配方都是自包含的(少于600行代码!)并且不需要外部训练器或框架,进一步促进了透明度和定制。
民主化微调:TorchTune通过迎合不同专业水平的用户,促进包容性。其直观的配置文件易于修改,允许用户在没有广泛的编码知识的情况下自定义设置。此外,内存高效的配方使得在现成的消费级GPU(例如,24GB)上进行微调,消除了对昂贵数据中心硬件的需求。
开源生态系统集成:认识到充满活力的开源LLM生态系统,PyTorch的TorchTune优先考虑与各种工具和资源的互操作性。这种灵活性为用户提供了对微调过程和模型部署的更大控制权。