AI 系统看起来很复杂,但核心可以压缩成三句话:
- 尽量少搬数据:很多时候不是算不动,而是数据搬运太慢。
- 尽量提高有效计算密度:让硬件更多时间在做有价值的乘加计算。
- 尽量重叠计算与通信:训练和推理都要避免"设备空等"。
换句话说,AI 性能问题本质上是 计算(Compute)+ 访存(Memory)+ 通信(Communication) 的协同问题。
1. AI 系统栈
| 层级 | 主要职责 | 典型问题 | 常见关键词 |
|---|---|---|---|
| L7 AI 应用层 | 提供用户可见功能 | 回答是否准确、体验是否流畅 | Chat、Copilot、推荐 |
| L6 业务编排层 | 把业务逻辑组织成可执行流程 | 如何用最少 token 获得最好结果 | Prompt、RAG、Agent |
| L5 模型服务层 | 把模型能力稳定对外提供 | 如何高可用、可扩展、可治理 | 网关、限流、灰度、A/B |
| L4 推理引擎层 | 把请求高效变成 token 输出 | 如何降 TTFT/TPOT、提并发 | Batch、KV Cache、PagedAttention |
| L3 训练框架层 | 训练与微调模型 | 如何在多卡多机稳定收敛 | Autograd、DDP/FSDP、计算图 |
| L2 编译运行时层 | 把模型算子变成高效程序 | 如何逼近硬件峰值性能 | IR、Fusion、Tiling、CUDA |
| L1 硬件系统层 | 提供真实算力与带宽 | 算力/带宽/通信瓶颈在哪里 | Tensor Core、HBM、NVLink |
2. AI 硬件与体系结构:算力的物理根基
2.1 CPU、GPU、ASIC 的职责划分
- CPU(中央处理器):通用控制能力强,擅长复杂分支和系统调度。
- GPU(图形处理器):并行吞吐高,擅长大规模矩阵乘法。
- ASIC(专用芯片):针对 AI 运算固化电路(如 TPU/NPU),能效高但通用性低。
类比:
- CPU 像"总指挥 + 少量专家"。
- GPU 像"超大规模流水线工人"。
- ASIC 像"只做某几类工序但极快的专机"。
2.2 GPU 的执行单位:SIMT、Warp、Block
- SIMT(Single Instruction Multiple Threads):同一程序由大量线程并发执行。
- Warp:GPU 调度基本单位(NVIDIA 常见 32 线程)。
- Thread Block(线程块):多个 warp 组成,可共享片上内存。
关键性能点:
- Warp Divergence(分支发散):同一 warp 走不同分支会串行执行,吞吐下降。
- Coalesced Access(内存合并访问):连续地址访问可减少内存事务。
- Occupancy(占用率):同时驻留 SM 的线程比例;不是越高越好,要平衡寄存器压力。
2.3 内存层级决定"真实速度"
从快到慢大致是:
- Register(寄存器)
- Shared Memory / SRAM(共享内存/片上存储)
- L2 Cache
- HBM(高带宽显存)
- Host Memory(主机内存)
- Remote Memory(远端节点)
高性能 kernel 的共同目标:尽量让热点数据停留在更靠近计算单元的层级。
2.4 互联与通信:单机多卡到多机集群
- PCIe:通用互联,带宽相对有限。
- NVLink/NVSwitch:GPU 间高带宽低延迟互联。
- InfiniBand + RDMA:多机高性能网络。
训练常见通信原语:
- All-Reduce:聚合并广播(常用于梯度同步)。
- All-Gather:把各卡分片收集到每卡。
- Reduce-Scatter:先归约再分发(常与 All-Gather 配合)。
3. AI 编译与计算架构:模型代码如何变成硬件指令
3.1 为什么需要 AI 编译器
如果每个框架都手写每种芯片的底层代码,会形成 N 框架 × M 硬件 组合爆炸。AI 编译器通过中间表示把问题变成:
前端框架 -> IR(中间表示) -> 后端硬件
代表系统:TVM、XLA、TensorRT、MLIR 生态。
3.2 多级 IR(Intermediate Representation,中间表示)
常见分层:
- High-level IR(高层图 IR):表达算子依赖关系,便于图级优化。
- Tensor/Loop IR(张量或循环 IR):表达循环、访存、布局,便于调度优化。
- Low-level IR(低层 IR):接近目标指令(如 PTX、LLVM IR)。
3.3 前端优化(硬件无关)
- Constant Folding(常量折叠):编译期算掉常量表达式。
- Dead Code Elimination(死代码消除):删掉无用分支。
- Operator Fusion(算子融合):合并多个小算子,减少中间读写。
- Shape Inference(形状推导):提前推断维度,减少运行期开销。
例子:
MatMul -> Add -> GELU 三个 kernel 可以融合为一个 fused kernel,减少两次中间张量落地。
3.4 后端优化(硬件相关)
- Tiling(分块):把大矩阵切小块,提升缓存命中。
- Vectorization(向量化):一条指令并行处理多个元素。
- Unrolling(循环展开):减少分支跳转和调度开销。
- Double Buffering(双缓冲):计算当前块时预取下一块,隐藏访存延迟。
- Auto-Tuning(自动调优):自动搜索 block size、tile size、pipeline 深度。
3.5 CUDA 编程模型(理解"手写 kernel 为何快")
CUDA 核心概念:
- Grid(网格):一次 kernel launch 的全体线程块集合。
- Block(线程块):可共享 shared memory 的线程组。
- Thread(线程):最小执行单元。
手写 kernel 价值高的场景:
- 小算子链可融合。
- 特殊 shape(如超长序列)导致通用库不最优。
- 延迟极其敏感链路(在线推理)。
4. AI 框架核心模块:训练引擎的心脏
4.1 Tensor 与计算图
- Tensor(张量) :带
shape/dtype/layout/device/stride的多维数组。 - Computational Graph(计算图):节点是算子,边是张量依赖关系。
- DAG(有向无环图):计算图通常是 DAG,保证依赖可拓扑排序。
动态图与静态图:
- Dynamic Graph(动态图):边执行边建图,调试灵活(如 PyTorch eager)。
- Static Graph(静态图):先建图再编译执行,优化空间大(如 XLA 图模式)。
现代方向:动静结合(开发用动态图,部署时图编译)。
4.2 Autograd(自动微分)到底在做什么
自动微分不是数值差分,也不是纯符号求导,它是"程序级链式法则"。
简化例子:
- 前向:
y = (w*x + b)^2 - 反向:框架自动记录依赖并计算
dy/dw = 2*(w*x+b)*xdy/db = 2*(w*x+b)
你只写 loss.backward(),框架完成拓扑回溯和梯度累加。
关键工程点:
- Activation Checkpointing(激活重计算):省显存,代价是额外计算。
- Mixed Precision(混合精度):常用 BF16/FP16 提升吞吐。
- Loss Scaling(损失缩放):防止低精度下梯度下溢。
4.3 分布式并行:LLM 训练为什么离不开它
单卡常见瓶颈:参数放不下、激活放不下、吞吐不够。
并行策略:
- DP(Data Parallel,数据并行):模型复制到多卡,数据切分。
- TP(Tensor Parallel,张量并行):单层矩阵按维度切到多卡。
- PP(Pipeline Parallel,流水线并行):按层切分到不同设备。
- FSDP/ZeRO(全分片数据并行):参数、梯度、优化器状态分片,显存友好。
类比:
- DP:每家分店做同一菜单,不同顾客。
- TP:一道超大菜由多位厨师同时做不同部分。
- PP:后厨分工流水线,A 备料,B 烹饪,C 装盘。
4.4 集合通信库 NCCL 的地位
- NCCL:NVIDIA 的 GPU 集合通信库。
- 对大规模训练而言,通信效率直接决定扩展效率。
- 优化目标是 Overlap(重叠):反向计算的同时进行梯度通信,减少空等。
5. AI 推理系统与引擎:走向生产的最后一公里
5.1 训练关注"学会",推理关注"服务好"
训练目标:高吞吐 + 收敛精度。
推理目标:低延迟 + 高并发 + 低成本 + 稳定性。
5.2 推理引擎的核心职责
- 模型加载与图优化。
- 请求排队、动态批处理、并发调度。
- KV Cache 管理。
- kernel 选择与执行。
- 监控指标上报(TTFT、TPOT、P95/P99)。
5.3 Prefill 与 Decode 的优化重点不同
- Prefill:计算密集,重点看吞吐和 Tensor Core 利用率。
- Decode:访存+调度密集,重点看单步延迟和 cache 命中。
5.4 模型转换:训练框架与部署环境解耦
常见链路:
- 训练框架导出模型(如 ONNX 或引擎专有格式)。
- 引擎做图优化与算子替换。
- 构建硬件相关执行计划(engine build)。
- 发布到线上并灰度验证。
术语:
- ONNX(Open Neural Network Exchange):跨框架模型交换格式。
- Engine Build(引擎构建):针对目标硬件生成最优执行计划。
5.5 模型轻量化:量化、剪枝、蒸馏
- Quantization(量化):FP16/FP32 -> INT8/INT4,降低显存与带宽开销。
- Pruning(剪枝):删除低贡献连接/通道。
- Knowledge Distillation(知识蒸馏):大模型指导小模型学习。
生活化例子:
- 量化像把照片从 RAW 压成高质量 JPEG,体积显著变小,细节轻微损失。
- 剪枝像裁掉盆景无效枝杈,让营养集中到主干。
- 蒸馏像名师把重点题型浓缩成小册子给学生。
5.6 LLM 推理热点技术
- PagedAttention(分页注意力):把 KV Cache 分页管理,降低碎片。
- Continuous Batching(连续批处理):动态拼批,提升设备利用率。
- Prefix Cache(前缀缓存):复用共享前缀,避免重复 prefill。
- Speculative Decoding(投机解码):小模型草拟,大模型校验提速。
- CUDA Graph:复用固定执行图,降低 kernel launch 开销。
5.7 线上必须看的指标与告警
- 业务层:QPS、成功率、P95/P99 延迟。
- 模型层:TTFT、TPOT、tokens/s。
- 资源层:GPU 利用率、显存水位、KV 命中率。
- 稳定性:OOM 次数、重试率、超时率、节点漂移。
6. 端到端工程实战:一条训练与部署链路
下面是一条常见流程,适合作为团队实施模板。
-
训练侧
- 准备数据与特征。
- 选择并行策略(DP/TP/PP/FSDP)。
- 开启混合精度与梯度检查点。
- 监控 MFU、通信时间占比、loss 曲线。
-
导出与优化侧
- 固化模型版本与权重 checksum。
- 导出 ONNX 或目标引擎格式。
- 跑量化标定(PTQ)或量化感知训练(QAT)。
- 进行 engine build 与 benchmark。
-
推理侧
- 上线前压测:TTFT/TPOT/P99。
- 打开连续批处理与 KV 分页。
- 设置多级降级策略(限流、降精度、短路回复)。
- 灰度发布,监控回归。
-
回路闭环
- 采集线上 bad case。
- 进入下一轮训练与蒸馏。
- 通过 A/B Test 验证收益。
7. 常见误区(给技术分享现场可直接讲)
-
误区:只要换更大 GPU 就一定更快。
事实:如果是 memory-bound 或通信瓶颈,换卡收益有限。
-
误区:量化一定"免费提速"。
事实:精度回退、算子不支持、校准集偏差都可能抵消收益。
-
误区:分布式就是把卡数加倍。
事实:通信拓扑、并行策略、微批大小决定扩展效率。
-
误区:推理优化只看 tokens/s。
事实:线上体验更看 TTFT 与长尾延迟(P99)。
8. 结语
从 model.forward(x) 到 GPU 上数十亿晶体管翻转,AI 系统是一套跨学科工程:
- 体系结构决定物理上限。
- 编译器决定代码能否逼近上限。
- 框架决定训练是否可扩展、可维护。
- 推理系统决定模型能否稳定创造业务价值。
真正稀缺的能力,不只是"会训练模型",而是能把模型在真实生产中 稳定、低成本、高性能 地跑起来。
附录A:训练与推理全链路组件图(数据流/控制流)
附录B:难点知识点"白话例子"速查
- SIMD:像老师一声口令让一排同学同时举手。
- SIMT:像一群实习生执行同一脚本,但每人处理不同文件。
- 算子融合:原本三道工序三次搬运,融合后一次进锅。
- 自动微分:像自动记账,结算时系统自动反推每笔贡献。
- All-Reduce:各组先算小计,再汇总成全员一致结果。
- 张量并行:一张巨型海报裁成几段并行打印再拼接。
- 流水线并行:工厂分站作业,多个产品同时在不同工位流动。
- 量化:视频从 4K 压到 1080p,体积大减、细节小损。
- 剪枝:给果树修枝,去掉弱枝让养分集中。
- 蒸馏:高手给你"压缩版心法",小模型更轻更快。
- KV Cache:开卷考试做了重点索引,后续查找更快。
- PagedAttention:像虚拟内存分页,按页管理缓存避免碎片。
- Continuous Batching:电梯动态拼单上客,不等满员才发车。
- Speculative Decoding:助理先写草稿,专家快速审核定稿。
- Roofline:跑车速度上限由"马力"和"路况限速"共同决定。
附录C:AI 术语词典(按模块整理)
用法建议:演讲时遇到术语,可直接引用本词典的一句话解释。
C.1 硬件与体系结构
| 术语 | 英文全称 | 一句话解释 |
|---|---|---|
| AI Infra | Artificial Intelligence Infrastructure | 支撑 AI 训练与推理的软硬件系统工程。 |
| CPU | Central Processing Unit | 通用处理器,强控制与通用计算。 |
| GPU | Graphics Processing Unit | 高并行吞吐处理器,擅长矩阵运算。 |
| ASIC | Application-Specific Integrated Circuit | 面向特定任务定制的专用芯片。 |
| TPU | Tensor Processing Unit | Google 的 AI 专用加速芯片。 |
| NPU | Neural Processing Unit | 面向神经网络运算的专用单元。 |
| Tensor Core | - | GPU 上用于矩阵乘加的专用计算单元。 |
| FLOPS | Floating Point Operations Per Second | 每秒浮点运算次数,常用算力指标。 |
| Bandwidth | - | 单位时间可传输的数据量。 |
| Roofline | - | 用算力上限和带宽上限分析性能边界的模型。 |
| SIMD | Single Instruction Multiple Data | 一条指令并行处理多个数据元素。 |
| SIMT | Single Instruction Multiple Threads | 同一程序由多个线程并发执行。 |
| Warp | - | GPU 调度的基本线程组。 |
| SM | Streaming Multiprocessor | GPU 的核心计算资源单元。 |
| HBM | High Bandwidth Memory | GPU 高带宽显存。 |
| SRAM | Static Random Access Memory | 片上低延迟存储,常用于缓存。 |
| PCIe | Peripheral Component Interconnect Express | 通用高速总线接口。 |
| NVLink | - | NVIDIA GPU 间高速互联。 |
| RDMA | Remote Direct Memory Access | 跨节点低开销远程内存访问技术。 |
C.2 编译与执行
| 术语 | 英文全称 | 一句话解释 |
|---|---|---|
| Compiler | - | 将模型计算转换为目标硬件可执行程序。 |
| IR | Intermediate Representation | 编译器内部的中间抽象表示。 |
| Frontend | - | 负责解析模型并做图级优化。 |
| Backend | - | 负责硬件相关调度与代码生成。 |
| Constant Folding | - | 编译期预计算常量表达式。 |
| DCE | Dead Code Elimination | 删除不影响结果的无效计算。 |
| Operator Fusion | - | 把多个算子融合为一个更高效算子。 |
| Codegen | Code Generation | 将 IR 翻译为目标代码。 |
| Tiling | - | 按块划分计算以提升局部性。 |
| Vectorization | - | 把标量操作改写为向量并行操作。 |
| Unrolling | Loop Unrolling | 展开循环减少跳转开销。 |
| Auto-Tuning | - | 自动搜索最佳 kernel 参数配置。 |
| CUDA | Compute Unified Device Architecture | NVIDIA 的 GPU 编程平台。 |
| Kernel | - | 在 GPU 上执行的函数。 |
| PTX | Parallel Thread Execution | NVIDIA 的中间指令表示。 |
| cuBLAS | CUDA Basic Linear Algebra Subprograms | 高性能线性代数库。 |
| cuDNN | CUDA Deep Neural Network library | 深度学习算子加速库。 |
C.3 框架与训练
| 术语 | 英文全称 | 一句话解释 |
|---|---|---|
| Tensor | - | 多维数组,AI 数据基本形态。 |
| Shape | - | 张量各维度大小。 |
| DType | Data Type | 张量元素精度类型。 |
| Stride | - | 张量在内存中的步长布局信息。 |
| Computational Graph | - | 表示计算依赖关系的图结构。 |
| DAG | Directed Acyclic Graph | 有向无环图,便于拓扑执行。 |
| Dynamic Graph | - | 运行时构图,调试灵活。 |
| Static Graph | - | 先构图再执行,优化空间更大。 |
| Autograd | Automatic Differentiation | 通过链式法则自动计算梯度。 |
| Forward | Forward Pass | 从输入到输出的正向计算。 |
| Backward | Backward Pass | 从损失反向传播梯度。 |
| Gradient | - | 参数对损失的导数信息。 |
| Optimizer | - | 根据梯度更新参数的算法。 |
| Mixed Precision | - | 用低精度计算提升吞吐、节省显存。 |
| Loss Scaling | - | 对 loss 放缩以避免低精度梯度下溢。 |
| DP/DDP | Data Parallel / Distributed Data Parallel | 多卡复制模型、切分数据并同步梯度。 |
| TP | Tensor Parallel | 将单层张量运算切分到多卡。 |
| PP | Pipeline Parallel | 将不同层分配到不同设备流水执行。 |
| FSDP | Fully Sharded Data Parallel | 参数与状态全分片的数据并行策略。 |
| ZeRO | Zero Redundancy Optimizer | 降低并行训练冗余内存占用的技术。 |
| NCCL | NVIDIA Collective Communications Library | GPU 高性能集合通信库。 |
| All-Reduce | - | 聚合并广播,常用于梯度同步。 |
| All-Gather | - | 汇聚各卡分片数据到每卡。 |
| Reduce-Scatter | - | 先归约再分发的通信原语。 |
C.4 推理与服务
| 术语 | 英文全称 | 一句话解释 |
|---|---|---|
| Inference | - | 使用训练好的模型进行预测/生成。 |
| Latency | - | 单次请求延迟。 |
| Throughput | - | 单位时间处理能力。 |
| QPS | Queries Per Second | 每秒请求数。 |
| TTFT | Time To First Token | 首 token 返回时间。 |
| TPOT | Time Per Output Token | 平均每个输出 token 的耗时。 |
| P95/P99 | - | 95/99 分位延迟,衡量长尾性能。 |
| ONNX | Open Neural Network Exchange | 跨框架模型表示与交换格式。 |
| TensorRT | - | NVIDIA 推理优化与执行引擎。 |
| vLLM | - | 面向 LLM 的高吞吐推理服务框架。 |
| ORT | ONNX Runtime | ONNX 模型运行时与优化执行引擎。 |
| Prefill | - | 处理输入上下文的首轮计算阶段。 |
| Decode | - | 逐 token 生成阶段。 |
| KV Cache | Key-Value Cache | 缓存历史注意力状态以复用计算。 |
| PagedAttention | - | 分页管理 KV Cache 的注意力实现。 |
| Continuous Batching | - | 动态接入请求并持续拼批执行。 |
| Prefix Cache | - | 复用公共提示词前缀的缓存机制。 |
| Speculative Decoding | - | 小模型草拟、大模型校验的加速解码。 |
| Quantization | - | 用低比特表示参数/激活以提速降耗。 |
| PTQ | Post-Training Quantization | 训练后量化,无需完整再训练。 |
| QAT | Quantization-Aware Training | 训练中模拟量化误差以保精度。 |
| INT8/INT4 | - | 8 位/4 位整型量化精度。 |
| Pruning | - | 删除冗余参数连接以压缩模型。 |
| Distillation | Knowledge Distillation | 大模型指导小模型训练。 |
| CUDA Graph | - | 录制并复用 GPU 执行图以降低启动开销。 |