推理框架负责人 — 学习路线
目标:6个月从AI Infra深入到推理框架核心
为什么嵌入式工程师最适合做推理优化
推理优化本质是在GPU上做嵌入式开发:
| 嵌入式 | 推理框架 | 思维映射 |
|---|---|---|
| MCU寄存器编程 | CUDA寄存器/共享内存 | 手写PTX=手写汇编 |
| DMA传输优化 | 显存拷贝/异步传输 | 数据搬运的延迟隐藏 |
| 中断延迟 ≤ 10μs | 推理延迟 ≤ 50ms | 时延敏感系统 |
| 静态内存池 | KV-cache预分配 | 显存预算管理 |
| FOC PWM死区补偿 | Kernel launch overlap | 流水线气泡消除 |
| Bootloader | 模型加载/热更新 | 二进制加载+校验 |
6个月学习计划
Phase 1:CUDA 基础(Month 1-2)
目标:写出比cuBLAS快的自定义kernel
| 周次 | 主题 | 内容 | 检验 |
|---|---|---|---|
| W1 | GPU体系结构 | SM/Warp/线程束/内存层次/occupancy | 能画出A100 SM架构图 |
| W2 | CUDA编程模型 | grid/block/thread、shared memory、bank conflict | 矩阵乘法 > cuBLAS 80%性能 |
| W3 | CUDA内存优化 | 合并访问/向量化加载/异步拷贝 | GEMM kernel手写优化 |
| W4 | CUDA Stream | 多流并发/cuBLAS多流/cuBLAS+custom混合 | 两个kernel并行执行 |
核心项目:手写 GEMM kernel
基线: cuBLAS cublasSgemm (120 TFLOPS on A100) Week 2: naive GEMM → 2 TFLOPS Week 3: tiling + smem → 20 TFLOPS Week 4: double buffer + async copy → 40 TFLOPS 目标: 达到cuBLAS 50%+ 性能关键资源:
- 《CUDA C++ Programming Guide》前5章
github.com/NVIDIA/cutlass— 生产级GEMM模板库- Simon Boehm的"How to Optimize a CUDA Matmul Kernel"博客
Phase 2:推理引擎原理(Month 3-4)
目标:理解vLLM/TensorRT-LLM的每一行关键代码
| 周次 | 主题 | 内容 | 产出 |
|---|---|---|---|
| W5-6 | vLLM深度解剖 | PagedAttention/KV-cache管理/调度器/前缀缓存 | vLLM源码分析系列笔记 |
| W7 | 量化原理 | GPTQ/AWQ/FP8/INT4、act-order/group-size | 手写一个INT8量化kernel |
| W8 | FlashAttention | 分块计算/softmax rescaling/反向传播 | 手写FlashAttention forward |
vLLM精读清单(优先级从高到低):
1. vllm/worker/model_runner.py ← 模型加载+推理循环 2. vllm/core/block_manager.py ← KV-cache块管理(PagedAttention核心) 3. vllm/core/scheduler.py ← 请求调度器 4. vllm/attention/backends/flash_attn.py ← FlashAttention集成 5. vllm/model_executor/layers/fused_moe/ ← MoE kernel (DeepSeek相关)核心项目:手写 PagedAttention
输入: Q tensor, 分页的KV-cache块表 输出: attention output 关键: 不用cuDNN,纯CUDA实现分页注意力 对比: 与vLLM的PagedAttention kernel性能对比Phase 3:高级优化(Month 5-6)
目标:独立设计和实现推理优化方案
| 周次 | 主题 | 内容 | 产出 |
|---|---|---|---|
| W9-10 | 投机解码 | Medusa/Eagle/自回归投机树搜索 | 手写投机解码kernel |
| W11 | PD分离 | Prefill-Decode分离、micro-batching | 实现PD分离调度器 |
| W12 | 综合实战 | 自建Mini推理引擎 | Mini推理引擎+benchmark |
核心项目:Mini Inference Engine
Mini Inference Engine (纯C++/CUDA, ~3000行) ├── model_loader ← safetensors/gguf加载 ├── attention ← PagedAttention + FlashAttention ├── kv_cache ← 块管理+LRU淘汰 ├── sampler ← top-p/top-k/temperature ├── scheduler ← continuous batching ├── quantization ← INT8/FP8量化支持 └── api_server ← OpenAI兼容HTTP接口对标测试:
模型: Llama-3-8B on A100 vLLM baseline: 2000 tok/s (throughput) Mini Engine V1: 1000 tok/s (50% baseline) Mini Engine V2: 1500 tok/s (75% baseline) ← 及格能力检查清单
CUDA
- 手写GEMM达到cuBLAS 50%+ 性能
- 消除bank conflict、合并全局内存访问
- 多Stream并行、异步拷贝隐藏延迟
- 理解Tensor Core编程模型(m16n8k16等)
推理引擎
- 能画出PagedAttention的内存布局
- 理解vLLM调度器的3种排队策略(FCFS/Priority/Preempt)
- 理解Continuous Batching vs Static Batching
- 知道Prefix Caching如何检测和复用
量化
- GTPQ/AWQ的数学原理(Hessian-based/activation-aware)
- FP8 E4M3 vs E5M2的选择依据
- 量化对attention和FFN的影响差异
- 手写INT8矩阵乘法kernel
投机解码
- 理解Medusa Tree Attention的树形掩码
- 知道投机解码的吞吐-延迟 tradeoff
- 实现draft model + target model的验证循环
系统
- 用Nsight Systems分析推理pipeline瓶颈
- 用Nsight Compute分析单个kernel性能
- 理解GPU显存碎片问题和解决方案
简历项目清单
🥇 Mini Inference Engine(核心项目)
一个纯C++/CUDA实现的轻量级推理引擎
- PagedAttention + FlashAttention
- Continuous Batching
- OpenAI兼容API
- 面试价值:直接证明你能胜任推理框架岗位
🥈 手写 GEMM Kernel
从naive到tiling到double buffer的渐进优化
- 完整benchmark对比cuBLAS
- Nsight Compute profiling分析
- 面试价值:CUDA功底的硬通货
🥉 vLLM源码分析系列
公开发表的深度技术文章
- PagedAttention内存管理
- 调度器设计
- 前缀缓存机制
- 面试价值:证明你的技术品味和表达能力
4️⃣ PD分离调度器原型
实现Prefill-Decode分离的调度策略
- 延迟敏感度分析
- 吞吐-延迟Pareto曲线
- 面试价值:前沿方向,面试官感兴趣的话题
时间表
| 阶段 | 月份 | 重点 | 每周投入 |
|---|---|---|---|
| Phase 1 | M1-2 | CUDA基础 + GEMM | 20h |
| Phase 2 | M3-4 | vLLM + 量化 + FlashAttention | 20h |
| Phase 3 | M5-6 | 投机解码 + Mini引擎 | 25h(冲刺) |
| 总计 | 6个月 | ~520h |