9
0

AI Infra 学习规划总纲

2026-09-21
2026-09-21
AI
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 延迟

主资料:

动手任务:

  1. 使用 Hugging Face Transformers 跑一个 0.5B~1.5B 模型。
  2. 分别测试开启和关闭 KV Cache。
  3. 测量:
    • 首 token 延迟;
    • 每 token 延迟;
    • 总生成时间;
    • 峰值显存。
  4. 改变 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

依次实现:

  1. 没有 KV Cache 的 decode;
  2. 连续内存 KV Cache;
  3. 对比两者输出完全一致;
  4. 测试序列长度增加后的延迟变化。

第3周:Batching

实现:

  • static batching;
  • 不同长度序列的 padding;
  • finished sequence 的处理;
  • 每轮生成一个 token。

第4周:Continuous Batching

加入:

  • waiting queue;
  • running queue;
  • 每轮调度;
  • 请求完成后立即释放位置;
  • 新请求动态加入 batch。

非常适合参考:

阅读 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 已经能看懂,可以继续读:

顺序应当是:

自己实现
→ nano-vLLM
→ Mini-SGLang
→ vLLM/SGLang工业源码

第五阶段:进入真实项目,持续3~6个月

一开始不要寻找“实现全新调度算法”这样的 issue。

从以下任务进入:

  • 补充 benchmark;
  • 增加单元测试;
  • 修复文档与实际行为不一致;
  • 复现一个性能退化;
  • 支持一个小模型或配置;
  • 修复显存没有正确释放;
  • 改进 profiling 工具;
  • 减少某段 Python scheduler 的 CPU overhead。

建议先选一个项目,不要同时追三个:

SGLang 已经有较完整的Benchmark与Profiling指南,很适合从可复现性能问题入手。

进入开源社区的实际步骤:

  1. 本地或云端跑通测试;
  2. 跑通 benchmark;
  3. 找一个 good first issue 或小型 bug;
  4. 先复现,不急着改;
  5. 把复现步骤、环境和结果发到 issue;
  6. 再提出修改方案;
  7. 提交带测试和性能数据的 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小时:写技术记录。

必须坚持“学习时间不超过动手时间”。看懂一篇文章不算掌握;能够实现、测量和解释才算。

最小资料清单

不要收藏几十套教程。前四个月只用这些:

  1. Stanford CS336:理解模型与推理;
  2. nano-vLLM:理解推理引擎;
  3. GPU Puzzles:CUDA入门;
  4. mojo-gpu-puzzles:CUDA入门;
  5. Triton Puzzles:Triton入门;
  6. SGEMM CUDA:性能优化;
  7. Mini-SGLang:从教学代码过渡到工业系统;
  8. SGLang文档或vLLM文档:进入真实项目。

你的第一个月不要学分布式训练,不要读 FlashAttention 论文细节,不要研究 NCCL,不要硬啃完整 vLLM 源码。只完成这一件事:

用 PyTorch 写一个支持 KV Cache 的小模型推理程序,验证输出正确,并测出 KV Cache 在不同序列长度下带来的延迟和显存变化。

这就是 AI Infra 的真正入口。不是先知道所有知识,而是先建立一个能不断向下追问、不断测量的系统。

评论