第 1 章
AI 为什么需要 GPU
考试本身的介绍(题量、费用、三个领域的权重)在 AWS 与 NVIDIA 认证概览 里写过,这里直接从内容开始。
整个合集按"一块 GPU → 一座 AI 数据中心"的顺序往外扩。第一步先回答最底层的问题:AI 到底在算什么,为什么这种计算偏偏适合 GPU。
AI、机器学习、深度学习
三个词是一层套一层的关系:
- 人工智能(AI):最大的圈,泛指让机器完成原本需要人类智能的任务,比如识别、推理、决策、对话。早期的专家系统靠人手写规则,也算 AI。
- 机器学习(ML):AI 的一个子集。不再由人写规则,而是让程序从数据里学出规律。垃圾邮件分类、房价预测、推荐系统都是典型的机器学习。
- 深度学习(DL):机器学习的一个子集,用多层神经网络学习。和传统机器学习最大的区别是特征也由模型自己学:传统方法要人先设计特征(比如"邮件里出现了几次'免费'"),深度学习直接吃原始数据(像素、文字、声音),在层层网络里自己提炼特征。
生成式 AI 和大语言模型(LLM)又是深度学习里的一类,基本都建立在 Transformer 架构上。
| 传统编程 | 传统机器学习 | 深度学习 | |
|---|---|---|---|
| 规则从哪来 | 人写 | 从数据学 | 从数据学 |
| 特征从哪来 | 人定 | 人设计 | 模型自己学 |
| 需要的数据量 | 不需要 | 中等 | 大量 |
| 需要的算力 | 低 | 中等,CPU 通常够用 | 高,基本离不开 GPU |
深度学习里常见的几种网络结构:
| 网络 | 擅长 | 典型应用 |
|---|---|---|
| CNN(卷积神经网络) | 提取图像的局部特征 | 图像分类、目标检测、医学影像 |
| RNN / LSTM | 按顺序逐个处理序列 | 早期的语音识别和机器翻译,现在大多被 Transformer 取代 |
| Transformer | 用注意力机制同时看整段序列,训练可以并行 | 大语言模型、机器翻译,也用到了图像上(ViT) |
| GAN(生成对抗网络) | 生成器和判别器互相博弈 | 图像生成、风格迁移 |
| 扩散模型 | 从噪声出发一步步去噪 | 文生图、视频生成 |
机器学习按学习方式还可以分几类,考纲不深究,知道名字即可:
- 监督学习:数据带标签(这张图是猫),学输入到标签的映射。分类、回归都属于这类。
- 无监督学习:数据没标签,让模型自己找结构,比如聚类、降维。
- 强化学习:模型在环境里试错,按奖励调整策略。下棋、机器人控制、LLM 的 RLHF 对齐阶段都用到。
- 自监督学习:从数据本身造标签,比如遮住句子里的一个词让模型猜。大语言模型的预训练就是这么做的,所以才能用上海量无标注文本。
AI 这几年为什么突然加速
深度学习的基本思想几十年前就有了,真正爆发是 2012 年以后。通常归结为几个条件同时成熟:
- 算力。2012 年 AlexNet 用两块 GTX 580 训练,在 ImageNet 比赛上大幅领先,GPU 训练神经网络从此成为主流。之后 GPU 每一代都专门为 AI 加硬件单元(后面讲的 Tensor Core),单卡 AI 算力每一代都成倍提升。
- 数据。互联网积累了海量的图片、文本、视频,ImageNet 这样的大规模标注数据集让训练深度模型成为可能。
- 算法。2017 年的 Transformer 让模型可以高效并行训练,而且规模越大效果越好(scaling law),直接催生了大语言模型。
- 软件生态。CUDA 在 2006 年推出,让 GPU 能做通用计算;之后 PyTorch、TensorFlow 这些框架把 GPU 编程的门槛降到了"写 Python",开源模型和社区又让新方法传播得很快。
- 获取门槛降低。云厂商按小时出租 GPU,小团队不用自建机房也能训练模型。开源和商用的预训练基础模型越来越多,企业不用从头训练,拿来微调或者直接调用 API 就能用上。
这几条互相推动:更多算力让更大的模型可行,更大的模型效果更好,吸引更多投资去造更多算力。
AI 用在哪些行业
| 行业 | 典型用例 |
|---|---|
| 医疗与生命科学 | 医学影像辅助诊断、药物发现、基因组分析 |
| 金融 | 欺诈检测、风险评估、智能客服 |
| 零售与电商 | 推荐系统、需求预测、商品识别 |
| 制造 | 视觉质检、预测性维护、数字孪生 |
| 汽车与交通 | 自动驾驶、智能交通 |
| 电信 | 网络优化、故障预测 |
| 通用办公 | 大模型对话、代码助手、文档总结、语音识别与合成 |
| 科研 | 天气与气候预测、蛋白质结构预测 |
NVIDIA 针对不少行业做了专门的软件平台(医疗的 Clara、自动驾驶的 DRIVE、机器人的 Isaac 等),放在第 2 章一起看。
训练和推理
一个模型的一生分两段:训练是让模型从数据里学出参数,推理是用学好的模型处理新输入。两者对硬件的要求差别很大。
训练在算什么
训练一遍一遍地重复三步:
- 前向传播:输入数据,按当前参数算出预测结果;
- 反向传播:比较预测和正确答案,算出每个参数该往哪个方向调(梯度);
- 更新参数:优化器按梯度更新参数。
整个数据集可能要过好几遍(epoch),大模型训练动辄几周。训练关心的是吞吐,也就是单位时间内能处理多少数据,以及多久能把模型训完。
训练吃显存。除了模型参数本身,还要存梯度、优化器状态和中间激活值。用 Adam 优化器做混合精度训练时,一个粗略的估算是每个参数约 16 字节(半精度参数 2 + 梯度 2 + FP32 主参数 4 + Adam 的两份状态各 4),还没算激活值。按这个估算,一个 70 亿参数(7B)的模型全参数训练光这部分就要 112 GB,一张 80 GB 的卡装不下,必须多卡分摊。
推理在算什么
推理只做前向传播,不需要梯度和优化器状态,显存主要花在模型参数上:7B 模型用 FP16 存储约 14 GB,70B 模型约 140 GB,后者一张 80 GB 的卡也放不下。
推理关心的是延迟(一个请求多久返回)、吞吐(每秒能处理多少请求或生成多少 token)和成本(每个请求花多少钱)。常用手段:
- 量化:把参数从 FP16 压到 INT8、FP8 甚至 FP4,显存减半或更多,速度更快,精度略有损失;
- 批处理:把多个请求拼成一批一起算,提高 GPU 利用率,代价是单个请求要等凑批;
- 横向扩展:多开几个模型副本分担请求。
大语言模型的推理还分两个阶段:prefill 一次性处理整段输入,计算密集;decode 一个 token 一个 token 地往外生成,每步都要把全部参数从显存读一遍,瓶颈在显存带宽而不是算力。所以大模型推理卡看重显存容量和带宽。
对照
| 训练 | 推理 | |
|---|---|---|
| 计算 | 前向 + 反向 + 更新,反复多轮 | 只有前向 |
| 关心什么 | 吞吐、训完要多久 | 延迟、吞吐、单次成本 |
| 显存 | 参数 + 梯度 + 优化器状态 + 激活,远大于模型本身 | 主要是参数,外加 KV cache 等 |
| 常用精度 | BF16、FP8 混合精度 | FP16、FP8、INT8、FP4 |
| 规模 | 大模型要多卡、多机协同 | 小模型单卡甚至一张卡的一部分(MIG)就够;大模型也要多卡 |
| 运行方式 | 批处理作业,跑完就结束 | 长期在线服务,随请求量伸缩 |
这张表后面会反复用到:第 3 章按用途选硬件、第 6 章选调度方式、第 7 章选 GPU 共享方式,出发点都是训练和推理的这些差别。
CPU 和 GPU 的架构差别
设计目标不同
CPU 为低延迟设计。 核心数量少(服务器 CPU 一般几十到一百多个核),但每个核都很强:大缓存、分支预测、乱序执行,尽量让一条指令流跑得快。操作系统、数据库、业务逻辑这些分支多、前后依赖强的代码,适合 CPU。
GPU 为高吞吐设计。 放了成千上万个相对简单的计算核心,组织成一个个 SM(流式多处理器)。它不追求单个线程快,而是同时跑海量线程:一批线程在等数据,就切换到另一批,用并行度掩盖延迟。
深度学习的计算主体是矩阵乘法:同一个操作作用在海量数据上,彼此独立、几乎没有分支,正好是 GPU 擅长的形状。
| CPU | GPU | |
|---|---|---|
| 核心 | 几十到一百多个,单核强 | 上万个,单核简单 |
| 优化目标 | 单线程延迟 | 整体吞吐 |
| 擅长 | 串行、分支多的逻辑 | 大规模并行的数值计算 |
| 缓存与控制逻辑 | 占芯片面积大 | 占比小,面积留给计算单元 |
| 内存 | DDR,容量大,带宽每秒几百 GB | HBM,容量较小,带宽每秒数 TB(H100 SXM 约 3.35 TB/s) |
GPU 不是取代 CPU
GPU 是插在服务器上的加速器,本身不跑操作系统。CPU 负责调度、数据预处理、读写磁盘和网络,把计算密集的部分交给 GPU。这种 CPU + GPU 分工的模式叫加速计算。所以 AI 服务器里 CPU、内存、网络、存储都不能太弱,否则 GPU 会闲着等数据(第 7 章讲 GPU 利用率低的原因时还会提到)。
Tensor Core 与数值精度
GPU 里有两类计算单元:
- CUDA Core:通用的标量计算单元,做普通的浮点和整数运算;
- Tensor Core:专门做矩阵乘加的单元,2017 年的 Volta 架构(V100)首次加入,一条指令完成一小块矩阵运算,AI 计算的主力。
Tensor Core 每一代都在支持更低的精度。精度越低,每个数占的位越少,同样的芯片面积和显存带宽能算更多的数,代价是表示范围和精度变差。
| 格式 | 每个数占 | 常见用途 | 备注 |
|---|---|---|---|
| FP64 | 8 字节 | 科学计算(HPC) | AI 基本不用 |
| FP32 | 4 字节 | 传统训练的基准精度 | |
| TF32 | 内部格式 | Ampere 起 Tensor Core 处理 FP32 运算的格式 | FP32 的范围,精度更低,对用户透明 |
| BF16 | 2 字节 | 当前训练主流 | 和 FP32 一样的表示范围,不容易溢出 |
| FP16 | 2 字节 | 训练与推理 | 范围小,训练时要配合 loss scaling |
| FP8 | 1 字节 | 训练与推理 | Hopper 起支持,配合 Transformer Engine 自动管理精度 |
| INT8 | 1 字节 | 推理量化 | |
| FP4 | 半字节 | 推理 | Blackwell 起支持 |
混合精度是训练的常规做法:大部分计算用 BF16 或 FP8 跑,保证速度;对精度敏感的部分(比如参数的主副本、累加)保留 FP32,保证训练稳定。
速查
| 词 | 一句话 |
|---|---|
| AI / ML / DL | 一层套一层:AI 最大,ML 从数据学规律,DL 用多层神经网络连特征也自己学 |
| 训练 | 前向 + 反向 + 更新,吃算力和显存,看吞吐 |
| 推理 | 只有前向,看延迟、吞吐和成本 |
| prefill / decode | LLM 推理两阶段,前者吃算力,后者吃显存带宽 |
| CPU vs GPU | 低延迟少核 vs 高吞吐众核,两者分工协作 |
| Tensor Core | 专做矩阵乘加的单元,Volta 起 |
| 混合精度 | 主体低精度提速,关键部分 FP32 保稳定 |