AI Infra 学习规划总纲
最近一直在学习 AI Infra,在阅读完 AIInfraGuide - AI Infra全栈知识库 的“前置基础”六个章节后,感觉对Infra 的了解仍然十分片面,再去啃“CUDA编程与算子优化”章节,又感觉有点吃力,而且枯燥乏味,让我不得不停下来重新审视一番计划安排,与AI和身边的同学交流讨论。在经过一番深入交流讨论后,我整理了一份我个人认为更合理、更适合我的路线,在此贴出,给大家参考一下。
AI Infra 不是一门单独学科,而是几门课程的交叉地带。初学者入门困难的问题通常出在学习顺序:
大部分路线让你先啃完 C++、操作系统、CUDA、分布式、PyTorch 源码,再读 vLLM。
这对初学者几乎必然劝退。
而更合理的顺序是:
先看懂一次 LLM 推理 → 实现最小推理引擎 → 学 GPU 优化 → 阅读简化版 vLLM → 最后进入工业项目。
第一阶段:建立全景图,2周
这一阶段不要碰 CUDA,不读 vLLM 源码。
你只需要弄明白一次请求发生了什么:
HTTP 请求
→ tokenizer
→ prefill
→ 建立 KV Cache
→ 逐 token decode
→ sampling
→ streaming response
必须理解的概念:
- Transformer decoder 的基本结构
- attention 中 Q、K、V 是什么
- 自回归生成
- prefill 与 decode 的区别
- KV Cache 为什么存在
- batch size 为什么影响吞吐
- TTFT、TPOT、吞吐量和 P99 延迟
主资料:
- Stanford CS336:Language Modeling from Scratch
- CS336 2025课程笔记
- 重点看 PyTorch/resource accounting、GPU、kernel、inference 几讲,不必从头完整啃完。
- DeepLearning.AI:SGLang高效推理短课:搜索 “Efficient Inference with SGLang”,适合先建立直觉。
- Berkeley vLLM项目介绍
动手任务:
- 使用 Hugging Face Transformers 跑一个 0.5B~1.5B 模型。
- 分别测试开启和关闭 KV Cache。
- 测量:
- 首 token 延迟;
- 每 token 延迟;
- 总生成时间;
- 峰值显存。
- 改变 prompt 长度和生成长度,画出结果。
通关标准:
你能够不看资料,解释为什么 prefill 更偏 compute-bound,而 decode 通常更偏 memory-bound;也能解释 KV Cache 用空间换了什么时间。
第二阶段:从零实现推理,4周
这一步非常重要。不要直接读工业框架,因为里面 80% 的代码都是兼容性、并发、硬件适配和边界情况。
先用纯 PyTorch 实现一个只支持单模型的最小推理程序。
第1周:Transformer forward
实现:
- RMSNorm
- RoPE
- causal self-attention
- MLP/SwiGLU
- decoder layer
- greedy sampling
先不用追求性能,只要求结果正确。
第2周:KV Cache
依次实现:
- 没有 KV Cache 的 decode;
- 连续内存 KV Cache;
- 对比两者输出完全一致;
- 测试序列长度增加后的延迟变化。
第3周:Batching
实现:
- static batching;
- 不同长度序列的 padding;
- finished sequence 的处理;
- 每轮生成一个 token。
第4周:Continuous Batching
加入:
- waiting queue;
- running queue;
- 每轮调度;
- 请求完成后立即释放位置;
- 新请求动态加入 batch。
非常适合参考:
- nano-vLLM:约千行规模,专门用于教学,包含 scheduler、block manager、KV Cache 和 PagedAttention。
- mini-vLLM纯PyTorch教学实现
- 从零实现推理引擎参考项目
阅读 nano-vLLM 的建议顺序:
sequence
→ scheduler
→ block
→ block_manager
→ engine
→ model runner
→ attention
不要从 attention kernel 开始读。
通关标准:
能够画出请求从 waiting 到 running 再到 finished 的生命周期,并独立写出一个简化版 continuous batching scheduler。
第三阶段:进入 GPU,但从“可视化问题”开始,6周
这是最容易劝退人的阶段。不要第一天就看 PTX、SASS、CUTLASS 或 FlashAttention。
第1周:GPU编程模型
理解:
- thread、block、grid
- warp
- global/shared/register memory
- synchronization
- coalesced memory access
- branch divergence
首选练习:
它通过小题学习 GPU,不要求你先读几百页 CUDA 手册。
第2~3周:基础CUDA算子
依次实现:
- vector add
- reduction
- softmax
- RMSNorm
- matrix transpose
- naive GEMM
每个算子必须有:
- PyTorch 正确性对比;
- warmup;
- 多次测量;
- 不同输入尺寸;
- 与 PyTorch/CUDA baseline 对比。
第4周:性能分析
学习使用:
- Nsight Systems:CPU/GPU 时间线、kernel launch、空洞;
- Nsight Compute:单 kernel 的访存、occupancy、warp 和吞吐;
- Roofline:判断受计算还是带宽限制。
官方入口:
这里最重要的能力不是“记住优化技巧”,而是形成这个循环:
建立 baseline
→ profiler 找瓶颈
→ 提出假设
→ 修改一处
→ 验证正确性
→ 重新测量
→ 解释结果
第5周:矩阵乘法优化
跟着这个项目逐步实现:
它依次展示:
- coalescing
- shared memory
- block tiling
- vectorized access
- bank conflict
- double buffering
- warp tiling
不要求达到项目中的性能;能够解释每次优化为什么生效就合格。
第6周:Triton
做:
- Triton Puzzles
- 用 Triton 重写 softmax 和 RMSNorm;
- 与 PyTorch、CUDA 版本比较;
- 理解 Triton 帮你抽象掉了什么,又没有抽象掉什么。
通关标准:
面对一个慢 kernel,你不会直接猜“需要 shared memory”,而是先用 profiler 判断瓶颈,再决定优化。
第四阶段:做一个迷你推理引擎,6~8周
将前面内容组成一个简历项目。不要追求支持几十种模型,只支持一个小模型即可。
推荐迭代顺序:
V0 朴素单请求推理
V1 KV Cache
V2 Static Batching
V3 Continuous Batching
V4 Paged KV Cache
V5 请求抢占和恢复
V6 Prefix Cache
V7 OpenAI兼容API
V8 流式输出与监控
V9 一个Triton/CUDA融合算子
项目必须包含这些指标:
- request throughput
- output tokens/s
- TTFT
- TPOT
- P50/P95/P99
- 峰值显存
- 不同并发度下的曲线
每次优化都记录:
优化目标
baseline
瓶颈证据
实现方式
实验环境
正确性验证
性能结果
适用条件
副作用
这个实验记录比“实现了 PagedAttention”一句话有价值很多。
如果 nano-vLLM 已经能看懂,可以继续读:
- Mini-SGLang:保留 Radix Cache、Chunked Prefill、Overlap Scheduling、Tensor Parallelism 等关键机制。
- Mini-SGLang官方介绍
- vLLM论文/技术报告
顺序应当是:
自己实现
→ nano-vLLM
→ Mini-SGLang
→ vLLM/SGLang工业源码
第五阶段:进入真实项目,持续3~6个月
一开始不要寻找“实现全新调度算法”这样的 issue。
从以下任务进入:
- 补充 benchmark;
- 增加单元测试;
- 修复文档与实际行为不一致;
- 复现一个性能退化;
- 支持一个小模型或配置;
- 修复显存没有正确释放;
- 改进 profiling 工具;
- 减少某段 Python scheduler 的 CPU overhead。
建议先选一个项目,不要同时追三个:
SGLang 已经有较完整的Benchmark与Profiling指南,很适合从可复现性能问题入手。
进入开源社区的实际步骤:
- 本地或云端跑通测试;
- 跑通 benchmark;
- 找一个
good first issue或小型 bug; - 先复现,不急着改;
- 把复现步骤、环境和结果发到 issue;
- 再提出修改方案;
- 提交带测试和性能数据的 PR。
第一次贡献的目标不是技术多惊艳,而是证明你能在复杂项目中完成一次可靠闭环。
C++和操作系统怎么补
不要暂停主线半年去“先学基础”。采用按需补课:
| 遇到的问题 | 补什么 |
|---|---|
| Paged KV Cache | 虚拟内存、分页、内存分配 |
| Continuous Batching | 队列、调度、并发控制 |
| 异步推理服务 | 线程、进程、event loop、RPC |
| CUDA Graph | kernel launch 与运行时 |
| Tensor Parallel | collective communication、NCCL |
| 显存泄漏 | RAII、对象生命周期、allocator |
| CPU调度成为瓶颈 | C++并发、锁、cache locality |
| Prefix Cache | radix tree、引用计数、淘汰策略 |
CMU 的 Deep Learning Systems 很适合系统补基础,其作业会逐步实现:
- 自动微分;
- 神经网络抽象;
- NDArray;
- CPU/CUDA backend;
- Transformer。
但这门课工作量很大。建议完成 HW0~HW3,或者只把它作为主线项目遇到问题时的参考,而不是同时再开三门课。
没有GPU怎么办
前两阶段基本可以在 CPU 或普通消费级 GPU 上完成。
GPU 阶段可使用:
- 学校实验室服务器;
- Colab/Kaggle;
- 按小时租用单张消费级 GPU;
- 0.5B~1.5B 小模型;
- 较小矩阵和合成请求。
学习 Infra 不要求你拥有八张 H100。单卡足够学习:
- kernel;
- KV Cache;
- batching;
- scheduler;
- profiling;
- CUDA Graph;
- prefix caching。
多机通信和大规模集群可以后置,通过模拟器、小规模实验和实习补齐。
每周投入模板
如果每周能投入约20小时:
- 6小时:课程和论文;
- 10小时:实现与实验;
- 2小时:整理 benchmark;
- 2小时:写技术记录。
必须坚持“学习时间不超过动手时间”。看懂一篇文章不算掌握;能够实现、测量和解释才算。
最小资料清单
不要收藏几十套教程。前四个月只用这些:
- Stanford CS336:理解模型与推理;
- nano-vLLM:理解推理引擎;
- GPU Puzzles:CUDA入门;
- mojo-gpu-puzzles:CUDA入门;
- Triton Puzzles:Triton入门;
- SGEMM CUDA:性能优化;
- Mini-SGLang:从教学代码过渡到工业系统;
- SGLang文档或vLLM文档:进入真实项目。
你的第一个月不要学分布式训练,不要读 FlashAttention 论文细节,不要研究 NCCL,不要硬啃完整 vLLM 源码。只完成这一件事:
用 PyTorch 写一个支持 KV Cache 的小模型推理程序,验证输出正确,并测出 KV Cache 在不同序列长度下带来的延迟和显存变化。
这就是 AI Infra 的真正入口。不是先知道所有知识,而是先建立一个能不断向下追问、不断测量的系统。