CUDA(GPU 编程)
CUDA 是 NVIDIA 的 GPU 并行计算 API。深度学习几乎完全依赖 CUDA(虽然 AMD ROCm 和 Apple Metal 在追赶,但生态规模差一个数量级)。
为什么 GPU 适合深度学习
- 并行度高:一颗 A100 有 6912 个 CUDA core,可同时跑数千个线程。
- 矩阵乘法极快:Tensor Core 一拍算 16x16x16 的 FP16 matmul。
- 内存带宽高:HBM3 在 A100 上达 2 TB/s,比 CPU DDR5 高 20 倍。
- 生态成熟:PyTorch / TensorFlow / JAX 都原生支持 CUDA。
主流 GPU 规格
| 型号 | 显存 | FP16 TFLOPS | 适用 |
|---|---|---|---|
| H100 | 80 GB | 989 | 训练 / 推理旗舰 |
| A100 | 40/80 GB | 312 | 主力训练 |
| L40S | 48 GB | 366 | 推理专用 |
| RTX 4090 | 24 GB | 165 | 消费级 / 小模型 |
| RTX 5090 | 32 GB | 209 | 新消费级 |
| B200 | 192 GB | 2250 | 下一代旗舰 |
软件栈
- CUDA Toolkit:编译器(nvcc)、runtime、数学库(cuBLAS、cuDNN)。
- cuDNN:深度学习原语(conv、attention、layer norm)的高性能实现。
- NCCL:多 GPU / 多机通信(AllReduce)。
- TensorRT:推理优化器(kernel fusion、量化、图优化)。
- Triton:NVIDIA 的 Python-like GPU 编程语言,PyTorch 2.0 集成。
LLM 训练为什么吃 GPU
训练 70B 模型约需 ~1500 张 H100 跑 1 个月。光 forward + backward 每个 token 就要数十次矩阵乘。CPU 完全跑不动。
LLM 推理为什么也吃 GPU
- 矩阵乘:decode 阶段每个 token 都要算一次 attention / FFN 的 matmul。
- 大显存:70B FP16 模型 140 GB,KV cache 还要再吃几十 GB。
- 小 batch 延迟敏感:单用户流式输出,GPU 的低延迟优势无可替代。
AMD / Apple / Intel 的尝试
- AMD ROCm:CUDA 的开源替代,HIP 翻译层。但生态落后,软硬件问题多。
- Apple Metal / MLX:Apple Silicon 统一内存有优势(不需要 CPU↔GPU 拷贝),性能不错 但算力上限低(M3 Max 顶配 ~26 TFLOPS,比 H100 弱 40x)。
- Intel Gaudi / oneAPI:训练可与 A100 掰手腕,生态弱。
实战建议
- NVIDIA 仍是首选:生态最成熟,vLLM / Triton / Megatron-LM 都默认 NVIDIA。
- CUDA 版本对齐:PyTorch / vLLM 各自要求的 CUDA 版本不同,混用易踩坑。
- 显存不够的兜底:CPU offload、量化(INT4/INT8)、ZeRO-3、DeepSpeed。
- 监控 GPU 利用率:
nvidia-smi dmon或 DCGM,避免 GPU 空转浪费钱。