learning-path.md
1 # 学习路线 2 3 AI 系统优化从初学者到专家的结构化学习路线图。 4 5 ## 🎯 学习目标 6 7 完成本学习路线后,您将: 8 9 - 理解端到端 AI 系统优化栈 10 - 掌握 TVM 编译器优化 11 - 开发 ONNX Runtime 的自定义 CUDA 算子 12 - 使用 CUTLASS 实现高性能 GEMM 内核 13 - 探索下一代 GPU 编程模型 14 15 **预计时间:** 兼职 2-4 周 或 全职 1 周 16 17 --- 18 19 ## 📚 按技能水平的路径 20 21 ### 🌱 初学者路线 22 23 **前置条件:** 24 - 基础 Python 编程 25 - 基础线性代数(矩阵运算) 26 - 熟悉 PyTorch 或 TensorFlow 27 28 **目标:** 29 - 搭建开发环境 30 - 运行所有示例 31 - 理解基本概念 32 33 **路径:** 34 35 | 天数 | 任务 | 文档 | 36 |-----|------|------| 37 | 1 | 环境搭建 | [前置要求](./prerequisites), [快速开始](./quick-start) | 38 | 2 | 运行 TVM 基线 | TVM README | 39 | 3 | 理解结果 | TVM 模块代码 | 40 | 4 | 运行 ORT 自定义算子 | ORT README | 41 | 5 | 运行基准测试 | `scripts/run_all_benchmarks.sh` | 42 43 **产出:** 所有示例在您的机器上运行 44 45 --- 46 47 ### 🚀 进阶路线 48 49 **前置条件:** 50 - 完成初学者路线 51 - 基础 CUDA 知识 52 - 理解计算图 53 54 **目标:** 55 - 理解架构设计决策 56 - 修改和扩展示例 57 - 执行基础调优 58 59 **路径:** 60 61 | 周数 | 重点 | 任务 | 62 |------|------|------| 63 | 第 1 周 | TVM 深入 | 学习 Relay IR,修改调度原语 | 64 | 第 2 周 | ORT 集成 | 理解自定义算子生命周期,修改内核 | 65 | 第 3 周 | CUTLASS 优化 | 实验 tile 大小,使用 Nsight 分析 | 66 | 第 4 周 | 性能分析 | 生成和分析基准报告 | 67 68 **文档:** 69 - [项目架构](./architecture) 70 - [API 参考](./api-reference) 71 - [性能调优](./performance-tuning) 72 73 **产出:** 74 - 可工作的修改版 TVM 调度 75 - 自定义 ORT 算子变体 76 - 调优的 CUTLASS 配置 77 78 --- 79 80 ### 🎓 专家路线 81 82 **前置条件:** 83 - 完成进阶路线 84 - 扎实的 C++/CUDA 编程能力 85 - 理解 GPU 微架构 86 87 **目标:** 88 - 开发新的优化模块 89 - 为项目做贡献 90 - 掌握分析工具 91 92 **路径:** 93 94 | 周数 | 重点 | 任务 | 95 |------|------|------| 96 | 第 1-2 周 | 高级 TVM | 自定义 pass 开发,自动调度器自定义 | 97 | 第 3-4 周 | CUTLASS 专家 | WGMMA 优化,自定义尾操作 | 98 | 第 5-6 周 | 研究 | 探索 cuTile,与 Triton 对比 | 99 | 第 7-8 周 | 贡献 | 提交 PR,添加新特性或优化 | 100 101 **产出:** 102 - 合并到项目的贡献 103 - 优化技术研究笔记 104 - 发现展示 105 106 --- 107 108 ## 📖 完整模块序列 109 110 ### 阶段 0:基础(2天) 111 112 ``` 113 步骤 1:阅读文档 114 ├── [快速开始](./quick-start) — 环境搭建 115 ├── [前置要求](./prerequisites) — 依赖 116 └── [项目架构](./architecture) — 项目结构 117 118 步骤 2:验证环境 119 ├── 运行所有示例 120 ├── 生成首个基准报告 121 └── 探索代码结构 122 ``` 123 124 ### 阶段 1:TVM 编译器优化(3天) 125 126 ``` 127 主题:端到端优化工作流 128 ├── 基线:PyTorch vs TVM 129 ├── 自动调优:Ansor 搜索 130 └── 手动调度:TensorIR 原语 131 132 关键概念: 133 • Relay IR 表示 134 • 调度原语(split, reorder, vectorize, bind) 135 • 硬件感知优化 136 137 实践: 138 1. 运行 1_import_and_baseline.py 139 2. 用不同试验次数运行 2_auto_scheduler_tuning.py 140 3. 修改 3_tensorir_manual_schedule.py tile 大小 141 4. 对比性能结果 142 143 产出:理解编译器优化流水线 144 ``` 145 146 ### 阶段 2:运行时扩展(3天) 147 148 ``` 149 主题:ONNX Runtime 自定义算子 150 ├── Python API 集成 151 ├── C++ 算子实现 152 └── CUDA 内核开发 153 154 关键概念: 155 • ORT 执行提供器架构 156 • 自定义算子注册 157 • Python-C++-CUDA 桥接 158 159 实践: 160 1. 理解 GELU 实现 161 2. 为不同激活函数修改内核 162 3. 使用 Nsight Systems 分析 163 4. 测量端到端延迟 164 165 产出:能够开发自定义推理算子 166 ``` 167 168 ### 阶段 3:高性能计算(4天) 169 170 ``` 171 主题:CUTLASS GEMM 优化 172 ├── GPU 内存层次结构 173 ├── Tensor Core 编程 174 └── CUTLASS 抽象 175 176 关键概念: 177 • 共享内存 tiling 178 • 寄存器级优化 179 • WGMMA 指令(Hopper) 180 • 性能分析 181 182 实践: 183 1. 研究 hopper_gemm 实现 184 2. 实验不同 tile 大小 185 3. 使用 Nsight Compute 分析 186 4. 与 cuBLAS 对比 187 188 产出:理解高性能内核开发 189 ``` 190 191 ### 阶段 4:未来方向(2天) 192 193 ``` 194 主题:下一代编程模型 195 ├── cuTile 抽象 196 ├── 与 Triton 对比 197 └── 编译器自动优化 198 199 关键概念: 200 • Tile 级编程 201 • 生产力与性能权衡 202 • GPU 编程的未来 203 204 实践: 205 1. 运行 cuTile 示例 206 2. 与 Triton 实现对比 207 3. 撰写分析文档 208 209 产出:对未来 GPU 编程趋势的视角 210 ``` 211 212 --- 213 214 ## 📝 学习技巧 215 216 ### 高效学习策略 217 218 1. **边读边实践** — 不要只读——运行每个示例 219 2. **修改参数** — 改变大小、计数、阈值 220 3. **分析一切** — 使用 Nsight 工具理解行为 221 4. **记录发现** — 保留优化技术笔记本 222 5. **基准测试** — 始终测量变更前后的性能 223 224 ### 避免常见陷阱 225 226 | ❌ 不要 | ✅ 要 | 227 |----------|------| 228 | 跳过前置条件 | 首先验证环境 | 229 | 匆忙过示例 | 理解每一步 | 230 | 忽略失败测试 | 诊断并修复问题 | 231 | 假设硬件相同 | 在你的硬件上基准测试 | 232 | 跳过分析 | 使用工具验证改进 | 233 234 --- 235 236 ## 🎓 推荐背景阅读 237 238 ### 必读 239 240 - [TVM 文档](https://tvm.apache.org/docs/) 241 - [CUDA 编程指南](https://docs.nvidia.com/cuda/cuda-c-programming-guide/) 242 - [CUTLASS 文档](https://github.com/NVIDIA/cutlass/tree/main/media/docs) 243 244 ### 进阶 245 246 - 《大规模并行处理器编程》(Kirk & Hwu) 247 - 《计算机架构:量化方法》(Hennessy & Patterson) 248 - TVM 论文:[Apache TVM](https://tvm.apache.org/) 249 250 --- 251 252 ## ✅ 进度清单 253 254 ### 初学者 255 - [ ] 环境搭建完成 256 - [ ] 所有示例成功运行 257 - [ ] 首个基准报告已生成 258 - [ ] 文档已阅读 259 260 ### 进阶 261 - [ ] 修改的 TVM 调度的可用 262 - [ ] 自定义 ORT 算子变体已测试 263 - [ ] CUTLASS 配置已基准测试 264 - [ ] 性能报告已创建 265 266 ### 专家 267 - [ ] 自定义 TVM pass 已开发 268 - [ ] WGMMA 优化内核已实现 269 - [ ] 研究对比已完成 270 - [ ] 贡献已提交 271 272 --- 273 274 ## 🤝 社区 275 276 - **讨论:** 使用 GitHub Discussions 提问 277 - **问题:** 报告 bug 和功能请求 278 - **贡献:** 查看 [贡献指南](./contributing) 279 280 --- 281 282 *从 [快速开始](./quick-start) 开始您的旅程!*