AI Infra · 第 1 章图解

初识 AI Infra

一张 H100 上跑 70B 模型,每生成一个 token:把 70 GB 权重从显存读到计算单元要 20.90 ms,真正的矩阵乘加只要 0.14 ms。决定速度的是数据搬移,算力只占很小一部分。本章用容量、算力、带宽、延迟这四个数,回答“放得下吗、要等多久、加资源值不值”。

读权重 70 GB ÷ 3.35 TB/s
20.90 ms
矩阵计算 140 GFLOPs ÷ 989.4 TFLOP/s
0.1415 ms
148×读取下界是计算下界的 148 倍。算力翻倍,这一步几乎不变;带宽翻倍或者权重减半,才能降到 10.45 ms。
放得下吗?权重 + KV 状态 + 工作区 ≤ 显存容量,多卡要逐卡算。
要等多久?T = max(F/Π, R/β):算的时间和读的时间,取较慢的那个。
加资源值不值?先看被加速的部分原来占多少(Amdahl),再看离硬件极限还有多远。
数据读取 / 带宽 计算 容量 / 驻留数据 等待 / 系统开销 超限 / 瓶颈
算例贯穿全章:DeepSeek-R1-Distill-Llama-70B 跑在 H100 SXM 上做估算,Qwen3-8B 跑在 RTX PRO 6000 上做实测。带 ▶ 的图可以按时间播放,滑块和下拉框都会实时重算。
1.1

AI Infra 为什么重要

AI Infra 是支撑训练和推理的基础设施,包括计算设备、存储、互联,以及组织这些资源的软件。训练用样本调整参数;推理用训练好的参数,把输入变成输出。

1.1.1 编程抽象上移:从操作系统到模型上下文

传统应用用代码表达行为,编译器把代码变成指令,操作系统管资源。模型驱动的应用多了一个入口:选模型、组织上下文、提供工具。上下文就是本次模型调用能用的全部输入:任务指令、参考材料、此前的交互结果。参数不变,换指令、示例或材料,模型就在做另一件事。

图 1-1 · 两种应用的表达方式与执行路径

实线:向下的执行依赖 · 虚线:工具仍靠操作系统

Agent 循环:模型选下一步,宿主程序动手

以代码检查为例:代码、测试要求和可用工具一起交给模型,模型提出修改或发起工具调用;应用执行测试,把结果加进下一次调用的上下文。完成一次任务可能要多次模型调用和工具执行。

同一个模型给不同应用服务,用的是同一组参数,所以可以把多条请求合成一批,共用一次读入的权重。每批请求数叫 batch size。但长文档、长回答、多轮工具调用又会改变计算量、状态占用和等待时间:同一模型、同一套加速器,换个任务,性能可能差很远。

模型影响硬件要做的事

压缩保存的状态、改变注意力机制、只用部分参数(专家),都会改变硬件的工作量。

硬件影响该选哪种模型

存储容量、传输速度、设备连接方式,决定哪些模型结构和执行方法更合适。适合一个应用的方案,换个应用要重新评估。

各层可以围绕同一个完整的执行过程一起设计:模型结构给出计算和数据依赖,运行时知道状态何时产生、何时使用,硬件承担运算和传输。用这些信息重排执行,就能消掉通用实现里的一部分开销。上层可编程性的变化,为跨层联合优化打开了空间。

1.1.2 从任务到硬件的六层分工

廖恒博士用“十八层宝塔”描述从应用到芯片、工艺、物理的层层依赖,并指出多数人只懂其中一两层,因而错过了跨层优化的机会。本书借这个方法分成六层,点击查看每层负责什么。

图 1-2 · 从应用到硬件的六层分工

点击层级
↓ 向下看:任务一步步变成具体的计算与数据访问↑ 向上看:容量、算力、带宽决定能跑多大的模型、同时服务多少请求、多快响应

贯穿多层的能力

资源调度、运行环境、观测和计费要结合多层信息;工艺、封装、供电、散热决定设备如何制造和部署;网络也不只在最底层,跨设备协作的模型、算子和服务都要经过具体互联。

层与层之间的接口就是联合优化的切入点。

模型 × 系统

模型改变状态表示 → 改变存储和通信需求。

编译器 × 存储

相邻算子融合 → 改变中间结果放在哪里。

运行时 × 主机

加速器之间直接交接 → 减少主机参与次数。

1.1.3 一次生成请求的处理过程

推理实例是能独立完成模型请求的一组执行资源,可以是一张或多张加速器。路由器选实例,实例内部再安排加速器。先分清谁负责执行,才知道权重该放哪、中间结果该交给谁。

图 1-3 / 1-4 · 一次请求从进入到流式返回

KV 缓存
—

路由策略、分词器放在哪里、prefill 与 decode 是否分到不同实例,都属于部署选择。KV 条的长度和 token 数为示意。

同一份数据经历两种频率完全不同的搬移:加载把模型送到加速器(启动时一次),执行则每一步都把所需权重和状态送到计算单元。外部请求可能只有一小段文字,内部搬的却是大得多的权重、KV 状态和中间张量。

练习 1-1 的账本 · 回答变长、实例复制,哪些量会变

70B · 8 比特权重 73.73 GB · 每 token KV 320 KiB

每 token 320 KiB 由书中“8192 token 的 BF16 KV = 2.5 GiB”线性换算;每步权重读取按例题 1-1 的“每参数一字节、约 70 GB”。输入 2048 token 是示意值。把实例复制成两份,权重就要存两份,路由器多了一个可选的去处。

软件对应的硬件

超节点是一组通过高带宽互联紧密协作的加速器,可以分布在多台服务器或计算托盘里。超节点内部的互联叫 scale-up,目标是一组加速器低开销地共同计算;超节点之间经网卡和交换网络相连,叫 scale-out,用来扩大集群。GB200 NVL72 把 36 个 Grace CPU 和 72 个 Blackwell GPU 装进一个机柜,72 个 GPU 经 NVLink 组成同一个互联域:紧密协作的范围从单机扩到了机柜。

图 1-5 · 物理连接的两层视图:三种流量

流量走哪条路什么时候发生时间要求
■ 请求服务入口 → 数据中心网络 → 主机每个请求进出数据量小,可能只是一小段文字
■ 模型文件共享存储 → 网络 → 主存 → 显存实例启动或模型切换量大,但可以提前加载
■ 中间结果GPU ↔ GPU(超节点内部互联,或经网卡跨超节点)每层计算之间必须及时到达,下一层才能继续

CPU 连主存,负责主机程序和执行控制;GPU 连各自的显存(常用 HBM,宽接口持续供数);CPU 与 GPU 可经 PCIe 相连,GPU 之间可走独立高速互联。支持直接内存访问时,数据由传输硬件直接写入目标内存,CPU 只发起和管理(第 7 章)。设备数量为示意。

物理连接直接影响模型的执行时间。单卡的算力和带宽决定本地计算与读写的耗时,多卡协作再加上数据交换和等待。本章先估单卡,后续章节把同样的方法用到超节点和网络。

贯穿全书的两条线索

decoder-only 与因果编码器—解码器(CED)

DeepSeek V4 → V4.1 Flash

V4 已经用上下文压缩与稀疏访问改变存储和读取需求;V4.1 Flash 进一步重划模型内部职责:编码器形成上下文表示,解码器从中取全局信息,大量输入 token 不必经过解码器主体;生成新 token 时仍依次经过编码器与解码器。Agent 负载“输入多、输出少”,计算投入可以按此重新安排。开源的 Qwen3 用作基础算例。第 2 章讲 CED 的结构与状态,第 3 章分解负载,第 4–7 章追踪数据路径,第 8、9 章讲缓存与分配。

练习 1-1〔延伸〕· 一次请求中的权重读取、状态增长与数据传递

沿图 1-3 至 1-5,补画 KV 状态随输出增加的过程,分别标出模型文件加载、一步权重读取、KV 追加和卡间结果传递。回答从 100 增到 1000 个 token,哪些数据只加载一次、哪些访问会增加?把一个实例复制成两个,权重容量与请求路由怎样改变?(可用上面的账本对照。)

1.2

系统设计的关键数字

1.2.1 用数量级判断方案

Jeff Dean 在 2009 年的演讲里列了一张“Numbers Everyone Should Know”:写程序、搭系统之前,先估主要操作要花多少时间。这是 2009 年的设备环境,看的是数量级关系。点两行比一比。

原幻灯片 12 项操作 · 对数刻度(图 1-6 扩展)

点击任意两行比较

1 μs = 1000 ns,1 ms = 1000 μs;1 byte = 8 bit。KB/MB/GB/TB 是 10³/10⁶/10⁹/10¹² 字节,KiB/MiB/GiB 是 2¹⁰/2²⁰/2³⁰。Zippy 是 Google 当时的压缩库。颜色:绿 = 计算,灰 = 同步,橙 = 存储,蓝 = 网络。

串行等待会累加:20 次寻道 vs 1 ms 计算

每次寻道 10 ms

某部分在原总时间中占比越大,缩短它对整体的改善就越大。若比例 f 的部分加速 s 倍,其余不变:

Speedup = 1 / ((1 − f) + f / s)  上限 1 / (1 − f)

Amdahl 定律 · 同样的 AI 编程工具,为什么团队收益不同

原来 100 小时、编码 20 小时:编码缩到 4 小时,其余 80 小时不变,总共 84 小时(1.19×)。编码占 80% 时:20 + 80/5 = 36 小时(2.78×)。想继续缩短交付,就得改沟通、评审和审批。局部提速,最终要放回完整任务里衡量。

1.2.2 分析 AI 系统需要哪些关键数字

某任务要保存 M 字节、做 F 次浮点运算、经某个存储接口读写 R 字节;加速器提供容量 Mcap、计算吞吐 Π、接口带宽 β。三类需求分别比较:

M ≤ Mcap  Tcompute = F / Π  Tmemory = R / β

按峰值 Π、β 算出的时间是硬件的物理极限,软件怎么组织都不会更快。下界与实测耗时 T 之比就是利用率:MFU = F/(ΠT),MBU = R/(βT),都不超过 1。它们回答同一个问题:离物理极限还有多远。M 与 R 要分开算,因为一份数据可以存一次、读很多次。

容量 · byte

能同时放下多少:权重、上下文状态、运行时工作区。

计算吞吐 · FLOP/s

一次乘加计 2 FLOP。峰值对应特定输入精度、累加精度和稠密/稀疏条件。

带宽 · byte/s

单位时间搬多少。估哪一段传输,就用哪一段接口的带宽。

延迟 · s

发起后要等多久。大块传输看数据量 ÷ 带宽;小请求逐次等待时,启动与往返可能占大头。

GPU 资源速查表

BF16 输入 · FP32 累加 · 稠密峰值 · 十进制 GB/TB
资源或操作RTX 4090A100 80GB SXMH100 SXM
架构AdaAmpereHopper
显存容量(GB)248080
显存带宽(TB/s)1.0082.0393.35
BF16 矩阵峰值(TFLOP/s)165.2312989.4
按带宽峰值读取 1 GB(ms)0.990.490.30

读写量不变而带宽翻倍,R/β 减半;计算量不变而算力翻倍,F/Π 减半。条形按各列最大值归一。

1.2.3 参数存储量与链路带宽的换算

先把参数换成字节,看放不放得下;再用字节除以带宽,看搬一次要多久。DeepSeek-R1-Distill-Llama-70B 是稠密模型,公开权重约 705.54 亿参数(70,553,706,496),BF16 每个 2 字节:

MW = N · bW = 70,553,706,496 × 2 B ≈ 141.11 GB ≈ 131.42 GiB

容量检查要写全:MW + Mstate + Mwork ≤ Mcap,多卡逐卡核算。141.11 GB 放不进一张 80 GB 的 H100:要么均分到两张卡(每张 70.55 GB),要么做 8 比特分组量化(每 128 个权重共享一个 2 字节 scale,部分参数保留 BF16),合计 73.73 GB 放进一张。

图 1-7 · 显存预算计算器

8192 token 的 BF16 KV 为 2.5 GiB ≈ 2.68 GB,工作区预留 2 GiB ≈ 2.15 GB:一张 H100 上 73.73 + 2.68 + 2.15 = 78.56 GB,刚好放下。多卡时权重与 KV 均分、每卡各留一份工作区,这是本页为演示设的分配方式(示意)。容量用厂商名义 GB。

链路换算 · bit/s 先除以 8

ConnectX-7 · 400 Gbit/s

这是理想时间。每次传输还有启动时间,协议开销和共用链路的其他流量也会压低应用实际拿到的带宽;沿路径把这些计进去,估算才更细。

练习 1-2〔核心〕· 不同权重精度下的显存需求与多卡分配

BF16 权重 141.11 GB,8 比特 73.73 GB,H100 SXM 每卡 80 GB。每卡预留 5 GB 状态与工作区,分别判断单卡和两卡均分能否容纳。再换成一张 48 GB 的 RTX A6000 加一张 80 GB 的 H100 SXM,判断两种精度能否部署,给出可行方案的一种权重分配。最后把 400 Gbit/s 换成 GB/s,求传 1 GB 的理想时间。

1.3

用几个数字估算一次模型执行

1.3.1 生成一个 token,先检查什么

例题 1-1:一张 H100 SXM,能否让 70B 模型在 10 ms 内生成一个新 token?为便于手算,取 N = 70×10⁹,每参数 1 字节存储、读入后转成 BF16 计算;单请求每步处理一个新 token,每步从显存把权重完整读一遍;读取与计算充分重叠。容量上一节已经查过(73.73 GB 放得下)。

驻留量

MW = bWN

存一份,70 GB

每步读取量

RW = bWN

每步再读一遍,70 GB

每步运算量

F ≈ 2BN

每个权重对每个 token 一乘一加;B=1 时 140 GFLOPs

前两式此刻相等,只因为权重存一份、读一遍。下一步生成时,驻留量还是 MW,读取却又多了一次 RW。B 增大只增加运算量:同一份权重要和更多请求的当前 token 向量做乘加。

1.3.2 计算与读取分别需要多久

Tstep ≥ max(F / Π, RW / β)  70 GB ÷ 3350 GB/s ≈ 20.90 ms  140 GFLOPs ÷ 989,400 GFLOP/s ≈ 0.1415 ms

每读一个权重只做一次乘加,计算单元很快算完已读入的数据,然后等下一批数据。提高算力只缩短乘加,不能加快显存读取。数据分块到达时,算当前块的同时可以读下一块,稳定后由较慢的一项决定速度。

单步生成计算器 · 例题 1-1 / 图 1-9 ~ 1-12 / 练习 1-3

N = 70×10⁹ · 目标 10 ms/步

左:时间下界随 B 变化(图 1-11),蓝线权重读取每批 70 GB 不变,绿线计算按 2BN 增长,黑虚线是两者最大值。右:理想输出吞吐 B / T(图 1-12)。竖虚线是转折点 B* = bWΠ / (2β),对应算术强度 I = 2B/bW 追上 Π/β,即第 4 章 Roofline 的出发点。

图 1-10 · 分块读取与计算重叠:一次读取,服务一整批

权重分 8 块依次到达(分块数为示意),每到一块就对批内所有请求做乘加。B 小时绿块细得几乎看不见,计算单元大部分时间在等数据;把上面的 B 拖过 B* 后,绿块连成一片,计算反过来成为瓶颈。“每输出 token 分摊”是整批耗时 ÷ 输出数,用来换算吞吐,不是单个请求的响应延迟。

批内复用增加的是吞吐,不是单请求速度。8 个请求共享一次读取:整批仍是 20.90 ms,每个输出分摊 2.61 ms,吞吐从 47.9 提到 383 token/s,但每个请求仍要等整批跑完。B* ≈ 148 也只比较了矩阵运算与权重读取:一张 H100 放下 73.73 GB 权重后只剩约 6.27 GB,远装不下 148 条请求的 KV。

练习 1-3〔核心〕· 带宽与 batch size 如何影响单步生成时限

用例题 1-1 的模型与加速器,有效带宽取标称 70%、有效算力取峰值 50%。分别取 B = 1、16、64,求整批时间下界、每输出 token 分摊时间和理想吞吐。目标每请求每步 ≤ 10 ms,哪些 B 仅凭下界就可判定不行?再把权重读取量减半、运算量不变,重新判断。求 B*,并解释为什么每输出分摊时间减少,不等于单步延迟缩短。(上面的计算器可以直接拨到这些条件。)

1.3.3 用实测检验估算

Qwen3-8B,BF16 权重,跑在 RTX PRO 6000 Blackwell Workstation Edition(96 GB、1.792 TB/s、503.8 TFLOP/s)上,vLLM 0.23 eager 模式(按程序顺序逐项提交工作)。每请求输入 2048、生成 256 个 token,每档测三次。吞吐 = 整批输出数 ÷ 总时间(含输入处理);TPOT = 每请求首末输出间隔 ÷ 255,取中位数。

图 1-13 / 1-14 · 同时请求数从 1 到 64

实测

理想吞吐 = 单请求吞吐 × B(练习 1-4 的假设)。TPOT 下界按 Tstep ≈ max(B·F1/Π, (RW + B·Rstate,1)/β) 估:F1 = 16.34 GFLOPs,RW = 15.14 GB,Rstate,1 = 0.302 GB(按 2048 token 上下文)。

从 1 到 64 个请求,吞吐约涨 31 倍,单请求输出间隔从 26.5 ms 涨到 40.5 ms。权重被所有请求共用,所以吞吐上去了;但每个请求各有自己的上下文状态,注意力计算和上下文访问也随请求数增长,每一步就慢了。吞吐与响应时间要同时报告。

搬什么模型结构决定要哪些权重搬多少位宽 × 参数量搬几次批内复用改变次数经过哪里显存接口提供带宽谁在等待执行依赖决定等待
练习 1-4〔核心〕· 用实测吞吐与输出间隔检验批处理模型

根据图 1-13、1-14 的四档测量值,算各档相对单请求的吞吐之比和 TPOT 增长比例。假设增加并发后只受共享权重读取限制,吞吐应怎样变化?对照实际结果提出两个可通过测量区分的解释,设计一次只改变上下文长度的测量来判断,并指出测量前要保持不变的模型、输出长度与计时起止点。

1.3.4 实测为何达不到极限:模型漏项还是系统开销

“新算子比旧的快三成”说明不了问题:不知道极限在哪,就不知道这三成是快到头了,还是离上限还差一个数量级。正确起点是先按第一性原理算出硬件允许的上限,再看实测差多远。

从 26.5 ms 到 8.62 ms 下界:差距去哪了

Qwen3-8B · batch 1 · RTX PRO 6000

① 理论模型漏了项

只算了权重和 KV 的读取,没算注意力以外的向量运算和采样。补上后下界上移,差距缩小。改的是模型,不是系统。

② 实现本身的开销

eager 模式逐个提交 kernel,每次都经过主机上的 Python、驱动和 PCIe,加速器在两次 kernel 之间空转;客户端逐步记日志也占主机时间。这些与硬件无关,可以去掉。

补测同时关闭了前缀缓存并重新构造了输入,逐步日志的影响无法与这些条件完全分开;加速器事件只覆盖模型执行,不含采样与输出。

eager 模式下,GPU 在等 CPU 提交

示意:时间单位任意

实测与下界不符时,按顺序查:先问模型有没有漏项,再问实现有没有开销。每次只改变一个条件,才能分清两种来源。本例三倍的差距,大部分是主机一侧的系统开销。

1.4

需求如何推动架构设计

前面把硬件当成给定条件;反过来,这些硬件本身也是为具体需求设计的。三个案例,三种不同的瓶颈。

1.4.1 TPU:使用量到了规模,专用芯片更合算

Google 早就讨论过用 GPU、FPGA 或专用芯片,但早期空闲资源已够用。2013 年一项预测改变了讨论:如果每位用户每天用三分钟语音搜索,数据中心规模可能要翻倍。TPU v1 于 2015 年进入数据中心,论文 2017 年发表。

每日总需求 = 请求量 Q × 每请求计算量 F1。Q 增大,空闲能力终会用尽:可以加通用服务器,也可以做专用处理器。后者有前期开发成本,但可能降低每请求的设备时间和能耗。

服务规模越大,累计节省越容易抵偿前期投入。

规模与总成本

示意:无刻度

图 1-15 · 围绕反复出现的矩阵运算组织计算阵列和缓冲

第 4 章展开

1.4.2 SmartNIC:把包处理放到数据经过的位置

2015 年 Azure 设计 40 Gbit/s 云服务器时,网络带宽提高,虚拟网络策略也越来越复杂。多台虚拟机共用物理网络,平台要识别数据归属、查转发规则、封装、维持隔离,而这些占的正是本该给租户的 CPU 核。2015 年末起,新服务器装上基于 FPGA 的 SmartNIC,2016 年对客户提供 Accelerated Networking。

包处理要占几个 CPU 核

最小帧每帧占 84 字节线时

ncore = λpacket / μcore

图 1-16:主机软件管理复杂策略,适合重复执行的包处理规则交给 FPGA;FPGA 可重新配置,网络处理能随策略更新而改。网卡若还要读主机内存,就得经 PCIe,此时返回延迟和可同时发出的请求数决定读取速度(第 7 章 KV-Direct)。

设计的关键是兼顾软件的更新能力与硬件的处理速度。

1.4.3 Unified Bus:让设备直接访问其他设备的内存

单卡放不下模型和状态,最直接的办法是加卡。但“总容量够了”和“任务能高效执行”之间,还隔着工作划分、数据交换和同步:一步计算依赖另一张卡的结果,就要等交接。华为面向昇腾等异构设备推进的 UB,相关研究在 GPT-3(2020)发布前已开始;GPT-3 之后多设备协同的需求被广泛认识,投入随之扩大。

图 1-17 · 一次远程访问要穿过几层

数据一旦跨过主机边界,软件就要改用消息传递接口、重排缓冲区,再经网卡驱动和协议栈,每多一层抽象就多一段时间。UB 去掉这些层,让一次远程访问的耗时逼近线路时延决定的下限;拓扑决定这些访问的距离与带宽。各层各占多少时间,第 7.3、7.4 节推导。

需求改变了要优先解决的瓶颈,也改变了硬件、软件与互联之间的分工:数据搬移塑造了 AI Infra 的架构。

容量每个加速器能否容纳所需数据(M ≤ Mcap,逐卡)
工作量各加速器的运算量与读写量(F/Π、R/β,加上通信量)
依赖按执行顺序算重叠与等待,得到总时间

以两卡部署为例:权重均分满足逐卡容量,但每个阶段还要等输入和前序结果。加卡改变了 Mcap 和可用算力,也引入了新的通信量与依赖。模型再大、卡再多,这个分析顺序不变。

谬误与陷阱

四个常见误区

✗ 峰值算力翻倍,执行速度就翻倍

先查是不是受计算限制。例题 1-1 里读取下界远大于计算下界,算力翻倍几乎不改变下界;只加速了一部分时,还要用 Amdahl 定律查收益上限。

✗ 显存放得下权重,就能支持目标并发

权重只是常驻数据的一部分。上下文状态、工作区和运行时预留一起占显存,多卡还要逐卡核算。

✗ 比旧实现快三成,优化就成功了

不知道极限,就判断不了这三成是逼近上限还是差一个数量级。先算极限,再按 1.3.4 的顺序查差距来自漏项还是开销。

✗ 吞吐提高,每个用户就等得更短

批内复用减少的是每个输出分摊的读取开销,每个请求仍要排队、经历整批执行。吞吐与响应时间要同时报告。

本章数字速查

Qwen3-8B 的关键数字

固定 BF16 权重、激活和 KV,并发 1。prefill 一次处理已有输入并得到首个输出;decode 每次送入一个新 token,利用已存的 KV 继续生成。

模型需求数值怎么用
完整 BF16 权重16.38 GB判断加载所需显存
每个上下文 token 的全模型 KV144 KiB× 上下文长度 = 单请求 KV 容量
2048 token 上下文的 KV288 MiB约 0.302 GB,随独立请求数增加
2048 token prefill 的矩阵运算29.69 TFLOPs÷ 矩阵算力 = 计算时间下界
一步 decode 的矩阵运算16.34 GFLOPs输入一个 token,另访问已有上下文
一步 decode 的主要权重读取15.14 GB权重读一次;嵌入层只读当前 token 那一行
一步 decode 的旧 KV 读取0.302 GB每份上下文 KV 读一次

用速查数字估下界

默认 RTX PRO 6000 · 2048 上下文

prefill 固定为 2048 token 输入(改变长度时注意力部分不按线性变化,这里不外推)。decode 的旧 KV 读取按 144 KiB × 上下文换算。完整执行还要沿算子顺序加上其他运算、实际访存和启动时间,第 2–5 章逐项建立。

prefill 一次处理大量输入,矩阵工作量大;单请求 decode 每次只处理一个 token,却仍要读大量权重和上下文。提高算力、提高带宽、增加批内复用,分别作用于不同的时间项。

本章小结

先放得下,再算多久,最后看谁在等

一、上层抽象上移

应用用模型与上下文表达行为,许多任务共享相近的底层计算。掌握计算依赖和状态驻留时间,就能统筹原本分属不同层次的选择:改数据表示、合并执行步骤、复用准备工作、缩短卡间传递与同步。

二、三步估算

先查数据能否放下,再用运算量和读写量估耗时,最后按执行顺序分析重叠与等待。峰值下界就是物理极限,下界/实测就是利用率;差距不是模型漏项,就是系统开销。

三、搬移决定速度

70B 算例里读权重比算慢 148 倍,所以加带宽、少读数据、提高复用才管用。批内共享提高吞吐,但每个请求的响应还包括整批执行和排队。

核心练习 1-2、1-3、1-4 分别练单位换算与可行性判断、条件改变后的资源估算、预测与实测的比较。下一章根据真实模型配置细化 2N 计算量与权重读取量,给出具体的矩阵尺寸与状态大小。