为模型训练注入超级动力
面向规模化训练的深度学习框架
[官网] - [快速开始] - [文档] - [我们正在招聘!]
Composer 是 MosaicML 开发的开源深度学习训练库。它构建于 PyTorch 之上,旨在简化大规模集群上的分布式训练工作流。
我们构建 Composer 时,特别针对可扩展性和易用性进行了优化,集成了高效多节点训练的最佳实践。通过抽象掉并行技术、分布式数据加载和内存优化等底层复杂性,您可以专注于训练现代 ML 模型和运行实验,而不会降低速度。
如果您正在训练任何规模的神经网络,我们推荐使用 Composer 来加速您的实验工作流,包括:
MosaicML 研究团队广泛使用 Composer 来训练像 MPT 这样的前沿模型,我们将此库开源,以使整个 ML 社区也能做到这一点。该框架被科技行业和学术界的组织所使用,并持续更新新功能、错误修复和生产工作负载的稳定性改进。

我们为现代深度学习工作负载从头设计了 Composer。AlexNet 和 ResNet 时代已经过去,那时最先进的模型可以在几台桌面 GPU 上训练。如今,开发最新、最强大的深度学习模型通常需要集群规模的硬件——但在 Composer 的帮助下,您几乎不会感觉到差异。
Composer 的核心是我们的 Trainer 抽象:一个高度优化的 PyTorch 训练循环,旨在让您和您的模型都能更快地迭代。我们的训练器提供了简单的方法来配置并行化方案、数据加载器、指标、记录器等。
无论您是在 1 个 GPU 还是 512 个 GPU 上训练,处理 50MB 还是 10TB 的数据,Composer 都能让您的工作流保持简单。
其他高级深度学习训练器以牺牲灵活性为代价提供简单性。当您想添加自己的功能时,它们的抽象会成为障碍。而 Composer 则提供了简单的方法,让您可以根据需要定制我们的训练器。

图 1: Composer 的训练循环在训练过程的每个阶段都有一系列事件发生。回调是用户在特定事件时编写的函数。例如,我们的 学习率监控回调 会在每个 BATCH_END 事件记录学习率。
Composer 旨在自动化处理底层的痛点,让您可以专注于深度学习重要(且有趣)的部分,并更快地迭代。
Time 类,在训练循环中用自定义单位(周期、批次、样本、词元)指定训练时长。与您熟悉和喜爱的实验跟踪和数据流工具集成。
Composer 面向熟悉 Python 并对深度学习基础和 PyTorch 有基本了解的用户。
软件要求: 需要较新版本的 PyTorch。
硬件要求: 需要支持 CUDA 的 GPU 系统(AMD + RoCM 即将支持!)。Composer 可以在 CPU 上运行,但要获得全部优势,我们建议在硬件加速器上使用。
可以通过 pip 安装 Composer:
pip install mosaicml
为了简化 Composer 的环境设置,我们还提供了一套预构建的 Docker 镜像。我们强烈推荐您使用我们的 Docker 镜像。
以下是在 MNIST 数据集上使用我们的训练器的代码片段。
import torch
import torch.nn as nn
import torch.nn.functional as F
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
from composer import Trainer
from composer.models import ComposerClassifier
from composer.algorithms import LabelSmoothing, CutMix, ChannelsLast
class Model(nn.Module):
"""Toy convolutional neural network architecture in pytorch for MNIST."""
def __init__(self, num_classes: int = 10):
super().__init__()
self.num_classes = num_classes
self.conv1 = nn.Conv2d(1, 16, (3, 3), padding=0)
self.conv2 = nn.Conv2d(16, 32, (3, 3), padding=0)
self.bn = nn.BatchNorm2d(32)
self.fc1 = nn.Linear(32 * 16, 32)
self.fc2 = nn.Linear(32, num_classes)
def forward(self, x):
out = self.conv1(x)
out = F.relu(out)
out = self.conv2(out)
out = self.bn(out)
out = F.relu(out)
out = F.adaptive_avg_pool2d(out, (4, 4))
out = torch.flatten(out, 1, -1)
out = self.fc1(out)
out = F.relu(out)
return self.fc2(out)
transform = transforms.Compose([transforms.ToTensor()])
dataset = datasets.MNIST("data", train=True, download=True, transform=transform)
train_dataloader = DataLoader(dataset, batch_size=128)
trainer = Trainer(
model=ComposerClassifier(module=Model(), num_classes=10),
train_dataloader=train_dataloader,
max_duration="2ep",
algorithms=[
LabelSmoothing(smoothing=0.1),
CutMix(alpha=1.0),
ChannelsLast(),
],
)
trainer.fit()
接下来,查看我们的 快速入门 Colab,了解 Composer 主要功能的逐步讲解。在本教程中,我们将介绍 Composer 训练器的基础知识:
完成快速入门后,您可以浏览以下教程或我们的文档,以进一步熟悉 Composer。
如果您有任何问题,请随时通过我们的 社区 Slack 联系我们!
以下是由 Composer 社区积极维护的一些资源,帮助您入门:
| 资源 | 详情 |
|---|---|
| 使用 Composer 和 🤗 训练 BERT 模型 | 展示如何使用 Composer 和 🤗 训练 BERT 模型的 Colab Notebook! |
| 预训练和微调 LLM 教程 | 来自 MosaicML LLM Foundry 的教程,使用 MosaicML Composer、StreamingDataset 和 MCLI 来训练和评估 LLMs。 |
| 从 PyTorch Lightning 迁移 | 本教程旨在说明从使用 PyTorch Lightning 迁移到使用 Composer 的路径。 |
| 微调和预训练 HuggingFace 模型 | 想将 Hugging Face 模型与 Composer 一起使用?没问题。在这里,我们将介绍如何使用 Composer 微调预训练的 Hugging Face BERT 模型。 |
| 构建加速方法 | 展示如何在 Composer 之上构建新的训练修改方法的 Colab Notebook。 |
Composer 可以单独使用,但为了获得最顺畅的体验,我们建议将其与 MosaicML 生态系统的其他组件结合使用:

以下是一些使用 Composer 的项目和实验。