算法工程师的课外补习:工业界HPC基本概念
分阶段学习路径
| 阶段 | 目标 | 核心资源 | 实践产出 |
|---|---|---|---|
| 1. 体系结构基础 | 建立存储层级、SIMD、流水线、分支预测的硬件直觉 | Patterson & Hennessy《Computer Organization and Design: A Hardware/Software Interface (RISC-V Edition)》;Parhami《Computer Arithmetic: Algorithms and Hardware Designs》zhihu.com | 手算一段循环的算术强度(Arithmetic Intensity) |
| 2. 并行编程模型 | 掌握 GPU/CPU 的并行抽象 | PMPP《Programming Massively Parallel Processors》4th/5th(Kirk & Hwu)elsevier.com+2;程润伟《CUDA C 编程权威指南》gdufe.edu.cn;《CUDA by Example》baidu.com;陈天奇《Modern GPU Programming for MLSys》在线书(以 GEMM 和 FlashAttention 为案例,覆盖 TMA、Tensor Core、Blackwell 架构)html5.qq.com | 手写 sgemm、reduction、scan,并跑出与 cuBLAS 的对比 |
| 3. 性能分析与建模 | 用数据驱动优化决策 | Roofline 性能模型(Williams et al., 2009)——至今是理解 FlashAttention、Triton、TensorRT 的底层框架csdn.net+2;NVIDIA Nsight Systems/Compute、Intel VTune、perf、AMD μProf | 为自己的 kernel 画 Roofline 图,定位是 memory-bound 还是 compute-bound |
| 4. 经典优化模式 | 掌握可复用的”优化原语” | PMPP 的并行模式章节(stencil、reduction、sorting、convolution、histogram、sparse matrix)oreilly.com;CMU 15-418/618《Parallel Computer Architecture and Programming》全课程(含 ILP、SIMD、OpenMP、CUDA、MapReduce)ibilibili.com+2 | 用 Tiling + Shared Memory 把朴素矩阵乘法提速 10× |
| 5. 跨平台迁移 | 理解不同加速器的特性差异与共性 | 硬件感知 NAS(Hardware-aware NAS)文献——把延迟、功耗、内存作为搜索约束csdn.net+2;存算一体(忆阻器)的”算法-器件-电路-架构”协同设计范式nsfc.gov.cn;TVM、Triton、MLIR 等编译器中间表示 | 把一个 GPU kernel 用 Triton 重写,并迁移到不同架构 |
| 6. 前沿案例拆解 | 把共性原理对照到顶会/工业实现 | FlashAttention 系列论文 + Triton 实现详解csdn.net+3;Mamba 的硬件感知并行扫描zhihu.com+1;投机解码 / MTP / Saguaro(SSD)tencent.com+3;vLLM PagedAttentiontencent.com | 复现 FlashAttention 前向,对比朴素实现的 HBM 流量 |
六个抽象模式
算法重构)) 数据局部性重构 Tiling 分块 FlashAttention 的 QKV block GEMM 的 block-tile-thread-tile 数据布局变换 NHWC vs NCHW AoS vs SoA Padding 对齐 cache line 计算重排序 Fusion 算子融合 Mamba 的 scan+matmul+norm 融合 FlashAttention 的 softmax 在 SRAM 内完成 Recomputation 以算换存 FlashAttention 反向不存 attention matrix 激活检查点 gradient checkpointing 流水线与异步 双缓冲 / 多缓冲 TMA 异步拷贝与计算重叠 Producer-Consumer 解耦 MTP 的 draft-verify 流水 异步策略队列 内存层级感知 SRAM/HBM/DRAM 分级调度 把热数据钉在片上 SRAM KV Cache 的分页管理 PagedAttention 借鉴 OS 虚拟内存 并行度挖掘 SIMD/Warp/SIMT 向量化 数据并行 vs 任务并行 vs 流水线并行 Tree/Speculative 并行 CPU 投机执行 LLM 投机解码的分支树验证 稀疏性与跳过 Block-sparse 访问 条件计算 MoE 的 expert 路由 分支预测与回滚
模式 1:数据局部性重构(Tiling + Layout)。 FlashAttention 的本质不是改公式,而是把 QKV 切成能塞进 192KB SRAM 的 block,让 softmax 在片上完成,把 HBM 流量从 O(N²) 降到 O(N²d²/M)csdn.net+2。同样思路在 GEMM 里就是 block-tile → thread-tile → warp-tile 的多级分块。CPU 上的对应物是循环分块让工作集 fit 进 L1/L2。
模式 2:计算重排序(Fusion + Recomputation)。 Mamba 把选择性扫描、矩阵乘、归一化融合进单 kernel,避免中间结果落盘 HBMzhihu.com+1;FlashAttention 反向传播时不存 N×N 矩阵,而是重计算——这是”以算换存”的经典权衡,在显存墙面前比单纯减少 FLOP 更重要zhihu.com+1。
模式 3:流水线与异步。 FlashAttention-3 用 TMA 异步拷贝与 Tensor Core 计算重叠blog.csdn.net;MTP 投机解码把 draft 生成与 verify 解耦成 producer-consumer 流水tencent.com;Saguaro(SSD)更进一步,在 verify 同时就投机地预生成下一轮 draft,缓存命中率 >90%html5.qq.com——这和 CPU 乱序执行里”分支未定就先沿预测路径执行”是同构思想。
模式 4:内存层级感知。 KV Cache 把历史 K/V 钉在显存避免重算tencent.com;PagedAttention 借鉴 OS 虚拟内存的分页机制,把 KV Cache 的显存利用率从 40% 拉到 90%tencent.com。这类设计的共同点:识别数据的”温度”,把热数据放在最快的介质。
模式 5:并行度挖掘与投机并行。 CPU 的投机执行、LLM 的投机解码、MTP 的多 token 并行验证,本质都是”在不确定路径时先沿多条路径前进,事后回滚错误分支”——用冗余计算换串行依赖的消除html5.qq.com+1。
模式 6:稀疏性与条件计算。 Block-sparse FlashAttention 只算非零块;MoE 路由让每个 token 只激活部分 expert。这是”用不规则性换计算量下降”,代价是需要在硬件上处理好 load balancing 和 memory divergence。
检索关键词清单
概念类(用于找论文与综述)
IO-aware algorithm/hardware-aware algorithm/hardware-software co-designRoofline model/arithmetic intensity/memory-bound vs compute-boundoperator fusion/kernel fusion/recomputation/gradient checkpointingtiling/block-level tiling/data layout/memory coalescingspeculative execution/speculative decoding/multi-token prediction (MTP)quantization-aware training/hardware-aware NAScsdn.net+1compute-in-memory/in-memory computing/memristor crossbarnsfc.gov.cn
工具与库类(用于动手实践)
CUDA/Triton/OpenAI Triton tutorial/NVIDIA CUTLASSNVIDIA Nsight Systems/Nsight Compute/CUPTI/nvprofIntel VTune Profiler/Intel Advisor(内置 Roofline 建模)csdn.netTVM/MLIR/Apache TensorVM/HalidevLLM/SGLang/TensorRT-LLM(推理引擎,可读源码学优化)
课程类
CMU 15-418/618 Parallel Computer Architecture and Programmingibilibili.com+1CMU 15-445 Database Systems(存储与缓冲池管理,对应 PagedAttention 思想来源)MIT 6.172 Performance Engineering(C 语言性能优化,含 SIMD、cache、分支)CMU 10-414/714 Deep Learning Systems(陈天奇,dlsys 课程)Stanford CS149 Parallel Computing
论文与案例类
FlashAttention v1/v2/v3(Tri Dao 等)csdn.net+2Mamba: Linear-Time Sequence Modeling with Selective State Spaceszhihu.comPagedAttention / vLLMtencent.comSpeculative Decoding(Leviathan et al., 2022)html5.qq.comSpeculative Speculative Decoding (Saguaro)html5.qq.comFastMTP(腾讯,单 MTP 头递归预测)aliyun.com+1Programming Massively Parallel Processors配套 GitHub 题解github.com
推荐的可复现项目清单
按难度递增,每个都对应一种共性模式:
- 手写 CUDA sgemm 并用 Tiling + Shared Memory 优化到 cuBLM 的 80% —— 体会数据局部性与内存层级。
- 用 Triton 复现 FlashAttention-2 前向(已有完整教程)qq.com —— 体会 Fusion + Recomputation + Online Softmax。
- 实现并行 prefix sum(Blelloch 算法)并分析其 memory-bound 特性 —— 体会计算重排序如何降低关键路径。
- 实现 double buffering 的 CUDA stream pipeline —— 体会异步与流水线重叠。
- 实现一个简易投机解码器(draft model + verify + accept/reject)tencent.com+1 —— 体会投机并行与回滚。
- 用 Nsight Compute 为自己的 kernel 生成 Roofline 图csdn.net+1 —— 体会性能分析与瓶颈定位。
优先订阅的信息源
<div class="mermaid">
mindmap
root((碎片化输入源))
一手博客/个人站
Tri Dao 博客 tridao.me
Christian Mills CUDA MODE 笔记
Josherich 笔记
Stanford CRFM 技术解读
社区/串讲
GPU MODE Discord + YouTube
HPC.social 社区
NVIDIA Developer Blog
论文 + 配套实现
FlashAttention 系列 + 源码
PagedAttention/vLLM
投机解码/MTP
工具/Playground
Triton tutorial
Nsight Compute / NCU
CUDA Launch Stats
</div>
检索关键词策略
碎片化学习靠的是”碰到问题 → 用对的关键词 → 一次捞到一篇好文”。建议把下面这几组关键词存成笔记,需要时直接组合:
| 你的场景 | 检索关键词组合 |
|---|---|
| 某算法为什么慢 | <algo> memory bound / <algo> IO aware / <algo> roofline |
| 想看优化套路 | kernel fusion / recomputation / tiling shared memory / double buffering / async copy TMA |
| 想看推理优化 | speculative decoding / multi token prediction / paged attention / KV cache paging / continuous batching |
| 想看 GPU 原理 | warp divergence / memory coalescing / occupancy / tensor core WGMMA / TMA async |
| 想看 CPU 侧 | SIMD intrinsics / cache line false sharing / prefetch / branch prediction / data layout AoS SoA |
| 想看 NPU/异构 | hardware aware NAS / quantization aware training / operator library NPU / compute in memory |
| 想找”会写的人” | <algo> author blog / <algo> explained / CUDA MODE lecture <topic> |
一个特别好用的小技巧:Google 搜 site:discord.com/gpumode <topic> 或 site:christianjmills.com <topic>,往往能直接捞到社区里某次讲座的笔记,比泛搜博客质量高得多。
人类和机器的替代性
事实上,在工业界内部,这个替代过程已经在发生了。
如果我们把“硬件感知算法重构”狭义地定义为:给定一个明确的算法数学公式(比如标准的Self-Attention),去写出能在特定硬件上跑满理论带宽/FLOPS的代码(比如手写Triton/CUDA kernel),那么这个任务确实非常适合AI Agent在循环内迭代。
为什么AI Agent能赢下这部分工作?
这类任务具有三个极其适合AI自动化迭代的特征:
- 目标函数是绝对清晰的:延迟、吞吐量、显存占用。AI不需要理解人类的模糊反馈,只需要看Nsight Compute的数字是升了还是降了。
- 环境是可完全模拟的:Agent可以自动生成代码 -> 编译 -> 在GPU上跑10次 -> 读取Profiling指标 -> 发现Memory Throughput不达标 -> 修改Tiling参数。这个闭环比自动驾驶或机器人控制简单得多。
- 现有工具链已经铺路:像TVM的AutoTVM、Ansor,甚至早期的Halide,已经在做基于规则的自动搜索。现在加上LLM的代码生成能力,OpenAI的Triton团队和一些初创公司已经在尝试用Agent自动写并优化Triton kernel,且在部分算子上超过了人类手写。
因此,你说的“推理厂商没必要养大量基础码农去手写或调优局部kernel”是成立的。这部分的岗位需求会大幅萎缩。
但为什么短期内(3-5年)人类还不能完全被踢出局?
尽管局部kernel的调优可以自动化,但在真实的推理厂商和复杂系统落地中,仍有几道AI暂时跨不过去的墙:
1. 硬件知识的“暗物质”
你排除了“前沿芯片设计”,但即使是使用现成芯片,也存在大量未公开文档的硬件细节。
真实的NVIDIA Hopper/Blackwell架构,其底层的TMA、WGMMA、异步流水线有大量在官方PTX手册里写得极其含糊甚至滞后的“暗规则”。人类高级工程师靠逆向工程、靠社区交流、靠甚至认识芯片设计团队才能摸清这些边界。AI依赖于文档,而文档往往落后于硬件发售1-2年。当AI基于公开文档去迭代kernel时,它可能在错误的前提上局部收敛。
2. “算法设计”与“硬件感知”的边界其实很模糊
你提到不包括算法设计研发人员,只包括按照固定思路优化现有算法的人。但现实是,最顶级的硬件感知优化往往伴随算法的重新定义。
比如FlashAttention,它不仅仅是“把标准Attention跑得更快”,它发明了Online Softmax,这是数学公式的改变。如果你只给AI一个标准的 Softmax(QKT)V 公式,让它去跑满带宽,它只能做到切分和共享内存优化,很难凭空“悟出”重构计算顺序的Online算法。
AI目前能做“给定新数学公式后的代码实现与调优”,但很难做“为了适应硬件而发明新数学公式”。只要人类还在不断提出新的数学结构(比如Mamba, 混合专家路由的新机制),就需要人类工程师去把这种新结构“硬件感知化”。
3. 跨节点、全系统级的动态调度
你关注了单机/单卡上的重构。但在推理厂商,性能瓶颈往往在系统级拓扑:多卡间的NVLink拓扑、RDMA网络拥塞、PagedAttention的显存碎片调度、Continuous Batching的请求排队逻辑。
这种系统级的性能优化,其环境是高度动态、多变的真实流量,且极难在Agent的循环内被快速、准确地模拟和反馈。AI Agent可以在“假定的静态负载”下调出一个极优的kernel,但在真实多并发、长短序列混合的流量下,人类工程师对系统瓶颈的“直觉”和“全局重构”仍然主导。
4. 生产级可靠性与“0.01%的数值Bug”
AI生成的kernel可能在benchmark上跑得飞快,但在某些极端形状输入、或者边界条件时产生未定义行为(UB)或数值溢出。推理厂商的底线是“不能给用户返回乱码的token”。人类的高级工程师在这里扮演的是“安全网”和“搜索空间设计者”的角色:我们需要设计容错机制、数值稳定性检查,确保AI搜出来的代码具备生产可用性。
结论:岗位会向“高密度”收敛
你的判断对推理厂商的人员结构意味着什么?
- “基础调优码农”确实会消失。 那些只会拿着已有的OpenAI Triton代码,按教程改改
BLOCK_SIZE跑benchmark的初级HPC工程师,会被AI Agent(或者被已经集成好AI Agent的内部工具链)取代。 - 推理厂商不需要“大量”基础码农,但需要“极少量”顶级系统架构师。 这极少量的人,不再是去写具体kernel,而是去设计AI Agent的搜索空间、搭建系统级流水线、处理跨机通信瓶颈、以及为AI生成的算子兜底。
- 算法工程师的门槛其实是被提高了,而不是降低。 以前算法工程师可以不管性能,交给HPC团队去“擦屁股”。未来如果HPC基础工作被AI自动化了,算法工程师在设计新结构时,必须自己具备“硬件感知”的直觉,以便于让后续的AI自动化优化流程能够顺滑地接手。如果你设计的算法结构本身违背了硬件流水线原则,AI再怎么迭代也只能事倍功半。
