Chapter 1: 硬件、数学与系统 - 完整导学
🎯 本章概览
本章包含 10 个讨论题,覆盖大模型的硬件基础、数学推导和系统架构。这是整个仓库的理论基石,帮助你建立对大模型底层原理的完整认知。
为什么需要学习硬件与系统?
在动手写代码之前,理解硬件和系统的底层原理至关重要:
- 显存计算:如何估算模型加载需要多少显存?为什么 7B 模型需要 14GB?
- 算力推导:训练一个 GPT-3 需要多少 FLOPs?如何计算训练时间?
- 性能瓶颈:为什么 Attention 是 Memory Bound?如何优化?
- 分布式训练:ZeRO、TP、PP 如何节省显存?通信拓扑如何影响性能?
本章的价值:
- 面试必考:参数量计算、FLOPs 推导、显存估算
- 工程决策:选择合适的 GPU、优化策略、分布式方案
- 深度理解:为什么 FlashAttention 快?为什么需要混合精度?
📚 学习组划分
本章按主题分为 3 个学习组:
| 学习组 | 题目范围 | 主题 | 难度 |
|---|---|---|---|
| 1A: 基础数学 | 01-02 | 数据格式、参数量与 FLOPs | Easy-Medium |
| 1B: 硬件架构 | 03-06 | GPU 架构、显存优化、通信拓扑 | Medium-Hard |
| 1C: 系统与编译 | 07-10 | 异构调度、编程模型、AI 编译器 | Hard |
📚 推荐学习路径
路径 1:快速入门
适合: 准备面试、快速建立基础认知
学习顺序:
- 1A: 基础数学(01-02 题)→ 掌握参数量和 FLOPs 计算
- 1B: 硬件架构(03-04 题)→ 理解 GPU 架构和 Attention 优化
核心收获: 能够回答面试中的经典问题(参数量、显存、FLOPs)
路径 2:系统学习
适合: 深入理解硬件和系统,做出正确的工程决策
学习顺序:
- 1A: 基础数学 → 建立数学基础
- 1B: 硬件架构 → 理解硬件瓶颈和优化策略
- 1C: 系统与编译 → 掌握系统级优化和编译原理
核心收获: 能够进行性能分析、选择合适的硬件和优化方案
路径 3:专项突破
专注面试准备:
- 1A(01-02)→ 1B(03、06)
专注性能优化:
- 1B(03-04)→ 1C(07-08)
专注分布式训练:
- 1B(05-06)→ 第二章(23-25)
📗 1A: 基础数学(01-02)
🎯 学习目标
- ✅ 理解不同数据格式(FP32、FP16、BF16、INT8)的区别
- ✅ 掌握 Transformer 参数量的计算方法
- ✅ 能够推导训练和推理的 FLOPs
- ✅ 理解混合精度训练的原理
📚 题目列表
| 题号 | 题目 | 难度 | 核心知识点 |
|---|---|---|---|
| 01 | Data Types and Precision | Easy | FP32/FP16/BF16/INT8、混合精度 |
| 02 | LLM Params and FLOPs | Medium | 参数量计算、FLOPs 推导 |
📖 详细题目指南
01: Data Types and Precision
学习重点:
- 数据格式占用:FP32(4 Bytes)、FP16(2 Bytes)、INT8(1 Byte)
- 位分布差异:FP16(5 位指数 + 10 位尾数)vs BF16(8 位指数 + 7 位尾数)
- 混合精度训练:为什么需要 FP32 主权重?如何避免梯度下溢?
- FP8 新趋势:H100 的 FP8 Tensor Core
面试高频问题:
- Q: 7B 模型用 FP16 加载需要多少显存?
- A: 7B × 2 Bytes = 14 GB(纯权重,不含 KV Cache 和激活值)
实用价值:
- 快速估算模型显存占用
- 理解量化的原理和收益
- 选择合适的数据格式(训练用 BF16,推理用 INT8)
02: LLM Params and FLOPs
学习重点:
- 参数量分解:Embedding + Attention + FFN
- FLOPs 推导:前向推理 vs 完整训练(前向 + 反向 + 优化器)
- Chinchilla 定律:最优的模型大小和数据量比例
核心公式:
- 参数量:
2Vd + L(12d² + 13d)(V=词表,d=隐藏维度,L=层数) - 训练 FLOPs:
6 × Params × Tokens(近似公式) - 推理 FLOPs:
2 × Params × Tokens
面试高频问题:
- Q: LLaMA-7B 的参数量是如何分布的?
- A: Embedding(32K × 4096 × 2)+ 32 层 Transformer(每层约 200M)
实用价值:
- 估算训练时间和成本
- 理解模型架构的参数分布
- 优化模型设计(如使用 GQA 减少 KV 参数)
📗 1B: 硬件架构(03-06)
🎯 学习目标
- ✅ 理解 GPU 的内存层次(HBM、L2、SRAM、寄存器)
- ✅ 掌握 Attention 的显存瓶颈和优化方法
- ✅ 理解分布式通信拓扑(NVLink、PCIe、InfiniBand)
- ✅ 能够计算 ZeRO 的显存节省
📚 题目列表
| 题号 | 题目 | 难度 | 核心知识点 |
|---|---|---|---|
| 03 | GPU Architecture and Memory | Medium | GPU 架构、内存层次、带宽 |
| 04 | Attention Memory Optimization | Hard | Attention 显存、FlashAttention 原理 |
| 05 | Communication Topologies | Medium | NVLink、PCIe、InfiniBand、通信带宽 |
| 06 | VRAM Calculation and ZeRO | Hard | 显存计算、ZeRO-1/2/3、梯度累积 |
核心概念解析
GPU 内存层次(03)
从快到慢:
- 寄存器(Register):最快,但容量极小(每个线程几 KB)
- 共享内存(Shared Memory / SRAM):快,容量小(A100: 164KB/SM)
- L2 缓存:中等速度(A100: 40MB)
- 全局内存(HBM):慢,但容量大(A100: 80GB)
关键指标:
- HBM 带宽:A100(1.5 TB/s)、H100(3.35 TB/s)
- 计算吞吐:A100(312 TFLOPS FP16)、H100(989 TFLOPS FP16)
- Memory Bound:当带宽成为瓶颈时,计算单元空闲
FlashAttention 原理(04)
标准 Attention 的问题:
- 显存占用:O(N²),存储完整的 Attention 矩阵
- 128K 序列:需要 128K × 128K × 2 Bytes = 32 GB(单个矩阵!)
FlashAttention 的解决方案:
- Tiling(分块):将 Q、K、V 分块处理
- Online Softmax:增量更新 Softmax 的 max 和 sum
- SRAM 优化:在 Shared Memory 中缓存数据,减少 HBM 访问
性能提升:
- 显存:O(N²) → O(N)
- 速度:2-4x 加速
- 支持序列长度:4K → 128K+
ZeRO 显存优化(06)
传统 DDP 的显存占用:
- 模型参数:2Φ(FP16)
- 梯度:2Φ
- 优化器状态:12Φ(FP32 参数 + 动量 + 方差)
- 总计:16Φ
ZeRO 的三个级别:
| 方案 | 切分内容 | 显存占用 | 通信开销 |
|---|---|---|---|
| ZeRO-1 | 优化器状态 | 4Φ + 12Φ/N | 与 DDP 相同 |
| ZeRO-2 | 优化器状态 + 梯度 | 2Φ + 14Φ/N | 与 DDP 相同 |
| ZeRO-3 | 优化器状态 + 梯度 + 参数 | 16Φ/N | 增加 50% |
实用价值:
- ZeRO-1:8 卡训练,优化器显存节省 87.5%
- ZeRO-3:支持超大模型(175B+)训练
📗 1C: 系统与编译(07-10)
🎯 学习目标
- ✅ 理解 CPU-GPU 异构调度
- ✅ 掌握 CUDA 和 Triton 的编程模型
- ✅ 了解 AI 编译器的优化技术
- ✅ 认识国产 AI 芯片的生态
📚 题目列表
| 题号 | 题目 | 难度 | 核心知识点 |
|---|---|---|---|
| 07 | CPU GPU Heterogeneous Scheduling | Medium | 异构计算、数据传输、Stream |
| 08 | Programming Models CUDA Triton | Hard | CUDA、Triton、编程范式 |
| 09 | AI Compilers and Graph Optimization | Hard | 计算图优化、算子融合、XLA |
| 10 | Domestic AI Chips Overview | Medium | 国产芯片、生态、适配 |
核心概念解析
CUDA vs Triton(08)
CUDA C++:
- 优势:终极性能,完全控制
- 劣势:学习曲线陡峭,代码复杂
- 适用场景:极致优化(如 FlashAttention V3)
Triton:
- 优势:Python 语法,自动优化,易于调试
- 劣势:性能约为 CUDA 的 80-95%
- 适用场景:常规融合算子(RMSNorm、SwiGLU)
技术选型原则:
- 先用 PyTorch 验证正确性
- 用 Profiler 定位瓶颈
- 瓶颈占比 < 10%:不优化
- 瓶颈占比 10-20%:用 Triton
- 瓶颈占比 > 20%:考虑 CUDA
AI 编译器优化(09)
核心优化技术:
- 算子融合(Operator Fusion):减少内存往返
- 内存优化(Memory Planning):复用缓冲区
- 并行化(Parallelization):数据并行、模型并行
- 自动调优(Auto-tuning):搜索最优配置
主流编译器:
- XLA:TensorFlow 的编译器
- TorchScript / TorchInductor:PyTorch 的编译器
- TVM:通用深度学习编译器
- MLIR:多层次中间表示
💡 学习建议
学习方法
- 理论与实践结合:第一章学理论,第二章写代码验证
- 动手计算:每个公式都自己推导一遍
- 对比验证:用实际模型验证你的计算(如 LLaMA-7B)
- 建立直觉:记住关键数字(A100 带宽、FLOPs、显存)
关键数字速查表
GPU 性能(A100 80GB):
- HBM 带宽:1.5 TB/s
- FP16 算力:312 TFLOPS
- FP32 算力:19.5 TFLOPS
- Shared Memory:164 KB/SM
数据格式:
- FP32:4 Bytes
- FP16/BF16:2 Bytes
- INT8:1 Byte
- INT4:0.5 Byte
显存占用(混合精度训练):
- 模型参数:2Φ
- 梯度:2Φ
- 优化器状态:12Φ
- 总计:16Φ
常见问题
Q: 第一章没有代码,如何学习?
- A: 第一章是理论基础,建议配合第二章的代码实践。例如,学完 01 题后,可以做第二章的 20 题(量化)
Q: 数学推导太复杂,可以跳过吗?
- A: 不建议跳过。参数量和 FLOPs 计算是面试必考题,也是理解模型架构的基础
Q: 如何验证自己的计算是否正确?
- A: 用实际模型验证。例如,计算 LLaMA-7B 的参数量,然后用
model.parameters()验证
Q: 第一章的知识在实际工作中有用吗?
- A: 非常有用!选择 GPU、估算训练成本、优化显存占用、设计分布式方案都需要这些知识
📝 学习检查清单
完成本章学习后,你应该能够:
1A: 基础数学
- [ ] 快速计算模型的显存占用(给定参数量和数据格式)
- [ ] 推导 Transformer 的参数量公式
- [ ] 计算训练和推理的 FLOPs
- [ ] 解释混合精度训练的原理
1B: 硬件架构
- [ ] 画出 GPU 的内存层次图
- [ ] 解释为什么 Attention 是 Memory Bound
- [ ] 说明 FlashAttention 如何优化显存和速度
- [ ] 计算 ZeRO-1/2/3 的显存节省
1C: 系统与编译
- [ ] 理解 CPU-GPU 数据传输的开销
- [ ] 在 PyTorch、Triton、CUDA 之间做技术选型
- [ ] 说明 AI 编译器的核心优化技术
- [ ] 了解国产 AI 芯片的生态
🔗 与其他章节的联系
第一章 → 第二章:
- 01 题(数据格式)→ 20 题(量化)
- 02 题(参数量)→ 05-08 题(模型架构)
- 04 题(Attention 优化)→ 04 题(Attention 实现)
- 06 题(ZeRO)→ 23 题(ZeRO 模拟)
第一章 → 第三章:
- 03 题(GPU 架构)→ 01-05 题(Triton 基础)
- 04 题(FlashAttention)→ 08 题(Triton Flash Attention)
- 08 题(编程模型)→ 18-19 题(CUDA 编程)
🎓 结语
第一章是整个仓库的理论基石,虽然没有代码,但这些知识是理解后续章节的关键。
学习建议:
- 不要死记硬背:理解原理,推导公式
- 动手计算:每个公式都自己算一遍
- 结合实践:学完理论立即做第二章的相关题目
- 建立直觉:记住关键数字,快速估算
记住:
- 理论是实践的基础,实践是理论的验证
- 第一章的知识会在面试和工作中反复用到
- 理解硬件和系统,才能写出高性能的代码
祝学习愉快!🚀
