首页
/ Colossal-AI 全景概述:统一大规模分布式训练系统与 Booster 工作流实战指南

Colossal-AI 全景概述:统一大规模分布式训练系统与 Booster 工作流实战指南

2026-09-08 15:50:41作者:农烁颖Land

导读

本文以 Colossal-AI 官方文档《Colossal-AI Overview》为骨架,系统讲解这套统一大规模模型训练系统的设计定位、核心训练工具与并行能力矩阵,并深入展开其推荐的"四步"通用使用流程(配置 → 启动 → 注入 → 训练/评测)。通过结合本仓库源码,读者将掌握 colossalai.launch 系列启动 API、Booster 组件注入机制、各类 Plugin(数据并行/ZeRO/Gemini/混合并行等)的适用场景,以及如何在真实示例项目中从零跑通一个基于 Booster 的完整训练任务。


一、为什么需要 Colossal-AI:从"单卡训练"走向"规模化训练"

随着深度学习模型体量的持续增长,训练范式必须发生转变。以纯单机单卡、无并行、无优化的传统训练方式去支撑大模型,无论是在时间成本还是硬件成本上都难以为继。当模型参数量达到数十亿甚至千亿规模、训练数据集也随之膨胀时,如何高效且经济地完成训练成为核心挑战,而答案正是分布式并行训练与系统级优化手段的组合。

Colossal-AI 正是为此设计的一套统一训练系统:它把训练大型 AI 模型所需的各种"技能"与工具集合到同一个框架之内,让使用者不必在多套互相割裂的开源组件之间自行拼装。根据 concepts/colossalai_overview.md 的定位,这套技能集合可以分为两类:

  1. 通用训练工具:例如混合精度训练(mixed precision training)、梯度累积(gradient accumulation)等所有训练任务都会用到的常规能力;
  2. 系统级并行能力:包括数据并行(data parallel)、张量并行(tensor parallel)与流水线并行(pipeline parallel)等多种并行范式。在此基础上,框架还针对张量并行优化了多种不同维度的分布式矩阵乘算法,并提供多种流水线并行实现以支持模型跨节点高效扩展;更进阶的**异构卸载(offloading)**等特性也在后续文档中有详细讲解。

关于各类并行范式的概念性说明(数据并行、张量并行、流水线并行、序列并行、ZeRO 优化器级并行、异构系统并行),可进一步阅读同目录下的 paradigms_of_parallelism.md,本文后续会结合该文档简述其与 Overview 中能力矩阵的对应关系。


二、四种并行的基本盘:Overview 背后承载的并行能力矩阵

Overview 明确承诺"提供数据、张量与流水线并行"并"针对不同维度分布式矩阵乘做优化",下面用仓库文档 paradigms_of_parallelism.md 中的要点,把这张能力底牌展开,便于读者建立全局图景:

  • 数据并行(Data Parallel):最通用的一种并行。数据集被切分为多个分片分发给各设备,等价于沿 batch 维度并行。每个设备持有一份完整模型副本,在各自的数据分片上训练;反向传播后通过 all-reduce 同步梯度,保证各设备参数一致。
  • 张量并行(Tensor Parallel,层内并行):把一个张量沿某一维度切成 N 份、每台设备只持有 1/N,同时通过额外的通信(如 all-gather 拼接部分结果)保证计算图语义正确。以矩阵乘法 C = AB 为例:将 B 沿列维切为 [B0 B1 ... Bn] 分发到各设备,各设备并行计算得到部分结果 [AB0 AB1 ... ABn] 后再 all-gather 拼接——这正是 Overview 中"以不同多维分布式矩阵乘算法优化张量并行"的抽象基础。Colossal-AI 在张量并行上提供 1D、2D、2.5D、3D 多种方法。
  • 流水线并行(Pipeline Parallel,层间并行):模型按层切分为若干 chunk 分给不同设备。前向时每台设备把中间激活传给下一阶段,反向时把输入梯度回传给上一阶段,从而让多设备并行计算、提升吞吐。其代价是会产生一定的 bubble 时间(部分设备处于等待,计算资源空闲)。
  • 序列并行与异构系统并行:前者沿序列维度切分(如 Megatron SP、DeepSpeed-Ulysses 的 all-to-all 方案、Ring Attention);后者则利用 CPU 内存乃至 NVMe 磁盘,把暂时不用的张量卸载回去,从而在单机上容纳超大模型——对应 Overview 中提到的"offloading"进阶特性。

说明:以上能力矩阵在旧版 API(colossalai.legacy)中由 parallel_context 等机制编排;而在当前新版 API 中,这些并行能力被统一抽象进 Plugin + Booster 框架(见下文第五节),具体 Plugin 的对应实现位于 colossalai/booster/plugin


三、通用使用流程:四步跑通一个 Colossal-AI 训练任务

Overview 文档强调,Colossal-AI 的设计目标之一是易用且对用户代码低侵入(non-intrusive)——尽量让用户原有的模型、优化器代码保持原样,由框架负责注入并行与优化能力。为此,官方给出了一套简洁的通用工作流,共四步:

  1. 准备配置文件:在配置文件中声明你希望启用的特性和对应参数;
  2. 初始化分布式后端:调用 colossalai.launch 完成分布式环境初始化;
  3. 注入训练特性:通过 colossalai.booster(即 Booster)把并行/精度等特性注入到训练组件(如 model、optimizer)中;
  4. 运行训练与测试:执行正常的训练循环与评测。

需要说明的是,在当前版本中,launchBooster 都提供了面向新 API 的入口(位于 colossalai/initialize.pycolossalai/booster/booster.py),并在大量教程示例中使用;而旧版 API 的对应实现保留在 colossalai/legacy/initialize.py 中以兼容历史代码。下文以新 API 为准展开。

3.1 第 1 步:确定配置形态

在新 API 下,"配置"不再是一份必须显式传入的 Python 配置文件,而是体现为 launch 的入参 + Booster 的构造参数(pluginmixed_precisiondevice)这两个层次。也就是说,用户只需把"想要的特性"声明式地表达出来,例如:

  • 想用哪种启动方式(多机手动 / SLURM / OpenMPI / torchrun);
  • 想用哪种并行与显存策略(TorchDDPPlugin / LowLevelZeroPlugin / GeminiPlugin / HybridParallelPlugin 等);
  • 想用哪种混合精度(fp16 / bf16 / fp16_apex / fp8 等)。

旧版文档中"独立 config 文件 + Config 解析"的形态在 legacy 中仍可找到对应,例如 colossalai/legacy/initialize.pylaunchconfig 参数即同时接受 str / Path / Config / Dict。对初学者而言,直接对照教程示例中的命令行参数与 Booster 构造写法是最快上手路径(见第五节示例)。

3.2 第 2 步:初始化分布式环境——colossalai.launch

Overview 要求通过 colossalai.launch 初始化分布式后端。查看当前源码 colossalai/initialize.py,新 API 的 launch 函数签名与关键行为如下:

def launch(
    rank: int,
    world_size: int,
    host: str,
    port: int,
    backend: str = "nccl",
    local_rank: int = None,
    seed: int = 1024,
    verbose: bool = True,
):

其内部执行的关键步骤(源码可验证):

  1. 进程组初始化:根据 host 中是否含冒号自动区分 IPv4/IPv6,拼出 tcp://{host}:{port}tcp://[{host}]:{port} 的 init_method,随后调用 torch.distributed.init_process_group(...)
  2. 设备设置backend 实际由当前加速器(accelerator)决定(默认取 cur_accelerator.communication_backend),并调用 cur_accelerator.set_device(local_rank);当 local_rankNone 时由框架自动推算默认设备序号;
  3. 随机种子统一:调用 set_seed(seed),默认种子为 1024,保证各进程可复现;
  4. 额外环境优化:模块在导入时会设置 CUDA_DEVICE_MAX_CONNECTIONS=1(源码文件头注释说明这是为了保证通信与计算重叠时 kernel 在 GPU 上的启动顺序与 CPU 一致),并尝试开启 torch._dynamo.config.optimize_ddp(当 world_size > 1 时);
  5. 日志输出verbose=True(默认)时在 rank 0 打印初始化成功信息。

针对不同的集群调度环境,框架还提供了三种便捷包装,自动从环境变量读取 rank/world_size,用户只需提供 hostport

函数 适用场景 读取的环境变量
launch_from_slurm SLURM 调度器 SLURM 相关环境变量
launch_from_openmpi OpenMPI 启动器 OpenMPI 相关环境变量
launch_from_torch torchrun / torch.distributed.launch RANKLOCAL_RANKWORLD_SIZEMASTER_ADDRMASTER_PORT

这三种包装的实现同样在 colossalai/initialize.py,其中 launch_from_torch 会显式读取 PyTorch 标准环境变量并回填给 launch。这意味着在绝大多数场景下,你甚至不需要手写 rank/world_size——直接使用 colossalai.launch_from_torch() 再配合 torchrun 启动即可。

此外,colossalai/cli/launcher/run.py 展示了 colossalai run 这一 CLI 启动多进程的整体逻辑:若给定 hostfile 则解析后多机启动;否则给定 hosts 则多机启动;都没有则在当前节点启动——多机场景可以通过 hostfile 文件(可参考 applications/Colossal-LLaMA/hostfile.example 的写法)来声明节点列表。

3.3 第 3 步:注入特性——Booster

这是 Overview 中"non-intrusive"设计理念的核心承载者。Booster 位于 colossalai/booster/booster.py,其 docstring 中给出了精炼的使用伪代码,核心构造参数为:

Booster(
    device=None,                 # 训练设备;若不使用 Plugin 或 Plugin 不托管设备时生效
    mixed_precision=None,        # 'fp16' / 'fp16_apex' / 'bf16' / 'fp8' 字符串,或 MixedPrecision 实例
    plugin=None,                 # Plugin 实例,用于注入并行/显存策略
)

mixed_precisionplugin 之间存在优先级约定(源码 booster.py 中通过 plugin.control_device()plugin.control_precision() 判断):

  • 若 Plugin 托管了 device,则传入的 device 参数被忽略并给出 warning;
  • 若 Plugin 托管了 precision,则传入的 mixed_precision 被忽略并给出 warning;
  • 若均不托管,mixed_precision 为字符串时走 mixed_precision_factory(...) 使用默认 AMP 参数,为 MixedPrecision 实例时按用户自定义参数生效。

真正"注入"动作发生在 booster.boost(...) 方法(booster.py)中,它一次性接收并返回五个组件:

model, optimizer, criterion, dataloader, lr_scheduler = booster.boost(
    model, optimizer, criterion, dataloader, lr_scheduler
)

内部执行顺序(源码可验证)为:先由 plugin.configure(...) 完成模型切分/并行化与 DataLoader 的准备 → 再在 Plugin 不托管设备时用 accelerator.configure_model 移动设备 → 最后在不冲突前提下用 mixed_precision.configure(...) 完成精度改造。改造完成后:

  • 训练循环中反向传播请统一走 booster.backward(loss, optimizer)(内部调用 optimizer.backward(loss)),这是梯度规约/状态切分策略得以生效的前提;
  • 若使用流水线并行 Plugin,前向/反向需通过 booster.execute_pipeline(data_iter, model, criterion, optimizer, ...) 驱动,不能再用 loss.backward() 的传统写法(源码对此有明确告警,见 booster.py)。

Booster 还围绕注入后的组件提供了完整配套能力,例如:

  • booster.save_model(...) / booster.load_model(...):统一断点保存与恢复,支持分片(shard)检查点(通过 colossalai/checkpoint_io 实现);
  • booster.no_sync(...):上下文管理器,用于在 DDP / Low-Level ZeRO-1 下关闭梯度同步以配合梯度累积;
  • booster.enable_lora(...):基于 Hugging Face PEFT 的 LoRA 微调注入(需额外安装 peft,并依赖 Plugin 的 support_lora() 能力)。

3.4 第 4 步:运行训练与测试

完成上述注入后,训练与测试就是一段标准 PyTorch 风格的循环:取 batch → 前向 → booster.backwardoptimizer.step()optimizer.zero_grad() → 周期性地 booster.save_model 保存检查点并在测试集上评测。Overview 指出这套完整流程会在"basic tutorials"章节逐步展开,仓库中对应的可直接运行教程位于 examples/tutorial/new_api,下文第五节给出一个端到端的真实示例。


四、Plugin 全景:Booster 背后可选的并行/显存策略

Overview 中罗列的并行与显存优化能力,在新 API 中全部收敛为"选择哪个 Plugin"这一个动作。查看 colossalai/booster/plugin/init.py 可知仓库当前导出的 Plugin 集合为:

Plugin 核心定位(结合源码名与文档推断) 典型场景
TorchDDPPlugin 包装 torch.nn.parallel.DistributedDataParallel,纯数据并行 单机/多机数据并行、入门与 CI 测试
TorchFSDPPlugin 包装 PyTorch FSDP(torch.__version__ >= 1.12.0 时导出) 需要 PyTorch 官方分片数据并行的场景
LowLevelZeroPlugin 低层 ZeRO-1/2 等分片策略实现 中大规模模型训练、参数规模超过单卡显存的场景
GeminiPlugin 异构(GPU-CPU-NVMe)显存管理 + ZeRO 的"双子星"方案 单机/小规模集群容纳超大模型、offloading 需求
HybridParallelPlugin 数据 + 张量 + 流水线 + 序列并行等混合并行 大规模 Transformer/LLM 的跨节点高效训练
MoeHybridParallelPlugin MoE(混合专家)模型的混合并行 如 DeepSeek/Mixtral 等含专家并行的大模型

其中:

实际工程中 LLM 训练常使用 HybridParallelPlugin(内部组合 TP/PP/DP/ZeRO/序列并行),其可配置的完整参数体系可查阅该文件的类定义与构造参数。


五、从 Overview 到可运行代码:一个真实工作流示例

Overview 中"四步工作流"不是空谈——仓库中的 CIFAR-10 教程就是它的直接落地。阅读 examples/tutorial/new_api/cifar_resnet/train.py,可以看到上述四个步骤如何映射为真实代码(为聚焦流程,下面做了结构化摘编,完整逻辑请直接查看该文件):

import colossalai
from colossalai.accelerator import get_accelerator
from colossalai.booster import Booster
from colossalai.booster.plugin import LowLevelZeroPlugin, TorchDDPPlugin
from colossalai.cluster import DistCoordinator
from colossalai.nn.optimizer import HybridAdam

# ---- 初始化分布式后端(第 2 步)----
colossalai.launch_from_torch()          # 从 torchrun 环境变量读取 rank/world_size
coordinator = DistCoordinator()

# ---- 准备插件与 Booster(第 3 步:注入训练特性)----
plugin = TorchDDPPlugin()               # 命令行 -p 可选 torch_ddp / torch_ddp_fp16 / low_level_zero
booster = Booster(plugin=plugin)

# 以 plugin 托管的方式构建 DataLoader
train_dataloader = plugin.prepare_dataloader(train_dataset, batch_size=batch_size, shuffle=True, drop_last=True)

# 模型 / 优化器 / 损失
model = build_resnet()
optimizer = HybridAdam(model.parameters(), lr=LEARNING_RATE)
criterion = nn.CrossEntropyLoss()

# 注入:model、optimizer、criterion、dataloader 被 Booster 接管
model, optimizer, criterion, train_dataloader, _ = booster.boost(
    model, optimizer, criterion, train_dataloader
)

# ---- 运行训练(第 4 步)----
for images, labels in train_dataloader:
    images, labels = images.cuda(), labels.cuda()
    outputs = model(images)
    loss = criterion(outputs, labels)
    booster.backward(loss, optimizer)   # 注意:使用 booster.backward 而非 loss.backward()
    optimizer.step()
    optimizer.zero_grad()

值得注意的细节(均可由源码验证):

  • DistCoordinator 位于 colossalai/cluster/dist_coordinator.py,配合 coordinator.is_master() 控制日志/进度条只在主进程打印,避免多进程刷屏;
  • HybridAdam 是 Colossal-AI 提供的优化器实现(见 colossalai/nn/optimizer),在分布式切分/混合精度场景下与 Booster 协同更佳;
  • 教程通过命令行 -p 参数在 torch_ddp / torch_ddp_fp16 / low_level_zero 之间切换(train.py),配合 -r/-c/-i 参数实现断点续训——直观展示了"换一个 Plugin 即可切换并行/精度策略"的低侵入特性;
  • 启动方式遵循 Overview 第 2 步,例如用 torchrun --nproc_per_node=N train.py -p torch_ddp 之类的命令即可拉起 N 个进程(具体命令参考该教程 README)。

同一目录下的 cifar_vitglue_bert 教程则展示了在 ViT、BERT 等不同模型上复用同一套 Booster 流程的方式,可进一步印证工作流的通用性。


六、未来演进方向与社区协作

Overview 明确指出,Colossal-AI 将持续扩充训练技能库,规划中的新方向包括(但不限于):

  1. 分布式算子优化(optimization of distributed operations);
  2. 异构系统训练优化(optimization of training on heterogenous system);
  3. 新增训练工具,在保持模型性能的前提下减小显存占用、加速训练(implementation of training utilities to reduce model size and speed up training while preserving model performance);
  4. 既有并行方法的扩展(expansion of existing parallelism methods)。

对应到当前仓库的代码结构,这些方向其实已有不少落地:例如 colossalai/auto_parallel 下的自动并行与切分求解器对应方向 1 与 4;colossalai/zero/gemini 与 offload 相关模块对应方向 2 与 3;colossalai/shardformer 面向主流 HF 模型的"一键并行化"对应方向 4。

若你有关于未来特性的想法,可到项目的 Discussion/Forum 板块发帖讨论,仓库欢迎社区的 idea 与贡献;参与开发的流程性要求可参考 CONTRIBUTING.md


七、小结:一套骨架,四大要点

  • 定位:Colossal-AI 是一套统一的深度学习大规模训练系统,将混合精度、梯度累积等常规工具与数据/张量/流水线/异构并行等系统能力整合在单一框架内;
  • 工作流:配置特性 → colossalai.launch(或 launch_from_torch 等包装)初始化分布式环境 → 用 Booster + Plugin 注入并行与精度 → 常规训练循环即可运行;
  • 低侵入:用户的 model/optimizer/criterion/dataloader 由 booster.boost() 统一接管,反向传播统一走 booster.backward;选择不同 Plugin(TorchDDPPluginLowLevelZeroPluginGeminiPluginHybridParallelPlugin 等)即可无痛切换并行/显存策略;
  • 可验证:以上全部结论均可在本仓库源码中直接验证,建议结合 basic tutorials 教程目录 亲手跑一遍,形成对这套工作流的直观认识。更多并行范式的概念细节与论文出处,可继续阅读 concepts/paradigms_of_parallelism.mdconcepts/distributed_training.md

本文依据仓库内的 concepts/colossalai_overview.md 撰写,文中所涉函数签名、Plugin 清单与代码行为均可在 colossalai/initialize.pycolossalai/booster/booster.pycolossalai/booster/pluginexamples/tutorial/new_api/cifar_resnet/train.py 等文件中核对。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
898
5.82 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
921
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.8 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
596
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
519
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
391