Skip to content

Chapter 1: 硬件、数学与系统 - 完整导学

🎯 本章概览

本章包含 10 个讨论题,覆盖大模型的硬件基础、数学推导和系统架构。这是整个仓库的理论基石,帮助你建立对大模型底层原理的完整认知。

为什么需要学习硬件与系统?

在动手写代码之前,理解硬件和系统的底层原理至关重要:

  • 显存计算:如何估算模型加载需要多少显存?为什么 7B 模型需要 14GB?
  • 算力推导:训练一个 GPT-3 需要多少 FLOPs?如何计算训练时间?
  • 性能瓶颈:为什么 Attention 是 Memory Bound?如何优化?
  • 分布式训练:ZeRO、TP、PP 如何节省显存?通信拓扑如何影响性能?

本章的价值:

  • 面试必考:参数量计算、FLOPs 推导、显存估算
  • 工程决策:选择合适的 GPU、优化策略、分布式方案
  • 深度理解:为什么 FlashAttention 快?为什么需要混合精度?

📚 学习组划分

本章按主题分为 3 个学习组:

学习组题目范围主题难度
1A: 基础数学01-02数据格式、参数量与 FLOPsEasy-Medium
1B: 硬件架构03-06GPU 架构、显存优化、通信拓扑Medium-Hard
1C: 系统与编译07-10异构调度、编程模型、AI 编译器Hard

📚 推荐学习路径

路径 1:快速入门

适合: 准备面试、快速建立基础认知

学习顺序:

  1. 1A: 基础数学(01-02 题)→ 掌握参数量和 FLOPs 计算
  2. 1B: 硬件架构(03-04 题)→ 理解 GPU 架构和 Attention 优化

核心收获: 能够回答面试中的经典问题(参数量、显存、FLOPs)


路径 2:系统学习

适合: 深入理解硬件和系统,做出正确的工程决策

学习顺序:

  1. 1A: 基础数学 → 建立数学基础
  2. 1B: 硬件架构 → 理解硬件瓶颈和优化策略
  3. 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
  • ✅ 理解混合精度训练的原理

📚 题目列表

题号题目难度核心知识点
01Data Types and PrecisionEasyFP32/FP16/BF16/INT8、混合精度
02LLM Params and FLOPsMedium参数量计算、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=层数)
  • 训练 FLOPs6 × Params × Tokens(近似公式)
  • 推理 FLOPs2 × 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 的显存节省

📚 题目列表

题号题目难度核心知识点
03GPU Architecture and MemoryMediumGPU 架构、内存层次、带宽
04Attention Memory OptimizationHardAttention 显存、FlashAttention 原理
05Communication TopologiesMediumNVLink、PCIe、InfiniBand、通信带宽
06VRAM Calculation and ZeROHard显存计算、ZeRO-1/2/3、梯度累积

核心概念解析

GPU 内存层次(03)

从快到慢:

  1. 寄存器(Register):最快,但容量极小(每个线程几 KB)
  2. 共享内存(Shared Memory / SRAM):快,容量小(A100: 164KB/SM)
  3. L2 缓存:中等速度(A100: 40MB)
  4. 全局内存(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 的解决方案:

  1. Tiling(分块):将 Q、K、V 分块处理
  2. Online Softmax:增量更新 Softmax 的 max 和 sum
  3. 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 芯片的生态

📚 题目列表

题号题目难度核心知识点
07CPU GPU Heterogeneous SchedulingMedium异构计算、数据传输、Stream
08Programming Models CUDA TritonHardCUDA、Triton、编程范式
09AI Compilers and Graph OptimizationHard计算图优化、算子融合、XLA
10Domestic AI Chips OverviewMedium国产芯片、生态、适配

核心概念解析

CUDA vs Triton(08)

CUDA C++:

  • 优势:终极性能,完全控制
  • 劣势:学习曲线陡峭,代码复杂
  • 适用场景:极致优化(如 FlashAttention V3)

Triton:

  • 优势:Python 语法,自动优化,易于调试
  • 劣势:性能约为 CUDA 的 80-95%
  • 适用场景:常规融合算子(RMSNorm、SwiGLU)

技术选型原则:

  1. 先用 PyTorch 验证正确性
  2. 用 Profiler 定位瓶颈
  3. 瓶颈占比 < 10%:不优化
  4. 瓶颈占比 10-20%:用 Triton
  5. 瓶颈占比 > 20%:考虑 CUDA

AI 编译器优化(09)

核心优化技术:

  1. 算子融合(Operator Fusion):减少内存往返
  2. 内存优化(Memory Planning):复用缓冲区
  3. 并行化(Parallelization):数据并行、模型并行
  4. 自动调优(Auto-tuning):搜索最优配置

主流编译器:

  • XLA:TensorFlow 的编译器
  • TorchScript / TorchInductor:PyTorch 的编译器
  • TVM:通用深度学习编译器
  • MLIR:多层次中间表示

💡 学习建议

学习方法

  1. 理论与实践结合:第一章学理论,第二章写代码验证
  2. 动手计算:每个公式都自己推导一遍
  3. 对比验证:用实际模型验证你的计算(如 LLaMA-7B)
  4. 建立直觉:记住关键数字(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 编程)

🎓 结语

第一章是整个仓库的理论基石,虽然没有代码,但这些知识是理解后续章节的关键。

学习建议:

  • 不要死记硬背:理解原理,推导公式
  • 动手计算:每个公式都自己算一遍
  • 结合实践:学完理论立即做第二章的相关题目
  • 建立直觉:记住关键数字,快速估算

记住:

  • 理论是实践的基础,实践是理论的验证
  • 第一章的知识会在面试和工作中反复用到
  • 理解硬件和系统,才能写出高性能的代码

祝学习愉快!🚀

Released under the MIT License.