提升您的模型训练效率
大规模训练的深度学习框架
[官网] - [入门指南] - [文档] - [我们正在招聘!]
👋 欢迎
Composer 是 MosaicML 提供的一个开源深度学习训练库。基于 PyTorch 构建,Composer 库让在大规模集群上实现分布式训练工作流变得更加容易。
我们构建了 Composer,使其在扩展性和易用性方面进行了优化,集成了用于高效多节点训练的最佳实践。通过抽象掉低层次的复杂性,如并行技术、分布式数据加载和内存优化,您可以专注于训练现代 ML 模型和进行实验,而无需减慢速度。
如果您正在训练任何规模的神经网络,包括以下内容,我们建议使用 Composer 来加速您的实验工作流:
- 大型语言模型 (LLMs)
- 扩散模型
- 嵌入模型(如 BERT)
- 基于 Transformer 的模型
- 卷积神经网络 (CNNs)
Composer 被 MosaicML 的研究团队广泛用于训练如 MPT 这样的最新模型,我们开源了这个库,以便 ML 社区也能做同样的事情。该框架被技术行业和学术领域的组织使用,并且不断更新新功能、错误修复和稳定性改进,以支持生产工作负载。
🔑 关键特性
我们从头开始为现代深度学习工作负载设计了 Composer。再也不是 AlexNet 和 ResNet 的时代了,那时的最新模型可以在几台桌面 GPU 上训练。如今,开发最新和最先进的深度学习模型通常需要集群规模的硬件——但有了 Composer 的帮助,您几乎不会注意到差别。
Composer 的核心是我们的 Trainer 抽象:一个高度优化的 PyTorch 训练循环,旨在让您和您的模型更快地迭代。我们的 Trainer 具有简单的方式让您配置并行化方案、数据加载器、指标、记录器等。
可扩展性
无论您是在 1 个 GPU 还是 512 个 GPU 上训练,数据量是 50MB 还是 10TB - Composer 都旨在让您的工作流程保持简单。
- FSDP:对于过大无法适配 GPU 的大型模型,Composer 已将 PyTorch 的 FullyShardedDataParallelism 集成到我们的 Trainer 中,并简化了自定义模型的高效并行化。我们发现 FSDP 的性能与更复杂的并行策略相当。或者,Composer 还支持标准的 PyTorch 分布式数据并行 (DDP) 和 Deepspeed 执行。
- 弹性分片检查点:在八个 GPU 上保存,在十六个 GPU 上恢复。Composer 支持弹性分片检查点,因此您永远不用担心分片保存状态是否与新的硬件设置兼容。
- 数据流处理:处理大规模数据集?通过在模型训练期间集成 MosaicML StreamingDataset,可以按需从云端 blob 存储中下载数据集。
可定制性
其他高级深度学习训练器在提供简单性的同时往往带来僵化性。当您想要添加自己的功能时,它们的抽象层会成为障碍。Composer 则提供了简单的方法让您根据需要定制我们的 Trainer。
图 1: Composer 的训练循环在训练过程中每个阶段都会发生一系列事件。回调是用户编写的在特定事件发生时运行的函数。例如,我们的 学习率监控回调 在每个 BATCH_END 事件时记录学习率。
- 回调:Composer 的回调系统允许您在训练循环中的任何点插入自定义逻辑。我们编写了用于监控内存使用情况、记录和可视化图像以及估计模型剩余训练时间的回调,仅举几例。这一特性在研究人员中很受欢迎,他们希望实施和实验自定义训练技术。
- 加速算法:我们从最新研究中汲取灵感,创建了一系列算法加速选项。将这些加速叠加到 MosaicML 配方中,以提升训练速度。我们的团队已经开源了针对不同模型的最佳加速组合。
- 8倍加速:稳定扩散
- $200k 原始 SD2 成本 —> $50k (博客)
- **7倍加速:ResNet-50 在 Image 以下是译文:
- 8倍加速:稳定扩散
这里有一些由Composer社区积极维护的资源,可以帮助您入门:
资源 | 详细信息 |
---|---|
使用Composer和🤗训练BERT模型 | 一个Colab笔记本,展示了如何使用Composer和🤗训练BERT模型! |
预训练和微调LLM教程 | 来自MosaicML的LLM Foundry的教程,使用MosaicML Composer、StreamingDataset和MCLI来训练和评估LLM。 |
从PyTorch Lightning迁移 | 一个教程,展示了从使用PyTorch Lightning过渡到使用Composer的路径。 |
微调和预训练HuggingFace模型 | 想要使用Composer进行Hugging Face模型的微调?没问题。在这里,我们将介绍如何使用Composer微调预训练的Hugging Face BERT模型。 |
构建加速方法 | 一个Colab笔记本,展示了如何在Composer之上构建新的训练修改方法。 |
🛠️ 最佳实践:在Databricks和MosaicML生态系统中使用
Composer可以单独使用,但为了获得最佳体验,我们建议将其与MosaicML生态系统的其他组件结合使用:
- Mosaic AI训练 (MCLI) - 我们的专有命令行界面(CLI)和Python SDK,用于协调、扩展和监控执行训练和部署的GPU节点和容器镜像。我们的客户使用它来训练他们自己的生成式AI模型。
- MosaicML LLM Foundry - 这个开源仓库包含了使用Composer进行LLM的训练、微调、评估和推理准备的代码。设计易于使用、高效且灵活,这个代码库旨在通过最新技术实现快速实验。
- MosaicML StreamingDataset - 用于从云存储进行快速、准确流式传输的开源库。
- MosaicML Diffusion - 开源代码,用于在您自己的数据上训练您自己的稳定扩散模型。通过我们的博客了解更多信息: (结果 , 加速细节)
🏆 项目展示
以下是使用Composer的一些项目和实验。有什么要分享的吗?请在我们的社区Slack中分享!
- MPT基础系列: 商业可用的开源LLM,优化用于快速训练和推理,并使用Composer训练。
- Mosaic扩散模型:看看我们如何从零开始训练稳定扩散模型,成本不到5万美元
- replit-code-v1-3b:一个2.7B因果语言模型,专注于代码补全,由Replit使用Mosaic AI训练在10天内完成训练。
- BabyLLM: 首个支持阿拉伯语和英语的LLM。这个7B模型由MetaDialog在世界上最大的阿拉伯语/英语数据集上训练,以改进客户支持工作流程 (博客)
- BioMedLM:MosaicML与斯坦福CRFM共同打造的专为生物医学领域设计的LLM
💫 贡献者
Composer是更广泛的机器学习社区的一部分,我们欢迎任何贡献、拉取请求或问题!
要开始贡献,请参阅我们的贡献指南。
P.S.: 我们正在招聘!
❓常见问题
- 训练大型模型时推荐使用什么技术栈?
- 我们建议用户结合MosaicML生态系统的组件以获得最佳体验:
- Composer
- StreamingDataset
- MCLI(Databricks Mosaic AI训练)
- 我们建议用户结合MosaicML生态系统的组件以获得最佳体验:
- 如何获得使用Composer的社区支持?
- 您可以加入我们的社区Slack!
- Composer与其他训练器如NeMo Megatron和PyTorch Lightning相比如何?
- 我们构建Composer是为了优化简单性和效率。社区用户反馈,他们喜欢Composer的功能和使用便利性,相比其他库更为优越。
- 如何使用Composer训练图神经网络(GNNs)、生成对抗网络(GANs)或强化学习(RL)模型?
- 如果您想训练这些类型的模型,我们建议您使用其他库,因为我们在设计Composer时做出的许多假设对于GNNs、RL和GANs并不理想。
✍️ 引用
@misc{mosaicml2022composer,
author = {The Mosaic ML Team},
title = {composer},
year = {2021},
howpublished = {\url{https://github.com/mosaicml/composer/}},
}