GPU 与模型部署 · A 底层认知
0 / 9 章 ← 首页
贯穿案例 · 一个 14B 模型的一生 序幕 · 在个人电脑跑起来 第二幕 · 变成代码助手 第三幕 · 微调成知识助手 第四幕 · 上线 50 人服务
01

为什么 AI 离不开 GPU —— 八位教授打不过四千个小学生

先抛一个真实的决策问题:你手里这台工作站 CPU 32 核、主频 3GHz,单核频率比很多 GPU 还高——为什么跑一个 14B 模型连 1 token/s 都困难,而插一块 GPU 就能几十 token/s?买不买卡、买哪种卡,第一个要搞懂的就是这个。

答案一句话:大模型干的活几乎全部是矩阵乘法——一层网络约等于「一个大矩阵 × 一个向量」,而 Qwen2.5-14B 有 48 层,每生成一个 token 都要把这 48 层串着过一遍。串行的层数没法减少,但每一层内部的海量乘加彼此独立,可以同时算——GPU 吃的正是后半句。

用后厨打个比方(本手册的统一比喻,点到即止):CPU 是 8 位教授级大厨,一道菜又快又漂亮,但一次只能盯几口锅;GPU 是后厨里 4000 个只会一道工序的小工,你喊一声「切!」,全后厨同时动手。矩阵乘法恰好是「同一道工序打几百万份数据」——教授再快也切不过人海。

CPUGPU
核心几个 ~ 几十个强核心数千 ~ 上万个精简核心
优化目标延迟导向:分支预测、乱序执行、大缓存吞吐导向:同一指令打多份数据(SIMT)
擅长逻辑复杂、步骤互相依赖的任务海量同构计算(矩阵乘法天生如此)
跑 14B逐格串行乘加,慢几个数量级数千线程把输出矩阵一次铺满
A1 · 矩阵乘法并行动画:CPU 逐格 vs GPU 铺满▶ 先跑一遍,再切 Tensor Core 对比
GPU · 多线程并行 GPU + Tensor Core

CPU · 单核 0 拍

GPU · 数千线程 —

CPU 单核
目标 64 拍
GPU 并行
目标 1 拍
输出矩阵 8×8 = 64 格,每格 = A 的一行 · B 的一列(8 次乘加)。真实 LLM 的矩阵是 5120 维级别,一层就要几十亿次乘加——但「64 格互不依赖」的性质不变。

Tensor Core:矩阵乘法专用机床

GPU 核心里还有一层分工:普通 CUDA Core 一拍做一个乘加;Tensor Core 一条指令直接吃掉一小块矩阵的「乘加」(比如 4×4 的块),是为矩阵运算专设的电路。同等芯片面积下,它是这几年的 AI 算力暴增的关键——H100 官方口径 BF16 dense 算力约 989 TFLOPS(官方 datasheet · 查证 2026-09)。

训练 vs 推理,一句话版推理只往前算:读完问题,一个字一个字往外蹦。训练算完还要反推梯度,所有中间结果都得留在显存里——账单翻好几倍(C 页细讲)。
✦ 本章通关条件
✓
能说清「矩阵乘法为什么天生适合 GPU 并行」,以及 Tensor Core 比 CUDA Core 快在哪
展开参考答案 · 先大白话,再专业版
大白话版

矩阵乘法为什么天生适合 GPU 并行:算结果里的每个格子,步骤一模一样,而且格子之间互不等谁——相当于几百万份同一道工序。GPU 后厨有几千个小工,一声令下一人领一份同时干;CPU 那几位大厨再快,也只能挨个做。

Tensor Core 比 CUDA Core 快在哪:CUDA Core 是一次只算一个「a×b 再加 c」的小工;Tensor Core 是一台专用小炒机,一口吞进一小块矩阵、整块一起出——一条顶一串。而 AI 的活几乎全是这种整块乘加,正对它的胃口。

专业版

矩阵乘法每个输出元素 C[i][j] 只依赖 A 的一行与 B 的一列,元素之间零数据依赖、无分支跳转,天然映射到 GPU 的 SIMT 执行模型:一个线程负责一个格子,数千线程一次铺满,算术强度高、占用率高。

Tensor Core 是专用矩阵乘加(MMA)硬件单元:一条指令完成一小块矩阵(如 16×8×16)的乘加,并把结果累加进 FP32 累加器。单条指令的工作量从「1 次乘加」变成「一小块的乘加」,再叠加专用单元的数量优势,同精度等效吞吐比 CUDA Core 逐个乘加高出约一个数量级——这正是上面 A1 动画里「指令数骤减」的出处。

02

看懂一张 GPU 的参数表 —— 先看台面,再看油管,最后看马力

决策问题:预算两万块,购物页写着 24GB、1TB/s、165 TFLOPS、支持 NVLink——先看哪个?顺序错了就可能买回来一张「跑不动自己模型」的贵卡。

参数买车比喻它决定什么看的顺序
显存容量油箱 + 台面大小模型能不能装下:权重 + KV Cache + 开销都要住进去① 一票否决
显存带宽油管粗细生成速度:decode 每出一个字都要把权重完整读一遍(第 7 章细讲)② 决定快慢
算力 TFLOPS马力首字延迟(prefill)、训练与批量吞吐③ 看口径
互连 PCIe / NVLink车间之间的传送带多卡协作效率:NVLink 比 PCIe 快一个数量级以上;单卡用户可以无视④ 多卡才看
TDP 功耗油耗电源、散热、机箱、机房与电费⑤ 部署环境
TFLOPS 的口径水分同一张 H100,官方能印出三个数:BF16 dense ≈ 989 TFLOPS → FP8 dense ≈ 1979 → FP8 稀疏 ≈ 3958(官方口径 · 查证 2026-09)。宣传页永远印最大的那个。看参数表先问三句:什么精度?dense 还是稀疏?「稀疏」是理论上限、多数真实负载吃不到。

SM 是什么:GPU 厂房里的一间间标准车间

参数表上还有个高频词:SM(Streaming Multiprocessor,流式多处理器)。听着唬人,用大白话说:整块 GPU 是一座厂房,SM 就是厂房里一间间标准化的独立车间——芯片并不是把几万个核心散装铺成一片,而是先把核心组装成几十间配置一模一样的车间,每间都能自己领活、自己开工。

每间 SM 车间里,标配三样东西:

  • 通用工位 · CUDA Core(约 128 个/车间):什么数值活都能干的万能工位,一拍做一个乘加;
  • 矩阵专用机床 · Tensor Core(约 4 台/车间):只干「整块矩阵乘加」这一种活,但一口顶几十口(上一节刚认识);
  • 车间小料架 · 共享内存 / L1 缓存:车间边上的一小块快速取料区,全车间共用——免得每领一个数据都跑一趟大仓库(显存)。

所以「CUDA Core 数」「Tensor Core 数」不是两类孤立的电路:总核心数 = 车间数 × 每车间工位数。例如 H100 就是 132 间车间 × 每间 128 个通用工位 ≈ 16864 个 CUDA Core(官方 datasheet · 查证 2026-09)。买卡时真正该看的是车间数量和每车间的机床配置,而不是被「几万核心」的总数晃花眼——下面把其中一间车间放大看看。

GPU 芯片 每个小格 = 一个 SM(车间) 数量级示意,每代芯片的 SM 数不同 放大一个 SM · 流式多处理器(车间) Tensor Core ×4 · 矩阵专用机床:一条指令算一整块 TC TC TC TC CUDA Core ×128 · 通用工位:一次一个乘加 共享内存 / L1
SM 层级:芯片 → 车间(SM)→ 通用工位(CUDA Core)+ 矩阵机床(Tensor Core) · 数量为示意 · 查证 2026-09
A2 · GPU 参数卡对比器悬停参数看它对什么重要 · 点击卡片翻面
数据中心 → 消费 按显存 按带宽 按算力
把鼠标放到任意参数上:这里会告诉你它决定哪个任务。点击卡片翻面看「这张卡适合干什么」。
规格为官方 datasheet 量级(Mac 为统一内存的 GPU 可用上限)· 查证 2026-09 · 云价为常见 on-demand 量级,随市场波动
深挖 · 游戏卡 vs 数据中心卡:TFLOPS 看着差不多,实际差在哪

参数表上消费卡的「AI 算力」常用稀疏 / 低精度口径印,数字看起来能直追数据中心卡。但实际跑模型,差的是另外四件事:

  • 显存容量:24GB vs 80GB——决定你能装什么模型,这一条就一票否决(第 3 章)。
  • 带宽:约 1.0 vs 2.0~3.35TB/s——decode 速度直接被砍半再砍半(第 7 章)。
  • 互连:消费卡无 NVLink,多卡协作只能走 PCIe,训练切分策略受限(C 页)。
  • 特性与稳定:ECC 显存、FP8/FP4 支持、驱动认证、7×24 长期运行的稳定性,都是数据中心卡的溢价所在。

结论:个人跑模型,游戏卡性价比极高;要开服务、要训练,再考虑数据中心卡或云(D 页)。

✦ 本章通关条件
✓
买卡时能按「显存 → 带宽 → 算力」的顺序,说清每个参数各自决定什么、口径水分在哪
03

显存里的住户 —— 权重只是最大的那一个

决策问题:14B 模型量化后权重只要 7.4GB,为什么塞进 8GB 显存的卡还是直接 OOM?——因为显存这间公寓里,权重只是住户之一。

把显存想成一张台面(后厨比喻最后用一次):台面放不下的东西,厨师再快也做不了。推理时台面上常住着这些住户:

  • 权重——模型本体,常驻最大头,开着就占住,关不掉。
  • 激活值——每步计算的临时工作区,跟 batch 和上下文走,用完就腾但一直要地方。
  • KV Cache——「边做边记的草稿纸」,随对话变长、人数变多而膨胀(第 5 章专门讲)。
  • CUDA 上下文 / 运行时——驱动与框架的底数开销,约 0.5~1GB,看不见但真实吃掉。
  • 碎片——显存分配器留下的空洞,这就是「明明剩 3GB 却分配不出 2GB」的原因。
  • (空置门牌)梯度 + 优化器——训练住户,推理时不出现;一旦开训账单是权重的 8 倍以上,C 页再搬进来。
A3 · 显存公寓堆叠图(静态版)场景:24GB 卡 · 14B INT4 · 4 路并发 × 8K 上下文
权重KV Cache开销剩余
悬停 / 点击每一行住户,看它为什么必须住在显存里。
经验法则:可用显存 ≈ 标称 × 0.9 起步,再给 KV 和激活留 10~20%;本手册估算器用更细的公式:可用 = 标称 × 0.95,开销 = 权重 × 15% + 0.6GB
Mac 用户备注Apple Silicon 的「统一内存」意味着内存即显存,但 macOS 默认只给 GPU 用一部分:大内存机型约 75%,小内存机型约 66%(Metal 的 recommendedMaxWorkingSetSize 口径 · 查证 2026-09)。128GB 的 M4 Max 实际 GPU 可用约 96GB。
✦ 本章通关条件
✓
能列出显存里的四类常驻住户,说出谁是最大头,以及「剩 3GB 分不出 2GB」的原因
04

「14B」不是 14GB —— 参数量 × 字节数的换算

决策问题:模型名字里的 7B / 14B / 70B 到底是什么?老板问「这模型多大」,你答「14B」——它占多少显存?答案取决于第二个变量:精度。

一个参数(权重)就是一个数字。模型名里的 B = Billion(十亿个参数)。存一个数字要花字节,所以换算只有一个公式:

权重显存 ≈ 参数量(B) × 每参数字节数

精度是什么:记一个数,你愿意花多少位

模型里的一个参数,就是 0.7231… 这样一个带小数的数。所谓「精度」,就是存这个数时你愿意花多少个二进制位——位数越少,显存越省,但数记得越糙。用尺子打比方:

  • FP32 是游标卡尺:刻度细、量程大,一个数要花 4 字节——准,但贵;
  • BF16 是换了量程的家用卷尺:刻度糙了,但量程和 FP32 一样宽——记神经网络绰绰有余,连训练都用它;
  • INT4 是只有 16 个刻度的短尺:糙到离谱?配一个「缩放系数」重新标定刻度后,网络居然基本能忍——这是本地部署的标配。

拆开看,浮点数的位分三段:符号 + 指数 + 尾数。指数管量程(能表示多大、多小的数),尾数管刻度细度(小数点后几位)。AI 有个关键性质:参数的值域很宽,但对每个值糙一点意外不敏感——所以砍位宽时优先保指数(别爆表)、牺牲尾数(糙一点没事)。BF16 就是这个思路的产物:FP32 的 23 位尾数砍到只剩 7 位,指数原样保留。位宽 ÷ 8,就是上面公式里的「每参数字节数」:

精度位的组成(符号+指数+尾数)一个数多大一句话画像
FP321 + 8 + 234 字节游标卡尺:训练时的主权重、优化器状态用
FP161 + 5 + 102 字节刻度细但量程窄,数值一大就溢出,训练已少用
BF161 + 8 + 72 字节FP32 的量程 + 糊刻度:训练、推理的主力精度
FP81 + 4~5 + 2~31 字节更短的尺:数据中心推理新贵(H 系卡起)
INT4无指数,16 个整档 + 缩放系数0.5 字节短尺+标定:本地部署、QLoRA 存放的标配
A4+ · 精度显微镜同一个数,五种存法 · 蓝=指数(量程)· 琥珀=尾数(刻度)
典型权重 0.7231 π ≈ 3.14159 大数 100000 小数 1e-7
FP32 用浏览器原生 IEEE-754 位;FP16 / BF16 / FP8(E4M3) 为近似舍入;INT4 是「组内 max=1」的对称量化演示——|x| 超过 1 就被削平,这正是 INT4 必须分组、每组记一个缩放系数的原因
为什么「能砍」值得记住字节减半 = 显存减半,decode 每一步要读的数据也减半,而效果往往掉得比直觉少——这是后面量化(B 页细讲 GGUF/AWQ 等格式怎么选)和 QLoRA(C 页)共同的地基。

精度速查表(按名义参数量口算;实际 config 里 Qwen2.5-14B 是 14.8B,BF16 约 29.6GB——量级一致):

精度每参数字节7B 权重14B 权重70B 权重

「装得下」三档判定

  • ✅ 装下还有余量:总需求 ≤ 可用显存的 85%——日常放心跑。
  • ⚠️ 勉强:85%~100%——只能短上下文、低并发,塞满就 OOM。
  • ❌ 装不下:超过可用显存——连权重都放不进去,一切免谈;出路是量化、换卡或多卡。
A4 · 精度 × 模型大小滑条两个滑条,实时换算权重显存
0.5B 7B 14B 32B 72B
FP32 BF16/FP16 FP8/INT8 INT4
权重显存–
+ 运行开销后–
能装下的最小档卡–
判定–
公式与全手册估算器同源:权重 = 参数量 × 字节;开销 = 权重 × 15% + 0.6GB;卡片档位取自共享数据表(最小 24GB 档)
✦ 本章通关条件
✓
能口算任意「参数量 × 精度」的权重量(例:70B INT4 ≈ 35GB,14B BF16 ≈ 28GB)
05

KV Cache —— 会越聊越贵的草稿纸

决策问题:同一个模型,为什么刚聊时又快又稳,聊到几万字之后开始变慢、甚至直接 OOM?多变的从来不是权重——权重是死的。

推理时模型每读一个 token,都要把它的 K / V 两张「卡」存下来,因为后面的每个新 token 做注意力时都要回看全部历史。这些卡就是 KV Cache——后厨里那张「这道菜做到第几步」的草稿纸,越写越长,而且每桌客人一张。

教学公式

每 token KV 字节 = 2(K 和 V)× 层数 × kvDim × 每元素字节

其中 kvDim = KV 头数 × head_dim。现代模型普遍用 GQA(分组查询注意力)省钱:40 个查询头共享 8 组 KV,草稿纸直接省到 1/5,质量几乎不掉。用 Qwen2.5-14B 的真实 config(48 层、8 个 KV 头 × head_dim 128 → kvDim 1024)实算,BF16 下:

2 × 48 × 1024 × 2B = – ≈ 0.19 MB / token

换成直觉(单请求,同一模型):

上下文1 路并发的 KV8 路并发的 KV
并发是乘法总 KV = 并发 × 上下文 × 每 token 开销。这就是「自己用很流畅,8 个人一起用就崩」的数学根源——每个人一张草稿纸,且每个人的草稿纸都随对话变长。解法在 B 页(批处理、限流、前缀复用),这里先把账算明白。
A5 · 上下文 × 并发生长器看 KV 怎么吞掉剩余显存
512128K
164
RTX 4090 · 24G A100 80G H200 · 141G
权重开销KV Cache剩余
OOM
每 token KV–
KV 总量–
剩余可用–
判定–
装不下?试一试:
为什么 KV 能做到这么省?Qwen2.5-14B 用 GQA 把 40 个查询头压缩到 8 个 KV 头,每 token 只要 –;若是老式 MHA 模型(KV 头 = 查询头,kvDim = hidden 全宽 5120),每 token 要 –——没有折扣,贵 5 倍。选模型时 KV 头数是被低估的重要参数。
固定场景:Qwen2.5-14B · INT4 权重 · KV 按 calc.js 同一公式(≤8bit 精度按 1 字节/元素)· 总 KV = 并发 × 上下文 × 每 token 开销
✦ 本章通关条件
✓
能用「2 × 层数 × kvDim × 字节」估出每 token KV,并说清「总 KV = 并发 × 上下文 × 每 token」是乘法
06

显存估算器 —— 这张卡到底能不能跑

决策问题:下周要给组里 8 个人部署 14B 代码助手,手里的卡是 24GB——不用装任何工具,先在这里把账算一遍。前五章的公式,现在拼成一台判定机。

啊哈时刻在哪把并发从 1 拉到 8(上下文 8K),看 KV 条怎么瞬间吞掉剩余空间——「上下文 × 并发才是显存大户」一次看懂。超限了就点「三条出路」看怎么救。
A6 · 显存估算器全手册 a/b/c/d 页共用同一套公式
8GB 跑 14B? 4090 跑 70B? H100 撑 128K 长文?
FP32 BF16/FP16 FP8/INT8 INT4
512128K
164
权重–
KV Cache–
开销–
总需求–
权重KV Cache开销剩余
–
  • 权重
  • KV Cache
  • 开销CUDA 上下文 0.6GB 底数 + 激活工作区(按权重的 15%)——第 3 章的「看不见的住户」
  • 可用
超限了?三条出路(点击直接演示):
公式:权重 = B × 字节/参数 · KV = 并发 × 上下文 × 每 token 字节 · 开销 = 权重 × 15% + 0.6GB · 可用 = 标称 × 0.95 · 判定:>100% ❌ / >85% ⚠️ / 其余 ✅
✦ 本章通关条件
✓
会用估算器回答「这张卡能不能跑这个模型 + 这个并发」,并能说出超限时的三条出路
07

深挖 · 为什么第一个字慢、后面快 —— 带宽瓶颈预告

决策问题:向本地模型提一个长问题,第一个字卡了 2 秒才出来,之后却每秒蹦几十个字——同一个模型,为什么两副面孔?这决定了你该怎么优化「体验」。

先把两个术语引出来——模型生成一次回答,其实是两步走:

  • 第一步「读题」· Prefill(预填充):把你输入的全部 token 一次性并行算完。你贴了 2000 字的代码,它就一口气处理完这 2000 个 token;
  • 第二步「逐字写」· Decode(解码):自回归地一个字一个字往外蹦——每写一个字,都要把全部权重从显存完整读一遍。
第一幕 · Prefill 读题第二幕 · Decode 逐字写
怎么干一摞 token 并行一起算一次只生成一个 token
吃哪个瓶颈算力(compute-bound)带宽(memory-bound)
决定什么第一个字多久出来(TTFT,首字延迟)后面每个字多快(tokens/s)

两幕的细节与优化是 B 页开篇,这里先记住 Decode 的粗算式:

tokens/s ≈ 显存带宽 ÷ 权重量(GB)

物理图像很直白:decode 时算力大量闲置,GPU 大部分时间在等数据从显存搬过来;每秒能把权重读几遍,就能出几个字。三个粗算例子(数字由本手册共享公式实时算出):

卡模型精度权重带宽理论上限实际(打 5~7 折)
为什么实际要打 5~7 折理论式只算了「读权重」这一件事。真实 decode 还要读写 KV、做采样、被调度器批量排队、引擎本身有开销——所以拿理论值当上限,拿打折值当预期,别拿它写 SLA。
留给 B 页的钩子想让 decode 变快?公式里你能动的只有分母——让权重变小。把 28GB 的 BF16 压到 7GB 的 INT4,理论上限直接翻 4 倍。为什么压到 4bit 模型几乎不变笨?为什么不能无限压?——B 页第 2 章「量化」专门回答。
✦ 本章通关条件
✓
能解释为什么 decode 速度 ≈ 带宽 ÷ 权重量,以及为什么第一个字慢、后面快
08

终极测验 · 5 题验收

5 题验收。答对 4 题以上,才算把「这张卡能不能跑」真正带走。

FINAL EXAM · GPU 与显存底层认知0 / 5
✦ 本章通关条件
✓
终极测验 5 题答对 ≥ 4(答完自动勾选)
09

参考资料 · References

本页所有硬件数字与模型配置的出处。硬件规格与价格会随时间变化,请以官方页面为准。

硬件规格(官方 datasheet / 规格页)

  • NVIDIA · GeForce RTX 5090 官方规格页(32GB GDDR7 / 1792GB/s,页内对照 RTX 4090 的 1008GB/s)· nvidia.com/geforce/rtx-5090 · 查证 2026-09
  • NVIDIA · H100 官方页(80GB HBM3 / 3.35TB/s;BF16 dense 989 TFLOPS 与 FP8/稀疏口径)· nvidia.com/data-center/h100 · 查证 2026-09
  • NVIDIA · H200 官方页(141GB HBM3e / 4.8TB/s,容量 +76%、带宽 +43% vs H100)· nvidia.com/data-center/h200 · 查证 2026-09
  • NVIDIA · Blackwell 架构页(B200:192GB HBM3e / 约 8TB/s,原生 FP4/FP8)· nvidia.com/data-center/blackwell · 查证 2026-09(部分 B200 数字以生态汇总为准,官方细节见 datasheet PDF)
  • Apple · M4 Pro / M4 Max 发布稿(M4 Max 满血版 546GB/s、最高 128GB 统一内存;32 核 GPU 低配版为 410GB/s)· apple.com/newsroom · 查证 2026-09
  • Apple · Metal 文档 · recommendedMaxWorkingSetSize(macOS 给 GPU 的统一内存默认上限:大内存机型约 75%、小内存机型约 66%)· developer.apple.com · 查证 2026-09

模型配置与精度口径

本页全部显存 / 速度计算统一调用共享公式库 gpu-and-deployment/calc.js(window.GPU_CALC),四页数字同源,不会互相打架。

下一页 · B 推理与部署
Prefill/Decode 两幕戏 · 量化到底掉不掉点 · Ollama 到 vLLM 怎么选 · 8 个人一起用为什么不崩
→