本文是「LLM服务和优化:从入门到优化实战」系列的第五篇。
前四篇讲完"是什么"和"怎么建",从这篇进入硬核优化。所有优化技术都不是凭空产生的,它们是对物理瓶颈的回应。本篇拆解三堵墙:GPU显存带宽墙(HBM)、PCIe数据传输墙和算术强度墙。理解这三堵墙,就拿到了后续所有优化技术的钥匙。
-
合集:LLM服务和优化 -
01-模型服务基础认知:从"训练完的模型"到"可用的服务" -
02-LLM推理的内核与部署:从Token生成机制到vLLM实战 -
【LLM从入门到优化实战】03-从零搭建LLM服务:Batching、Streaming与多模型架构 -
【LLM从入门到优化实战】04-Agent时代的LLM服务架构:RAG、企业部署与Build-or-Buy
PART 01
为什么需要"先理解瓶颈"?
作者Chi Wang和Peiheng Hu讲了一段很重要的话。大意是:很多工程师学LLM优化时,上来就跳到"怎么做量化""怎么配Continuous Batching",但很少有人先问一句:这个优化的出发点是什么?它解决的到底是哪个瓶颈?
不知道瓶颈在哪,你就无法判断一个优化是否适合你的场景。比如量化主要压缩模型权重:如果你的瓶颈是decode阶段的显存带宽(而不是模型本身的大小),量化确实有帮助,但不是因为"模型变小了",而是因为"每次forward pass从HBM读的数据变少了"。理解这个微妙差别,你才知道在什么场景下量化收益最大。
PART 02
GPU到底是什么?一张"看懂GPU的说明书"
2.1 不是所有"核"都一样
读GPU规格表时,你真正需要关心的只有几个数字。
以NVIDIA H100为例,关键指标:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
三个指标对应三个瓶颈:
2.2 GPU显存 ≠ CPU内存
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
差距是数量级的。SSD和CPU内存的速度,在实时推理场景中根本不够用。模型权重必须常驻GPU显存(HBM)中。 如果每次推理都要从CPU内存搬运权重到GPU,那延迟就没法看了。
这就解释了为什么"模型加载"是一个需要认真设计的过程:后面会展开。
PART 03
模型加载:从磁盘到GPU的漫漫征途
图1 加载模型权重时的数据流
每一步都是一个带宽瓶颈。PCIe 4.0 x16 的理论带宽是约 32GB/s,而GPU的HBM带宽是 3000+GB/s,差了两个数量级。
模型越大,加载越慢。以一个70B参数的模型(BF16 ≈ 140GB)为例,从SSD通过PCIe搬运到GPU至少需要几十秒,这还没算模型初始化等开销。这也是第 2 篇讲的多模型场景中"冷启动延迟"问题的物理根源。
PART 04
模型有多大?两个公式搞定
4.1 模型权重大小
模型大小 ≈ 参数量 × 每个参数的字节数
常见精度:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
H100有80GB显存。一个 70B模型在BF16下需要 140GB,一张卡放不下。 这就是为什么需要Tensor Parallelism(多卡分片)或量化(INT8降到 70 GB,勉强能塞进一张H100)。
4.2 KV Cache大小(复习 + 深化)
图2 GPU内存使用细分
KV Cache = 2 × 层数 × 头数 × 每头维度 × 序列长度 × 精度字节数
对于Llama 2-70B在batch_size=1、序列长度 4096 时:2 × 80 × 64 × 128 × 4096 × 2 ≈ 10.7GB
加上模型权重(140GB)≈ 151GB。一张H100(80GB)根本装不下。这就是为什么你在实际部署中需要量化 + 张量并行 + 控制batch size和序列长度上限三管齐下。
而且这个计算揭示了另一个重要事实:KV Cache是随序列长度线性增长的,而注意力计算量是O(N²) 增长的。 长上下文场景下,KV Cache的内存压力远大于计算压力。
PART 05
算术强度:一根线分出了两个世界
5.1 定义
算术强度(Arithmetic Intensity):
算术强度 = 计算量(FLOPS)/ 内存访问量(Bytes)
单位:FLOP/Byte。它告诉你:每从显存读取一个字节的数据,能做多少次浮点运算。
这个值决定了一个操作是compute-bound还是memory-bound:
5.2 分析矩阵乘法的算术强度
对于两个N×N矩阵的乘法(C = A × B):
算术强度 ≈ 2N³ / (3N² × 2) = N/3
N越大,算术强度越高,越偏向compute-bound。这就是为什么大矩阵乘法能高效利用GPU:因为有足够多的计算来"覆盖"数据搬运的开销。
5.3 应用到Prefill和Decode
Prefill:处理整个prompt的所有token并行。注意力矩阵N_prompt × N_prompt,N较大 → 算术强度较高 → compute-bound。
Decode:每次只生成 1 个token。注意力矩阵 1 × N_total,计算量极小。但每次都需要从HBM读取整个模型权重(140 GB)和全部KV Cache → 算术强度极低 → memory-bound。
横轴是算术强度,纵轴是能达到的FLOPS。曲线有一个拐点:拐点左边(低算术强度)是memory-bound区域,加多少算力都没用;拐点右边(高算术强度)是compute-bound区域,加算力直接提升性能。
Decode坚定地站在拐点的左边。
这就是为什么:
PART 06
AI加速器之外的趋势
GPU以外的AI加速器趋势:Google TPU、AWS Inferentia等自研芯片的兴起。这些芯片的共同特征是:专为特定工作负载优化,在能耗和成本上寻求突破。
但对推理工程师来说,核心原则不变:无论用什么硬件,理解它的计算能力和内存带宽之比,以及你的工作负载落在哪个区间,是判断它是否适合你的任务的关键。
PART 07
小结
这一篇的核心是一个字:墙。
理解这三堵墙,你就拿到了开启后续所有优化技术的钥匙:
下一篇,我们开始逐一拆解这些优化技术。
PS:
最后,做个小小的推荐,目前正在进行的两个项目:
Agent Insight:openEuler孵化的项目,旨在让每一个Agent 都可被观测、可被评估、可自我进化。
AET(Agentic Engineering Team):openEuler孵化的项目,全流程 AI 辅助研发底座/引擎,覆盖从需求分析、设计、编码、测试到发布、运维的软件研发全生命周期。
Skill Radar:给Agent Skills技术画一张”活地图”,追踪Skills技术,让Agent能力进化有迹可循。
如果你对Agent Insight、AET感兴趣,欢迎参与进来,一起把它变得更好~~
🔗 Agent Insight:https://atomgit.com/openeuler/agent-insight
🔗 AET:https://atomgit.com/openeuler/agentic-engineering-team
「LLLM服务和优化:从入门到优化实战」系列共 10 篇文章,基于《Hands-On LLM Serving and Optimization》(O'Reilly 2026, Chi Wang & Peiheng Hu):

