跳转到内容

技术栈全景

前十一章讲的是原理,这一章给名字。

目的是让你在看到一个陌生项目时,能立刻说出三件事:它在哪一层、替代谁、和什么配合。这一章也适合当作索引反复回查。

┌─ 平台层 托管平台 / 自建平台(实验管理、模型注册、服务化)
├─ 调度层 Kubernetes(+Volcano/Kueue) · Slurm · Ray
├─ 服务层 vLLM · SGLang · TensorRT-LLM · LMDeploy · Triton Server
├─ 训练层 PyTorch(FSDP) · Megatron-LM · DeepSpeed · torchtitan · JAX
├─ 编译层 torch.compile/Inductor · XLA · TensorRT · TVM
├─ 内核层 CUDA · Triton · CUTLASS · cuDNN/cuBLAS · FlashAttention
├─ 通信层 NCCL / RCCL · MPI · Gloo · UCX
├─ 驱动层 CUDA Driver · ROCm · 各家 SDK
└─ 硬件层 NVIDIA · AMD · TPU · Trainium · 昇腾 · 寒武纪 · ……
├ 网络 InfiniBand · RoCE · NVLink/NVSwitch
└ 存储 Lustre/GPFS/WEKA · JuiceFS · 对象存储

对照第二章的七层:这里的"驱动层"和"硬件层"对应第 1–2 层,"通信层"对应第 3–4 层,其余一一对应。

类别代表特点
NVIDIA 数据中心 GPUA100 / H100 / H200 / B200 / GB200生态最完整,事实标准
AMDMI300X / MI325X显存容量优势,ROCm 生态追赶中
Google TPUv5e / v5p / v6脉动阵列 + 静态编译,能效好,仅云上可用
AWS 自研Trainium / Inferentia绑定 AWS,成本优势
IntelGaudi 系列以太网互连,性价比路线
国产昇腾、寒武纪、燧原、壁仞、摩尔线程算力可用,主要成本在算子覆盖与通信库适配

选型的第一指标往往不是峰值算力,而是软件栈成熟度与互连带宽。 一块峰值高但算子覆盖不全的卡,实际吞吐可能只有标称的零头——回顾第三章"为什么标称值总是拿不到"。

  • 节点内:NVLink / NVSwitch(NVIDIA)、Infinity Fabric(AMD)、ICI(TPU)。带宽比通用总线高一个数量级,是第十章中"TP 只在节点内"这条规则的物理来源。
  • 跨节点:InfiniBand(NDR 400 Gb/s、XDR 800 Gb/s)与 RoCEv2(以太网上的 RDMA)。前者运维简单、性能稳定;后者成本低但对无损配置敏感,容易出难定位的抖动。
  • 拓扑:胖树(fat-tree)、轨道优化(rail-optimized)、Dragonfly。详见第三卷。
项目定位何时用
CUDA C++最底层,线程级控制需要极致性能、别人写不出来的内核
Triton块级 Python DSL写融合算子的默认选择,门槛比 CUDA 低一个量级
CUTLASS矩阵乘模板库定制 GEMM、分组 GEMM(MoE 需要)
cuBLAS / cuDNN厂商算子库标准算子,直接用
FlashAttention专用注意力内核几乎所有 Transformer 都在用
ROCm / HIPAMD 的对应物CUDA 代码可半自动移植

这一层的核心工作是提高算术强度(第四章)——融合、分块、复用。

框架:PyTorch 在研究与生产上都已占绝对多数;JAX 在部分研究团队与 TPU 场景强势;TensorFlow 主要是存量;国产的 PaddlePaddle、MindSpore 在特定生态内使用。

并行库(给框架加分布式能力,实现第十章的五个维度):

项目提供什么备注
PyTorch FSDP原生数据并行分片(≈ZeRO-3)最省心,与生态最兼容
DeepSpeedZeRO 三阶段、卸载、推理功能最全,配置项也最多
Megatron-LM张量并行、流水线并行、序列并行大模型训练的事实参考实现
torchtitanPyTorch 官方的多维并行示范代码简洁,适合学习与二次开发
ColossalAI / NeMo集成方案上手快,定制空间小一些

实践中常见组合是 Megatron 的 TP/PP + FSDP 或 ZeRO 的 DP。

项目说明主要收益来源
torch.compile / Inductor捕获图 → 生成 Triton/C++ 代码算子融合;最大的坑是图被打断
XLAJAX/TPU 的必选项静态图,编译期长但优化空间大
TensorRT / TensorRT-LLMNVIDIA 推理编译与运行时性能强,灵活性低
TVM / MLIR 生态偏研究与异构后端可移植性
项目特点适合
vLLM分页显存管理起家,社区最大,功能全通用首选
SGLang前缀缓存强、结构化输出好多轮对话、Agent、约束解码
TensorRT-LLM官方实现,峰值性能强固定模型、追求极限吞吐
LMDeploy量化与国产卡支持好国内环境
llama.cpp / OllamaCPU 与端侧、量化激进本地与边缘
Triton Inference Server通用模型服务框架(非 LLM 专用)多模型、多框架混合服务

这一层解决的是第九章讲的"容量 × 并发"问题。选型维度见服务框架对比。

系统优势短板
Kubernetes + Volcano/Kueue云原生生态完整原生调度器不懂 gang 与拓扑,需扩展
SlurmHPC 传统,拓扑感知与作业数组成熟对容器与在线服务支持弱
RayPython 原生分布式原语大规模训练不如前两者成熟

大公司常见的是两套并存:训练走 Slurm 或 K8s+Volcano,在线推理走 K8s——正是第九章"不要用同一套抽象"的实践体现。

  • 对象存储:放原始数据集与检查点归档。便宜、无限、慢。
  • 并行文件系统:Lustre、GPFS、WEKA、JuiceFS。提供 POSIX 与高吞吐,价格高。
  • 本地 NVMe:缓存层,训练时的实际数据来源。
  • 数据格式:Parquet(表格)、WebDataset / tar shard(顺序读友好)、Arrow(内存交换)、safetensors(权重,替代不安全的 pickle)。
  • 加载:框架自带的 DataLoader、GPU 侧解码库、顺序读优化库。

三层存储的分工来自第三章的延迟阶梯:对象存储比本地盘慢两三个数量级,所以必须有缓存层。

工具类别看什么
GPU 指标采集功耗、温度、时钟、计算单元活跃度、显存带宽
系统级 profiler时间线:计算、通信、数据等待各占多少
内核级 profiler单个内核的访存效率、占用率
通信基准带宽基线,与历史对比
集群监控节点健康、排队、利用率
实验跟踪指标曲线、超参、产物

这一层是第七章所有指标的数据来源。没有可观测性,前面十一章的方法全都用不上——因为你测不出瓶颈在哪。

排查问题时:先用第二章的分层定位到层,再从本章找到那层的具体工具。

做技术选型时:问四个问题,按重要性排序——

  1. 生态成熟度:有没有人踩过坑,出问题能不能搜到答案。
  2. 与现有栈的兼容性:能不能渐进接入,还是要推倒重来。
  3. 退出成本:不好用时能不能换掉,锁定有多深。
  4. 峰值性能:通常排第四,因为前三项决定你能不能真正拿到这个性能。

学习路径:不要试图全学。按岗位挑一条纵线深入:

岗位纵线
训练PyTorch → FSDP/Megatron → NCCL → Slurm/K8s
推理vLLM → CUDA/Triton → 量化 → K8s
内核CUDA → Triton/CUTLASS → 硬件手册
平台K8s → 调度扩展 → 存储 → 可观测

十二章走完,你应该具备三样东西:

  1. 一张地图——知道 AI 系统分几层,任何问题能定位到层。
  2. 一套工具——算术强度、Roofline、通信代价模型、效率指标,能定量分析。
  3. 一组数字——峰值算力、带宽阶梯、延迟阶梯、MFU 经验值,能做餐巾纸估算。

后面十一卷是这三样东西在各个层次上的展开。从哪一卷开始都可以,本卷已经给了你判断"该去哪一卷"的能力。

  • 生态按层对应:硬件 → 驱动 → 通信 → 内核 → 编译 → 训练/服务 → 调度 → 平台。
  • 硬件选型第一指标是软件栈成熟度与互连带宽,不是峰值算力。
  • 训练侧常见组合:Megatron 的 TP/PP + FSDP/ZeRO 的 DP;推理侧 vLLM 是通用首选。
  • 调度常见两套并存:训练用 Slurm 或 K8s+Volcano,在线推理用 K8s。
  • 选型看生态成熟度 > 兼容性 > 退出成本 > 峰值性能。
  • 没有可观测性,前面十一章的方法全都用不上。