GPU 与 TPU
对应课程 Lecture 5:GPUs, TPUs(Tatsu)
要优化训练,得先理解硬件。这一讲回答:GPU 为什么擅长深度学习?它的性能极限在哪?
GPU 的组织结构
以 NVIDIA H100 为例,一块 GPU 内部大致是:
text
GPU
├── 数十个 SM(流式多处理器) ← "CPU 核心们"
│ ├── 张量核心(Tensor Core) ← 专做矩阵乘法的单位
│ ├── FP32/FP64 计算单元
│ └── 寄存器 + 共享内存(shared memory, ~228KB) ← SM 内的高速缓存
├── HBM 显存(~80GB, 带宽 ~3TB/s) ← 主显存
└── NVLink 卡间互连(~900GB/s) ← 和别的 GPU 说话三层存储的速度天差地别:寄存器最快、共享内存次之、HBM 最慢(差两个数量级)。高性能内核的本质就是让数据尽量待在离计算单元近的地方。
关键硬件特性
- 张量核心(Tensor Core):一条指令完成一个小矩阵块的乘加(如
),是 GPU 算力(1000 TFLOP/s bf16)的主要来源。普通 CUDA 核心的 FP32 算力只有它的几十分之一。 - SIMT 执行模型:线程按 warp(线程束,32 线程) 为单位调度,一个 warp 里所有线程执行同一条指令。如果同一 warp 内线程走了不同分支(分支发散),性能会掉。
- 占用率(occupancy):SM 上同时驻留的 warp 数。驻留多才能在部分 warp 等显存时,让其他 warp 继续计算——用并行性掩盖访存延迟。
一个容易犯的错误
把小矩阵乘法交给 GPU,可能反而比 CPU 慢:kernel 启动开销(几微秒)+ 数据搬运时间,远超那点计算量。GPU 的哲学是大批量、少启动、算得密。
Roofline:性能极限在哪里
前面资源估算的结论在这里落到实处。对每个操作问两个数:
- 需要多少 FLOPs?(计算时间 = FLOPs ÷ 峰值算力)
- 需要搬运多少字节?(访存时间 = 字节 ÷ 带宽)
实际时间 ≈ 两者取大。由此得出经验:
| 操作 | 运算强度 | 瓶颈 |
|---|---|---|
| 大批次矩阵乘法 | 计算受限,利用率可达 60~80% | |
| softmax、激活、残差加 | ≈ 1 | 带宽受限,利用率 1% 量级 |
| 小批次解码(权重全读一遍) | 低 | 带宽受限 |
Transformer 训练中,矩阵乘法贡献了几乎全部 FLOPs,所以优化目标是让矩阵乘法之外的部分“不拖后腿”——这就是算子融合和手写内核的动机(下一讲)。
通信:多卡系统的新维度
单卡性能之外,集群里还有通信:
- PCIe:通用总线,约 64 GB/s,最慢;
- NVLink:NVIDIA 私有互连,H100 上约 900 GB/s,同一节点内首选;
- InfiniBand / 以太网:跨节点,200~400 Gbps 量级。
经验法则:算一算每次同步要搬多少数据,除以链路带宽。如果通信时间占训练步时间的比例高,算法再优也快不起来。并行策略的设计核心就是最小化、掩盖通信。
TPU:另一条技术路线
Google 的 TPU(Tensor Processing Unit) 是专为矩阵计算设计的 ASIC:
- 核心是 MXU 脉动阵列(systolic array),如
的乘加单元网格,数据像流水一样在阵列中“脉动”传递,一个数据被读入后参与多次计算,天然高运算强度​; - 结构规整,编译器(XLA)驱动,不需要手写 CUDA 那样的底层代码;
- 大模型时代 TPU 训练了 Google 系的多数旗舰模型(PaLM、Gemini 等),latest TPU 的 bf16 集群算力与顶级 GPU 集群在同一量级。
GPU vs TPU 的取舍:GPU 生态成熟、灵活、可手写内核;TPU 软件栈统一、集群扩展性好,但仅通过云租用。理解它们共享的 roofline 逻辑,比记住产品参数更重要。
小结
- GPU = 大量 SM + 张量核心 + 多层存储;性能来自并行性掩盖延迟、数据靠近计算。
- 用 roofline 判断每个操作的瓶颈:矩阵乘法计算受限,逐元素操作带宽受限。
- 多卡系统里,通信带宽是第三种资源,与算力、显存并列。
- TPU 用脉动阵列走规整化路线,与 GPU 在大模型训练中并驾齐驱。