内容简介
这是一张给后端工程师——尤其是 Java、Go 等托管语言背景的工程师——转向 AI-Infra 方向的学习地图。它把这个方向需要的知识组织成十个系列,说明每个系列解决什么问题、为什么放在那个位置、彼此之间如何依赖,以及按不同目标应该走哪条路径。
地图回答三个问题:
AI-Infra 由哪些层组成?每一层需要掌握什么?按什么顺序学?
“AI-Infra”这个词覆盖的范围很宽,从 GPU 驱动到模型交付平台都算。但如果目标是能够阅读、修改和贡献 PyTorch、vLLM、NCCL、Megatron 这类核心项目,需要的知识是可以枚举的:
| 需要什么 | 具体是什么 |
|---|---|
| 两门语言 | Python 承担控制平面,C++ 承担执行平面 |
| 一个框架 | PyTorch:Tensor、Autograd、算子、编译器、分布式 |
| 一类模型 | Transformer / LLM:它在硬件上怎么花钱 |
| 一层 kernel | CUDA / Triton:写到硬件极限的能力 |
| 一层通信 | NCCL / RDMA:多卡多机协同的底座 |
| 两类引擎 | 训练框架与推理引擎 |
| 一层平台 | 资源调度与模型交付 |
| 一套方法 | 如何进入并贡献一个百万行的开源项目 |
每个系列独立成篇、自成体系:读者可以从任何一个系列进入,不需要先读完前面的;系列之间不互相引用。它们的依赖关系只在这张地图里说明。
两张图:架构视图与学习路径
理解 AI-Infra 需要两张图:一张描述系统怎么叠起来,一张描述人怎么进入这个系统。前者是坐标系,后者是路径;两者的层不重合,混在一起是很多学习计划失败的原因。
第一张图:架构视图
AI-Infra 的架构视图(技术栈)如下。中间是从硬件到引擎自下而上的主干,共五层;左翼是数据平台,自身也分五层,从采集到服务,向引擎供给训练与评测数据;右翼是 MLOps / LLMOps,同样分五层,从实验到运营,把引擎的产出变成可运维的服务,并把线上数据回流到数据平台。两翼不挂在主干的某一层上,而是各自独立成栈,与主干的多个层打交道:
%%{init: {"flowchart": {"wrappingWidth": 360}}}%%
flowchart BT
%% 三个子图之间没有连线,dagre 会按定义顺序从右到左排布,所以这里按 右 → 左 定义
subgraph OPS["MLOps / LLMOps"]
direction BT
O1["`**实验与流水线**
实验跟踪 MLflow / W&B
流水线编排 Kubeflow / Airflow`"]
O2["`**模型仓库**
模型版本 · 血缘
制品管理`"]
O3["`**评测与发布**
离线评测 · 灰度
A/B · 回滚`"]
O4["`**模型服务**
KServe · Triton IS · Ray Serve
模型网关 · 路由 · 多租户`"]
O5["`**运营与反馈**
可观测 · 成本
在线数据回流`"]
O1 --> O2 --> O3 --> O4 --> O5
end
subgraph CORE["主干:从硬件到引擎"]
direction BT
HW["`**硬件基础设施**
计算 GPU / TPU / NPU | 网络 InfiniBand / RoCE | 存储 SSD / 并行文件系统 / 对象存储`"]
SW["`**GPU 计算软件栈**
Driver → CUDA → cuDNN / TransformerEngine | NCCL(同位:ROCm · CANN · oneAPI)`"]
RT["`**容器与运行时**
containerd · device plugin · 镜像 · 驱动与 CUDA 版本匹配`"]
SCHED["`**AI 任务调度与资源管理**
Kubernetes · Volcano / Kueue · Slurm · Ray · gang scheduling · 拓扑感知`"]
ENG["`**训练框架 | 推理引擎**
PyTorch · Megatron · DeepSpeed · torchtitan | vLLM · SGLang · TensorRT-LLM`"]
HW --> SW --> RT --> SCHED --> ENG
end
subgraph DATA["数据平台"]
direction BT
D1["`**数据采集**
日志 · 爬取
标注 · 合成数据`"]
D2["`**数据传输**
Kafka · CDC · 批量同步`"]
D3["`**数据存储**
数据湖 Iceberg / Hudi
对象存储 · HDFS`"]
D4["`**数据计算**
离线 Spark | 实时 Flink
Ray Data · 清洗 · 去重`"]
D5["`**数据服务**
数据集与版本
特征 · 评测集`"]
D1 --> D2 --> D3 --> D4 --> D5
end
%% 主干突出,两翼低调
classDef core fill:#fff7e0,stroke:#c98a00,stroke-width:2px,color:#222
classDef wing fill:#f7f7f7,stroke:#c8c8c8,stroke-width:1px,color:#666
class HW,SW,RT,SCHED,ENG core
class D1,D2,D3,D4,D5,O1,O2,O3,O4,O5 wing
style CORE fill:#fffbea,stroke:#c98a00,stroke-width:2px
style DATA fill:#fafafa,stroke:#d0d0d0,stroke-dasharray:4 3
style OPS fill:#fafafa,stroke:#d0d0d0,stroke-dasharray:4 3
linkStyle 0,1,2,3,8,9,10,11 stroke:#aaa
三个栈之间的关系:数据平台向主干供给训练与评测数据;主干产出模型与服务,交给 MLOps 管理和交付;MLOps 把线上数据回流到数据平台,形成闭环。
这张图描述的是系统怎么叠起来,它是理解这个领域的坐标系,但不是学习顺序。按它自下而上学,会先学 GPU 驱动和 device plugin,然后是 CUDA,然后才碰到 PyTorch——一个不知道 PyTorch 为什么需要 Caching Allocator 的人,学 CUDA 内存 API 时不知道该关心什么;一个没跑过分布式训练的人,学 gang scheduling 时不知道它在解决什么。
学习顺序应该跟着问题出现的顺序走:先有一个能运行的系统,再向下问它为什么这样运行,再向上问它如何被组织和交付。下面的地图就是这样组织的:它不是架构视图的翻版,而是一条从用户代码出发、逐步向下再向上的路径。
架构视图里看不见的东西
架构视图有一个特点:它只画组件,不画人怎么进入组件。有四样东西在架构图上没有独立的位置,却是从”会用这个栈”走向”能改这个栈”的分水岭:
| 架构图上没有的 | 为什么是分水岭 |
|---|---|
| 语言(Python、C++) | 每一层的源码都由它们写成,读不懂语言就读不懂任何一层 |
| 模型知识(Transformer / LLM) | 引擎和 kernel 的所有优化都以模型的算量和访存量为目标 |
| kernel 编程(CUDA / Triton) | 架构图把它藏在”GPU 软件栈”里,但它是高价值贡献最集中的地方 |
| 贡献方法 | 架构图描述系统,不描述如何参与建设系统 |
这四样东西在地图里各占一个系列。
第二张图:学习路径
学习路径分五层,加一个横切、一个选修。层的顺序就是推荐的学习顺序,也是各系列的发布顺序。
| 层 | 主题 | # | 系列 |
|---|---|---|---|
| L1 | 语言与工程 | 01 | Python 在 AI-Infra:从语言机制到生产交付 |
| 02 | C++ 在 AI-Infra:从对象模型到算子扩展 | ||
| L2 | 计算运行时 | 03 | PyTorch 深度实践:从 Tensor 到深度学习运行时 |
| 04 | Transformer 与 LLM:结构、算量与数值 | ||
| 05 | GPU Kernel 工程:从 CUDA 执行模型到 FlashAttention | ||
| L3 | 通信与互联 | 06 | 通信与互联:从 NCCL 到 RDMA |
| L4 | 引擎 | 07 | 大规模训练工程:从 Megatron 到容错 |
| 08 | 大模型推理系统揭秘:从 vLLM 看 LLM Serving Infra 核心技术 | ||
| L5 | 平台 | 09 | AI 平台工程:资源层与交付层 |
| 横切 | 方法 | 10 | AI-Infra 开源贡献指南 |
| 选修 | 编译器 | — | ML 编译器内部(MLIR / Triton 编译器 / TVM) |
两张图的叠加
把学习路径叠到架构视图上,可以看到每个系列在技术栈上的落点:
| 架构视图中的位置 | 组件 | 覆盖它的系列 |
|---|---|---|
| 主干:训练框架 | 推理引擎 | PyTorch · Megatron · DeepSpeed | vLLM | 03 · 07 | 08 |
| 主干:AI 任务调度与资源管理 | K8s · Volcano · Kueue · Slurm · Ray | 09(资源层) |
| 主干:容器与运行时 | containerd · device plugin | 09(资源层) |
| 主干:GPU 计算软件栈 | Driver → CUDA → cuDNN / TE | NCCL | 05 | 06 |
| 主干:硬件基础设施 | 计算 GPU | 网络 IB / RoCE | 存储 | 05 | 06 | 09 |
| 左翼:数据平台 | 训练数据管线 | 数据与 checkpoint 存储 | 07 | 09 |
| 右翼:MLOps / LLMOps | Serving 平台 · 模型网关 · 可观测 | 09(交付层) |
| 图上没有的 | 语言 | 模型知识 | 贡献方法 | 01 · 02 | 04 | 10 |
逐层说明
L1 语言与工程
AI-Infra 的核心项目几乎都是同一个结构:Python 外壳,C++ 内核。
| 项目 | Python 层 | C++ 层 |
|---|---|---|
| PyTorch | torch/ |
c10/ · aten/ · torch/csrc/ |
| vLLM | vllm/ |
csrc/ |
| FlashAttention | flash_attn/ |
csrc/ |
| Triton | python/triton/ |
lib/ · include/ |
| NCCL | — | src/ |
Python 承担组织、调度、扩展、观测和交付——控制平面;C++ 和 CUDA 承担真正的计算——执行平面。两门语言都要会,但要会的不是语法,而是这些项目实际使用的那个子集,以及它背后的机制。
对 Java 背景的工程师,Python 的门槛在于它的动态性(一切都在运行时发生);C++ 的门槛在于它的确定性(对象在哪里、活多久、谁负责释放,全部由程序员决定)。两者恰好在 Java 的两侧。
01 Python 在 AI-Infra:从语言机制到生产交付
在 AI-Infra 系统里,Python 并不承担最重的计算,那它到底承担什么?为此需要掌握它的哪些机制?
七篇:语言机制与运行时 → 类型系统与数据契约 → 并发与异步 → 动态机制与插件架构 → 内存管理 → 测试与调试 → 工程化与交付。前六篇解决”写对”,第七篇解决”交付”。
02 C++ 在 AI-Infra:从对象模型到算子扩展
PyTorch 和 vLLM 的 C++ 源码里,这段代码为什么这样写?
八篇:编译模型与项目布局 → 值语义与所有权 → 模板 → 多态与类型擦除 → 宏与静态注册 → 并发与 TLS 守卫 → pybind11 与 ABI → 构建、调试与测试。以 PyTorch 和 vLLM 的真实源码为教材,以 Java 为参照系,练手项目 mini-c10 逐篇长成一个带 Dispatcher 的最小 Tensor 库。
L2 计算运行时
这一层回答”一次模型计算是怎么执行的”。它有三个视角:框架怎么组织计算(03),模型在硬件上怎么花钱(04),kernel 怎么写到硬件极限(05)。三者顺序上先框架、再模型、再 kernel:不理解框架就不知道 kernel 在哪里被调用;不理解模型的算量与访存量,就不知道该优化哪个 kernel。
03 PyTorch 深度实践:从 Tensor 到深度学习运行时
PyTorch 如何把张量计算表达成可求导、可扩展、可优化、可分布式执行的深度学习系统?
十篇:整体架构 → Tensor 与内存布局 → Autograd → Module 与训练系统 → Dispatcher 与算子系统 → C++ 扩展与自定义算子 → 编译执行与图优化 → 性能优化与调试 → 分布式 PyTorch → 工程体系。它是整张地图的枢纽:向下接 C++ 和 kernel,向上接训练框架和推理引擎,向旁接通信。
04 Transformer 与 LLM:结构、算量与数值
Infra 工程师不训练模型,但必须知道自己在优化什么:这个模型的每一步算多少、读多少、存多少?
七篇。Transformer 前向的逐层算量与访存量;Attention 变体(MHA / GQA / MQA / MLA)与 KV cache 大小的推导;位置编码与长上下文;MoE 的路由与通信形态;浮点格式(FP32 / TF32 / BF16 / FP16 / FP8 / INT8 / INT4)、数值稳定性与混合精度为什么能工作;量化算法(GPTQ / AWQ / SmoothQuant / FP8)的原理与代价;投机解码的数学;LoRA 等参数高效方法的计算形态。
这一篇由推导驱动而不是由 API 驱动。它同时服务两类读者:Infra 工程师借它理解优化对象,算法工程师借它理解自己的模型在硬件上的成本。
05 GPU Kernel 工程:从 CUDA 执行模型到 FlashAttention
一个 kernel 为什么快、为什么慢,以及如何把它写到接近硬件极限?
十篇:GPU 硬件与 Roofline → CUDA 编程模型 → 访存合并与 elementwise → 共享内存与 reduction → GEMM 分块 → Tensor Core 与 CUTLASS → Triton → Attention kernel → 量化与融合 kernel → 剖析、测试与贡献。CUDA 与 Triton 两条路线在同一组 kernel 上并行推进;练手项目是一个 decoder layer 的 kernel 全集。
这是 AI-Infra 贡献者最稀缺的一层:vLLM、SGLang、FlashInfer、PyTorch 的高价值 PR 大多落在这里。
L3 通信与互联
单卡之外的一切——训练也好、推理也好——都建立在通信之上。通信自成一层,而不是训练的附属:训练用它同步梯度和分片参数,推理用它做张量并行和 KV 传输,两者的通信模式不同,但底座相同。
06 通信与互联:从 NCCL 到 RDMA
一次 all_reduce 从调用到完成,数据在 PCIe、NVLink、InfiniBand 上是怎么流动的?为什么有时候是带宽的问题,有时候是延迟的问题?
七篇。硬件互联:PCIe / NVLink / NVSwitch / InfiniBand / RoCE 的拓扑与带宽,NUMA 与亲和性;RDMA 与 GPUDirect;NCCL 的算法(Ring / Tree / CollNet)、channel、protocol(LL / LL128 / Simple)与拓扑探测;nccl-tests 与调优参数;集合通信的正确性、死锁与 hang 的排查;推理侧的 KV 传输层(NIXL / UCX)。
L4 引擎
引擎是把模型、kernel、通信组织成一个持续运行的系统。训练引擎围绕状态(参数、梯度、优化器状态、激活值)组织,推理引擎围绕请求(调度、KV cache、token 生成)组织。两者共享底层,但问题形态完全不同。
07 大规模训练工程:从 Megatron 到容错
一个千卡训练任务,怎么配、怎么跑满、怎么跑一个月不倒?
八篇。Megatron-LM / DeepSpeed / torchtitan 的架构对比与源码导读;多维并行的实际配置与 MFU 计算;分布式 checkpoint 与恢复;容错、弹性、straggler 与 silent data corruption;训练稳定性(loss spike、梯度范数);数据管线(tokenization、数据混合、shuffle、流式加载);长时训练的可观测。
08 大模型推理系统揭秘:从 vLLM 看 LLM Serving Infra 核心技术
一个文本生成请求,为什么会逐渐演化成一个涉及计算、显存、调度、通信与状态管理的复杂系统?
十二篇:问题定义 → 指标体系 → 请求生命周期 → 调度 → KV Cache → GPU 执行 → 多卡扩展 → 模型适配 → 硬件抽象 → PD 分离 → Serving Infra 的演进 → 源码走读。以 vLLM 为分析对象,建立一套可迁移到其他推理框架的分析方法。
L5 平台
平台是”平台”一个词盖住的两部分:资源层是架构视图主干中引擎之下的三层(容器运行时、任务调度与资源管理、硬件中的存储与网络),承载引擎运行;交付层是架构视图的右翼 MLOps / LLMOps,把引擎变成服务(Serving 平台、模型网关、可观测)。两者在架构上一个在引擎之下、一个在引擎之侧,在学习顺序上都在引擎之后——因为它们的每个设计决定都是被引擎的需求推出来的。
09 AI 平台工程:资源层与交付层
一个 GPU 集群如何被切分、调度和喂饱?一个训好的模型如何变成一个可运维的服务?
八篇。资源层:容器里的 GPU(device plugin、驱动与 CUDA 版本匹配、镜像);K8s 上的 AI 任务调度(Volcano / Kueue、gang scheduling、拓扑感知)、Slurm 与 Ray;GPU 切分(MIG / vGPU / 时间片);RDMA 网络配置;存储与 checkpoint I/O(对象存储、并行文件系统)。交付层:Serving 平台(KServe / Triton Inference Server / Ray Serve)、模型网关与路由、多租户与配额、可观测与成本。
横切:10 AI-Infra 开源贡献指南
面对一个百万行的开源项目,如何找到切入点、做出一个能被合入的改动?
四篇。读大型代码库的方法;从 issue / RFC / roadmap 找切入点;benchmark 与 PR 描述的规范;CI、review 文化与 maintainer 沟通;以 PyTorch 和 vLLM 各一个真实 PR 走一遍完整流程。它不属于任何一层,对每一层都适用。
选修:ML 编译器内部
torch.compile 的用法与 Inductor 的工作方式在 03 中覆盖,Triton 的编译流水线在 05 中覆盖。这对绝大多数 AI-Infra 工作已经足够。MLIR 的方言设计、TVM 的调度语言、Triton 编译器自身的实现,只对准备从事编译器开发的读者必要,不进入主线。
系列之间的依赖
系列之间的依赖只在这里说明;每个系列的正文都是自治的,不假设读者读过其他系列,也不引用其他系列。
graph LR
S01["01 Python"] --> S03["03 PyTorch"]
S02["02 C++"] --> S03
S03 --> S04["04 Transformer 与 LLM"]
S04 --> S05["05 GPU Kernel"]
S03 --> S06["06 通信与互联"]
S05 --> S07["07 大规模训练"]
S06 --> S07
S04 --> S08["08 vLLM"]
S05 --> S08
S06 --> S08
S07 --> S09["09 AI 平台"]
S08 --> S09
S10["10 开源贡献指南(任何阶段)"]
几条主要的依赖关系:
- 01、02 → 03:读 PyTorch 源码需要两门语言。Python 部分主要用到 01 的动态机制和内存管理;C++ 部分主要用到 02 的所有权、模板和静态注册。
- 03 → 04:模型的算量和访存量要落到 Tensor 和算子上才有意义。
- 04 → 05、08:kernel 系列的 attention 和量化篇、vLLM 系列的 KV cache 和量化篇,都把模型结构当作已知。
- 03 → 06:通信系列假设读者知道并行策略需要哪些集合通信原语;03 的第九篇建立了这个需求。
- 05、06 → 07、08:两类引擎都建立在 kernel 和通信之上。
- 07、08 → 09:平台的设计决定来自引擎的需求。
“自治”和”依赖”并不矛盾:依赖描述的是最佳阅读顺序,自治保证的是任何一个系列都能单独读懂。每个系列都会在正文中保留理解它自己所需的最小知识集,深入的展开只在一个系列出现。例如集合通信原语的语义在 03 和 06 都会出现,但 NCCL 的实现细节只在 06;CUDA 执行模型的最小概念在 03 中出现,完整展开只在 05。
按目标选择路径
十个系列全部读完是一条完整的路径,但大多数读者有更具体的目标。
| 目标 | 路径 | 说明 |
|---|---|---|
| 写 kernel,给 vLLM / SGLang / FlashInfer / PyTorch 贡献算子 | 02 → 03(2、5、6、8 篇)→ 04 → 05 → 10 | 当前最稀缺、也最容易做出可见贡献的方向 |
| 分布式训练基础设施 | 03(4、8、9 篇)→ 04 → 06 → 07 → 09(资源层) | 重心在状态、通信与容错 |
| 推理系统与 LLM Serving | 03(2、4、8、9 篇)→ 04 → 08 → 06 → 05(8、9 篇) | 先建立系统视角,再向下到通信和 kernel |
| AI 平台与集群 | 01 → 03(1、4、8、9 篇)→ 08(1–5 篇)→ 07(checkpoint、容错篇)→ 09 | 平台工程师不写 kernel,但要知道引擎对资源层提出了什么要求 |
| 读懂源码,暂时不定方向 | 01 → 02 → 03 → 04 | 到 04 为止具备阅读这个领域几乎任何项目源码的基础,再按兴趣向下(05、06)或向上(07、08、09) |
边界与说明
主线与替代品
地图以 NVIDIA GPU + CUDA、PyTorch、vLLM 为主线,因为它们是当前开源 AI-Infra 的事实标准,源码和社区都最活跃。同一位置的替代品会在相关系列中提及,但不展开:
| 位置 | 主线 | 同位替代品 |
|---|---|---|
| 硬件与软件栈 | NVIDIA GPU · CUDA | AMD ROCm / HIP · 华为 CANN · Intel oneAPI · Google TPU / XLA |
| 训练框架 | PyTorch · Megatron-LM · DeepSpeed · torchtitan | JAX · TensorFlow |
| 推理引擎 | vLLM | SGLang · TensorRT-LLM · LMDeploy · llama.cpp |
| 调度与平台 | Kubernetes · Volcano / Kueue · Slurm · Ray | — |
学会主线之后迁移到替代品的成本,远低于一开始就同时学几套。
不在地图上的内容
- 算法与训练方法:预训练配方、SFT、RLHF / DPO、评测、数据工程。这些属于算法工程师的路径,另有一张地图;04 是两条路径的交点。
- 通用后端与云原生知识:K8s 本身、网络基础、Linux 系统编程。假设读者作为后端工程师已经具备;09 只讲它们在 AI 负载下的特殊之处。
- 数学:线性代数、概率、优化的系统课程。04 和 05 会在需要处给出推导,但不从零讲起。
- Agent 框架与应用层:RAG、工具调用、编排框架。它们在推理引擎之上,属于应用开发,不是基础设施。
版本与时效
各系列在自己的总纲中声明版本基线。总的原则是:机制比 API 稳定,分析方法比具体数字稳定。地图本身描述的是知识的结构,这个结构在近几年是稳定的;变化快的是每一层里的具体项目和接口。
关于”AI-Infra 专家”
这张地图的目标是贡献者,不是”专家”:读完之后能够在这些项目里读懂源码、定位问题、做出改动。专家是在某一层长期工作的结果,地图只负责把人送到那一层的入口。
系列总览
| # | 系列 | 层 | 篇数 |
|---|---|---|---|
| 01 | Python 在 AI-Infra:从语言机制到生产交付 | L1 | 7 |
| 02 | C++ 在 AI-Infra:从对象模型到算子扩展 | L1 | 8 |
| 03 | PyTorch 深度实践:从 Tensor 到深度学习运行时 | L2 | 10 |
| 04 | Transformer 与 LLM:结构、算量与数值 | L2 | 7 |
| 05 | GPU Kernel 工程:从 CUDA 执行模型到 FlashAttention | L2 | 10 |
| 06 | 通信与互联:从 NCCL 到 RDMA | L3 | 7 |
| 07 | 大规模训练工程:从 Megatron 到容错 | L4 | 8 |
| 08 | 大模型推理系统揭秘:从 vLLM 看 LLM Serving Infra 核心技术 | L4 | 12 |
| 09 | AI 平台工程:资源层与交付层 | L5 | 8 |
| 10 | AI-Infra 开源贡献指南 | 横切 | 4 |
尚未链接的系列在发布后补上链接。
最终目标
读完这张地图上的系列之后,面对一条训练日志或一个推理服务的性能问题,读者应该能够沿着整个栈追问下去:
| 追问 | 答案来自 |
|---|---|
| 这行 Python 代码调用了哪个算子? | 01 · 03 |
| 算子怎么分发到 CUDA 实现?那段 C++ 在做什么? | 02 · 03 |
| 这个 kernel 读写多少字节、离硬件极限多远? | 04 · 05 |
| 多卡之间的通信走了什么路径、为什么是这个耗时? | 06 |
| 训练框架为什么这样切分状态?推理引擎为什么这样调度请求? | 07 · 08 |
| 集群为什么把任务放在这几张卡上?服务为什么这样扩缩容? | 09 |
| 发现问题之后,怎么把修复合入上游? | 10 |
十个系列不是为了覆盖更多名词,而是为了让这条追问链没有断点。