Skip to content

零基础到大模型精通 —— 第四阶段:精通·底层性能优化大纲

前置要求:完成第三阶段(进阶原理),理解 MoE、KV Cache、分布式并行的原理层面。 阶段目标:8~12 周内深入大模型系统的" silicon 层"——CUDA/Triton 算子、注意力内核、推理引擎运行时、投机解码、编译优化、分布式通信,达到"能读 vLLM/SGLang 源码、能写自定义算子、能做系统级性能调优"的顶尖工程水平。


模块 19:GPU 体系结构与性能分析基础(1~2 周)⭐ 地基模块

19.1 GPU 硬件模型

  • SM / CUDA Core / Tensor Core / Warp / 线程块调度
  • 内存层级:寄存器 → Shared Memory → L2 → HBM,带宽与延迟的数量级
  • HBM vs SRAM:为什么大模型推理是访存瓶颈(memory-bound)
  • 算力规格解读:FP16/BF16/FP8/INT8 TFLOPS、NVLink/NVSwitch 拓扑
  • Hopper(H100)/ Blackwell(B200)新特性:TMA、FP8、WGMMA 扫盲

19.2 性能分析方法论

  • Roofline 模型:算术强度(Arithmetic Intensity)判定 compute-bound / memory-bound
  • 推理两阶段分析:prefill(compute-bound)vs decode(memory-bound)
  • 工具链:nvidia-sminsys(Nsight Systems 时间线)→ ncu(Nsight Compute 内核级)
  • PyTorch Profiler:算子级耗时、显存曲线
  • 瓶颈定位套路:看时间线 → 找空隙(气泡)→ 内核内分析

实战

  1. 用 Roofline 模型手算:7B 模型 FP16 decode 在 A100 上的理论 token/s 上限,并与实测对比
  2. 用 nsys 抓一次 vLLM 推理的时间线,标出 prefill/decode/通信各段,写瓶颈分析报告

模块 20:CUDA 与 Triton 算子开发(2~3 周)⭐ 重点模块

20.1 CUDA C++ 编程

  • 线程模型:grid / block / thread 索引、warp 内原语(shuffle、ballot)
  • 内存优化:全局内存合并访问(coalescing)、Shared Memory 分块(tiling)、Bank Conflict
  • 经典练习:向量加 → 矩阵转置 → 朴素 GEMM → Shared Memory GEMM → 向量化加载
  • 减少 kernel launch 开销:算子融合(fusion)的动机
  • PyTorch 自定义算子:torch.utils.cpp_extension 加载 CUDA 扩展

20.2 Triton 编程

  • Triton 心智模型:块级编程、tl.load/store、mask、自动共享内存管理
  • 从 PyTorch 到 Triton:RMSNorm / SiLU 手写并 benchmark
  • 注意力相关:softmax、fused RoPE、量化反量化 kernel
  • Triton 调优:num_warps、num_stages、BLOCK_SIZE 的网格搜索(autotune)

20.3 大模型关键算子剖析

  • GEMM 与量化 GEMM(W4A16、FP8 GEMM)
  • RMSNorm / LayerNorm 的融合实现
  • RoPE 的就地计算与融合
  • MoE 算子:分组 GEMM(grouped GEMM)、scatter/gather 与 permutation kernel
  • 采样算子:top-k/top-p 的 GPU 实现

实战

  1. CUDA 手写 GEMM,逐版优化(naive → tiling → 向量化),对照 cuBLAS 达到 60%+ 峰值
  2. Triton 实现 fused RMSNorm + RoPE,集成进一个小模型替换原生实现并验证精度
  3. 为 INT4 权重写一个反量化 + GEMV 的 decode kernel,与 PyTorch 原生对比 token/s

模块 21:注意力内核与 KV Cache 系统(2 周)⭐ 重点模块

21.1 FlashAttention 原理与实现

  • 问题本质:注意力是访存瓶颈,N² 中间矩阵不写回 HBM
  • 在线 softmax(online softmax):分块计算、running max/sum 的数学推导
  • FlashAttention-2/3 的演进:warp 分工、流水线、FP8 支持
  • 变长序列:varlen kernel 与 cu_seqlens

21.2 PagedAttention 与 KV Cache 管理

  • 操作系统的类比:虚拟内存 → 分页 → KV block
  • vLLM 的 block 管理器:分配、共享(prefix caching)、驱逐
  • KV Cache 量化:FP8/INT8 KV 的精度与容量权衡
  • MLA 的 KV 压缩对系统的影响(DeepSeek 案例)

21.3 前缀缓存与长上下文系统

  • Prefix Caching(RadixAttention):SGLang 的 Radix Tree 设计
  • Chunked Prefill:长 prefill 与 decode 的公平调度
  • 长上下文服务化:KV offload(GPU → CPU → SSD)、分层存储

实战

  1. 推导在线 softmax 并用 Triton 实现一个单头 FlashAttention,与 torch.nn.functional.scaled_dot_product_attention 对齐数值
  2. 阅读 vLLM 的 block manager 源码,画出 block 分配/共享/驱逐的状态图
  3. 实测:开启/关闭 prefix caching 对多轮对话场景吞吐的影响

模块 22:推理引擎运行时(vLLM / SGLang 源码级)(2~3 周)⭐ 核心模块

22.1 引擎架构总览

  • vLLM V1 架构:EngineCore / Scheduler / ModelRunner / Worker 的职责划分
  • 请求生命周期:API 接收 → tokenize → 调度 → 执行 → detokenize → 流式返回
  • 连续批处理(Continuous Batching):迭代级调度的实现
  • 调度器策略:FCFS、抢占(preemption)、优先级

22.2 模型执行路径

  • 模型加载与并行化:权重分片、自定义线性层(ColumnParallel/RowParallel)
  • 采样器(Sampler):logits 处理管线(penalty → temperature → top-p/k)
  • CUDA Graph 在 vLLM 中的应用:capture 时机、padding 策略
  • 多模态输入的处理路径

22.3 源码精读专题

  • vLLM:vllm/v1/engine/vllm/v1/worker/vllm/attention/vllm/model_executor/models/qwen3.py
  • SGLang:RadixAttention、约束解码(compressed FSM)、 PD 分离(Prefill-Decode Disaggregation)
  • 对比分析:两家引擎在调度、缓存、解耦上的设计哲学差异

22.4 二次开发能力

  • 为 vLLM 添加一个新模型的支持(model executor 注册流程)
  • 自定义采样参数 / 自定义 logits processor
  • 性能回归测试:benchmark 套件的使用

实战

  1. 给 vLLM 添加一个自定义 logits processor(如自定义重复惩罚),并通过测试
  2. 魔改实验:修改调度器的一处策略(如 preemption 触发条件),压测对比影响
  3. 输出《vLLM 源码解析》系列笔记:至少覆盖调度器、KV 管理、模型执行三条主线

模块 23:投机解码与生成加速(1~2 周)⭐ 重点模块

23.1 投机解码(Speculative Decoding)原理

  • 核心洞察:decode 是访存瓶颈 → 一次前向验证多个 token 是"免费"的
  • 草稿模型 + 目标模型的验证算法(投机采样,保持分布一致的数学证明)
  • 接受率(acceptance rate)与加速比的关系
  • 变体家族:
    • 独立草稿模型(draft model)
    • Medusa:多头预测
    • EAGLE / EAGLE-2/3:特征级草稿、动态草稿树
    • N-gram / prompt lookup:无模型的投机
  • vLLM 中启用:--speculative-config 的配置与实测

23.2 其他生成加速技术

  • 并行解码 / Lookahead decoding 扫盲
  • 早退(early exit)与级联模型
  • 结构化输出加速:约束解码(xgrammar / outlines)的性能开销与优化
  • 长输出场景的调度优化

实战

  1. 推导投机采样的接受/拒绝概率公式,手写一个玩具版(NumPy)验证分布一致性
  2. vLLM 实测:n-gram vs EAGLE 在不同任务(闲聊/代码/翻译)上的加速比与接受率
  3. 训练/获取一个 EAGLE 草稿头,接入引擎完成端到端加速

模块 24:编译优化与图优化(1~2 周)

24.1 PyTorch 编译栈

  • torch.compile 原理:Dynamo 图捕获 → AOTAutograd → Inductor 代码生成
  • 图 break 的诊断与消除
  • 编译产物分析:读懂 Inductor 生成的 Triton 代码
  • mode 选择:default / reduce-overhead(含 CUDA Graph)/ max-autotune

24.2 CUDA Graph

  • Kernel launch 开销与 CPU bound 问题:为什么小 batch decode 需要 CUDA Graph
  • 捕获与回放机制、静态地址约束
  • 在推理引擎中的工程化:按 batch size 分桶捕获、内存池

24.3 TensorRT-LLM 与部署级优化

  • TensorRT 基础:图优化、算子融合、精度校准(FP8/INT8 PTQ)
  • TensorRT-LLM 的 in-flight batching 与插件体系
  • vLLM vs TensorRT-LLM 的性能与灵活性权衡(结合模块 11 的选型能力深化)

实战

  1. 对一个 decode 循环分别测:eager / torch.compile / torch.compile(reduce-overhead) / 手写 CUDA Graph 的 token/s
  2. 用 Inductor 生成代码做"考古":找到一处可手动优化点并改写 Triton
  3. (可选)用 TensorRT-LLM 部署同一模型并与 vLLM 做 P50/P99 延迟对比

模块 25:分布式推理与大规模服务(1~2 周)

25.1 推理并行策略

  • 张量并行(TP):注意力与 FFN 的切分方式、all-reduce 通信量计算
  • 流水线并行(PP)在推理中的局限
  • 专家并行(EP):MoE 模型的 all-to-all 通信、EPLB 负载均衡(DeepSeek 案例)
  • 数据并行 + 多副本:attention DP 的兴起
  • 序列并行 / 上下文并行(CP):长上下文的 KV 切分

25.2 通信原语与库

  • NCCL 原语:all-reduce / all-gather / reduce-scatter / all-to-all 的语义与带宽模型
  • NVLink / PCIe / RDMA(IB)的带宽差异对并行策略的决定作用
  • 通信与计算重叠(overlap):流水线、分块 all-reduce

25.3 大规模推理架构

  • PD 分离(Prefill-Decode Disaggregation):为什么要拆开、KV 传输(KV connector)
  • 全局路由与调度:多实例负载均衡、缓存亲和路由(cache-aware routing)
  • 弹性与容错:故障实例摘除、请求重试
  • 成本工程:Spot 实例、异构混布、离线批推(batch inference)与在线服务的资源复用

实战

  1. 手算:8B 模型 TP=4 下每层 all-reduce 的通信字节数,对比 NVLink 与 PCIe 的理论开销差异
  2. 部署一个 PD 分离的 vLLM 集群(2 节点),压测对比合并部署的 P99 延迟
  3. 设计评审:给一个 10 万 QPS 的业务设计完整推理架构(模型选型、并行策略、PD 配比、路由、容灾)

模块 26:精通阶段毕业项目(2~3 周)

项目(三选一或组合):

A. 写一个迷你推理引擎

  • 支持连续批处理、Paged KV Cache、CUDA Graph、投机解码(n-gram 版)
  • 目标:7B 模型在单卡上达到 vLLM 同级性能的 50%+,写清每一段差距的原因

B. 算子级深度优化

  • 针对一个具体模型(如 Qwen3-MoE)的 decode 路径做端到端剖析
  • 至少交付 2 个自定义 Triton/CUDA kernel,端到端 token/s 提升 ≥ 15%
  • 输出完整 profiling 报告(Roofline 分析 + nsys 时间线 + 优化前后对比)

C. vLLM 源码贡献

  • 从 issue/roadmap 中选一个真实改进点(新模型支持、算子优化、调度改进)
  • 提交 PR 并通过 review(或至少通过 CI 与 maintainer 初审)

毕业标准(自检清单)

  • [ ] 能用 Roofline 模型判断任意推理场景的瓶颈类型并给出优化方向
  • [ ] 能手写达到 cuBLAS 60%+ 性能的 CUDA GEMM 及常用 Triton 融合算子
  • [ ] 能推导在线 softmax 并实现单头 FlashAttention
  • [ ] 能画出 vLLM 一次请求的完整内部路径(调度 → KV → 执行 → 采样)
  • [ ] 能推导投机采样的分布一致性证明并实测加速比
  • [ ] 能说清 torch.compile / CUDA Graph / TensorRT 各自的优化层级与边界
  • [ ] 能为 MoE 大模型设计 EP + PD 分离的生产推理架构并估算成本

时间规划参考

周次内容
第 1~2 周模块 19:GPU 体系结构与性能分析(地基)
第 3~5 周模块 20:CUDA/Triton 算子(重点)
第 6~7 周模块 21:FlashAttention 与 KV Cache 系统(重点)
第 8~10 周模块 22:vLLM/SGLang 源码级剖析(核心)
第 11~12 周模块 23:投机解码(重点)
第 13~14 周模块 24:编译优化
第 15~16 周模块 25:分布式推理与 PD 分离
第 17~19 周模块 26:毕业项目

配套资源

类型资源
课程GPU MODE(原 CUDA MODE)系列、Stanford CS149(并行计算)、CMU 15-445 式系统课思维
论文FlashAttention 1/2/3、PagedAttention(vLLM)、Speculative Decoding、Medusa、EAGLE、SGLang(RadixAttention)
代码vLLM、SGLang、FlashAttention、Triton tutorials、TensorRT-LLM、llm.c(Karpathy)
工具Nsight Systems / Nsight Compute、PyTorch Profiler、vLLM benchmark、NCCL tests
社区vLLM/SGLang GitHub Discussions、GPU MODE Discord、各类引擎 release notes(跟踪前沿)