最近在跟进大模型推理优化时,注意到 Cerebras CEO 在一次公开分享中聊到一个非常夸张的对比数据:晶圆级架构(Wafer Scale Engine)在某些推理任务上比传统 GPU 快 2500 倍。乍一看这个数字很唬人,很多人第一反应是“营销话术”。但仔细拆解背后的原理后,会发现这其实不是单纯的算力碾压,而是访存架构和数据搬运方式的彻底重构。
这篇文章不打算只复述新闻,而是想从大模型推理的底层原理出发,系统讲清楚三个问题:为什么传统 GPU 推理会遇到性能瓶颈;晶圆级架构通过哪些设计把瓶颈绕开;以及我们能从中学到哪些推理优化思路,并直接应用到自己的部署工作中。
如果你是做推理框架选型、模型压测、或正在被“GPU 占用率很高但生成速度上不去”折磨的开发者,这篇文章应该能给你一个比较完整的思考框架。
1. 背景:大模型推理的核心瓶颈是“内存墙”
1.1 算力不是唯一指标
很多人在评估推理硬件时,第一眼会看峰值算力,比如每秒多少 TFLOPS。但实际跑大模型时,真正决定生成速度的往往是另一个指标:内存带宽(Memory Bandwidth)。
为什么?因为大模型推理的 Decode 阶段是典型的 Memory-Bound 场景,也就是“被内存读取速度限制住”,而不是“被计算能力限制住”。
我们以 7B 模型为例,如果用 FP16 加载权重,权重文件大小大约是 14GB。每生成一个 token,理论上需要把模型全部权重从显存读到计算单元中至少一遍。假设你希望生成速度达到 30 tokens/s,那每秒需要搬运的权重数据大约是:
- 14GB × 30 = 420GB/s
如果模型变成 70B,权重体积约 140GB,达到同样的 30 tokens/s,就需要 4.2TB/s 的读取带宽。
这个需求对当前硬件来说并不轻松。主流单卡 HBM 带宽大概在 3TB/s 到 5TB/s 之间,也就是说,跑一个 70B 模型,单卡带宽已经快被吃满,更不用说还要处理 KV Cache、中间激活值等其他数据。
1.2 传统 GPU 集群的额外开销
单卡带宽紧张只是一方面。当模型大到一张卡放不下时,就需要把模型切到多张 GPU 上,这时就会出现另一个开销:跨卡通信。
每生成一个 token,张量并行或多卡推理都需要做 AllReduce 之类的集合通信操作。通信频率高、数据量大,最终导致“算力堆上去了,但多张卡有一大半时间在等数据同步”。这也是很多人做多卡推理时发现“4 卡性能不到单卡 4 倍”的重要原因。
2. 理解大模型推理的两个阶段:Prefill 与 Decode
在讨论架构优化之前,有必要把推理过程拆开。大模型生成一个完整回答,宏观上分两个阶段:
2.1 Prefill(预填充阶段)
输入提示词后,模型并行计算所有输入 token 的中间状态,同时生成第一块 KV Cache。这个阶段计算量大,但只需要做一次,属于 Compute-Bound 场景。
2.2 Decode(生成阶段)
模型逐个生成 token,每生成一个新 token,都需要读取权重,并读写 KV Cache。这个阶段计算量相对小一些,但权重读取是串行的,对带宽要求极其高,属于 Memory-Bound 场景。
可以做一个粗略的代码估算,感受一下模型对带宽的需求:
# 估算模型 Decode 阶段理论所需带宽 model_size_b = 7 # 模型参数量,单位 B dtype_bytes = 2 # FP16 每个参数占字节数 tokens_per_sec = 30 # 目标生成速度 weight_bytes = model_size_b * 1e9 * dtype_bytes bandwidth_needed = weight_bytes * tokens_per_sec print(f"7B 模型在 {tokens_per_sec} tokens/s 下,") print(f"理论需要 {bandwidth_needed / 1e12:.2f} TB/s 的权重读取带宽")在传统 GPU 上,权重从 HBM 读入 SRAM 的路径长、延迟高;而在 Cerebras 这类晶圆级架构中,权重直接放在靠近计算核心的片上 SRAM,物理距离短、总带宽极高。
2.3 Decode 阶段还有一个隐藏瓶颈:KV Cache
长对话场景会把 KV Cache 越撑越大。GPU 的显存容量有限,当上下文变长,KV Cache 占用上升,模型实际可用的权重缓存空间就更小,甚至需要把部分数据换出显存,性能进一步恶化。
这也是为什么长上下文成为推理性能压测中最容易暴露硬件短板的项目。
3. Cerebras 晶圆级架构(WSE)核心设计解析
3.1 什么是晶圆级架构
传统芯片制造是把一个晶圆切成几十个小芯片,再把小芯片封装起来,通过 PCB 走线互联。Cerebras 的做法恰恰相反:不切晶圆,把整个晶圆直接做成一个超大芯片,这就是晶圆级引擎(Wafer Scale Engine,简称 WSE)。
一个晶圆上放置了海量的计算核心、片上 SRAM 和核心间高速互联网络。所以从系统角度看,它更像一台“单芯片巨型计算机”,而不是一张需要插在服务器里、跟其他卡通信的加速卡。
3.2 核心设计一:超大片上 SRAM
普通 GPU 虽然有高带宽 HBM,但 HBM 和计算核心之间隔着封装基板、互连层,路径较长。WSE 的优势在于把大量 SRAM 直接做到同一片晶圆上,和计算核心的距离极短,访问延迟和传输功耗都显著下降。
官方公开演示数据显示,WSE 的片上 SRAM 总容量可以达到几十 GB 量级,总带宽能到每秒 PB 级别。这对于 Decode 阶段非常有利:模型权重不需要反复从外部 DRAM 搬运,而是大部分时间都留在片上。
3.3 核心设计二:片上互联替代外部总线
GPU 集群需要依赖 NVLink、PCIe、InfiniBand 等外部互连来做多卡通信。外部互连的带宽再高,也远不如芯片内部的物理连线。
WSE 把所有计算核心放在同一个晶圆上,核心之间的通信走的是片内高速网络,通信延迟低、带宽高。对于需要频繁做梯度同步或 KV Cache 传输的推理任务,这个设计能显著减少“等待数据”的时间。
3.4 与传统 GPU 集群的对比
| 对比维度 | 传统 GPU 多卡集群 | 晶圆级架构 WSE |
|---|---|---|
| 权重存放位置 | 主要在 HBM 显存中 | 大量数据留在片上 SRAM |
| 数据搬运距离 | 跨封装、跨 PCB、跨服务器 | 片内短距离传输 |
| 多核通信方式 | NVLink/PCIe/InfiniBand 等外部互联 | 片内高速网络 |
| 长上下文 KV Cache | 受显存容量限制,可能溢出 | 片上容量大,缓存命中率高 |
| 编程模型 | CUDA、PyTorch、vLLM 生态成熟 | 专用编译器和部署工具链 |
这里要说明一下,基础设施成熟度是目前 WSE 推广的最大挑战之一。GPU 生态经过多年积累,各种推理框架、算子库、调度器都很成熟。而晶圆级架构需要适配新的编译器和部署工具链,迁移成本不可忽略。
4. 2500 倍性能差距来自哪里
4.1 先给这个数字做“限定”
认真说,2500 倍不是所有推理任务下都能复现的,它是在特定配置下测出来的结果。Cerebras CEO 分享这个数据时,强调的场景是长上下文、大批量、生成阶段的运行情况。在这些场景下,传统 GPU 的弱点会被放大,而 WSE 的优势正好被击中。
所以不要把这个数字理解为“WSE 在所有场景下都秒杀 GPU”。更准确的理解是:在部分推理工作负载中,晶圆级架构展现了数量级级的访存优势。
4.2 三个加速来源
拆开来看,性能提升主要来自三个方面:
- 访存距离缩短
GPU 读取 HBM 数据需要经过较长的物理路径,而 WSE 的片上 SRAM 和计算核心靠得非常近。对于 Decode 阶段这种“每生成一个 token 就要完整读一遍权重”的场景,访存距离的缩短直接影响延迟。
- 通信开销降低
GPU 集群在长上下文推理时,KV Cache 可能会分散在多张卡上,每次生成 token 都要跨卡收集。wSE 的片上互联把所有核心连在一起,逻辑上更像一块“大内存”,不需要频繁跨卡通信。
- 缓存命中率提升
传统 GPU 的 L2 Cache 通常只有几十 MB,而 WSE 的片上 SRAM 容量在几十 GB 量级。更大的缓存意味着更多权重和 KV Cache 可以驻留在片上,减少对容量较低的外部显存的依赖。
4.3 为什么长上下文场景差距最大
长上下文推理时,KV Cache 体积会迅速膨胀。GPU 显存不够时,KV Cache 只能溢出到内存甚至磁盘,这会导致生成速度断崖式下降。
而 WSE 得益于超大片上 SRAM,可以在片上容纳更大规模的 KV Cache,因此上下文越长,它在缓存命中率上的优势越明显。这也是 2500 倍这个数字更容易在长上下文测试中出现的根本原因。
5. 实操:用主流推理框架验证与优化性能
虽然我们短期内不太可能直接上手 WSE,但完全可以借鉴这套“让数据少搬家”的思路,把手头 GPU 推理优化到更好。下面是一套可在现有环境直接运行的验证流程。
5.1 环境准备
建议环境如下,实际版本请以你的项目为准:
- 操作系统:Ubuntu 20.04 或 22.04
- GPU:NVIDIA 系列,显存建议 16GB 以上
- Python:3.10+
- CUDA:11.8 或 12.x
- PyTorch:2.x
# 创建一个新的虚拟环境 python3 -m venv infer-env source infer-env/bin/activate # 安装 PyTorch(请根据官方命令选择对应 CUDA 版本) pip install torch --index-url https://download.pytorch.org/whl/cu1215.2 用 vLLM 部署模型
vLLM 是目前最常见的推理框架之一,它的核心优势是 PagedAttention 和 Continuous Batching,能够提高 GPU 利用率,间接减少“带宽等待时间”。
# 安装 vLLM pip install vllm # 启动推理服务,注意替换模型路径 vllm serve Qwen/Qwen2.5-7B-Instruct \ --max-model-len 8192 \ --gpu-memory-utilization 0.9 \ --tensor-parallel-size 1参数说明:
--max-model-len:最大上下文长度,限制 KV Cache 上限。--gpu-memory-utilization:控制显存预留比例,建议留部分余量。--tensor-parallel-size:多卡张量并行度,单卡时设为 1。
不要盲目把max-model-len拉大,上下文越长 KV Cache 占用越高,反而可能导致服务 OOM。
5.3 用 Ollama 提升推理生成速度的配置思路
如果本地体验模型,Ollama 是更轻量的选择。影响生成速度的配置主要集中在 KV Cache 和 Flash Attention 上。
# 设置环境变量后再启动服务 export OLLAMA_KV_CACHE_TYPE=q8_0 export OLLAMA_FLASH_ATTENTION=1 ollama serveOLLAMA_KV_CACHE_TYPE=q8_0:将 KV Cache 压缩为 8-bit,减少显存占用。OLLAMA_FLASH_ATTENTION=1:启用 Flash Attention,减少显存读写。
注意,Ollama 版本差异可能导致环境变量不生效,建议打开服务端日志确认。你还可以通过/set parameter num_ctx 4096控制上下文长度,避免长对话时 KV Cache 膨胀。
5.4 简易性能测试脚本
使用 OpenAI 兼容接口测试 vLLM 的延迟和吞吐,重点关注两个指标:首 token 延迟(TTFT)和生成速度(TPOT)。
import time import requests url = "http://localhost:8000/v1/completions" payload = { "model": "Qwen/Qwen2.5-7B-Instruct", "prompt": "请用三句话介绍大模型推理优化", "max_tokens": 128, "temperature": 0.7, } start = time.time() resp = requests.post(url, json=payload, timeout=60) data = resp.json() total_time = time.time() - start text = data["choices"][0]["text"] print(f"回复内容:{text}") print(f"总耗时:{total_time:.2f}s") print(f"生成字数:{len(text)}")如果要测量 TTFT,可以改用流式接口:
import time import requests url = "http://localhost:8000/v1/completions" payload = { "model": "Qwen/Qwen2.5-7B-Instruct", "prompt": "请写一段代码", "max_tokens": 64, "stream": True, } t0 = time.time() first_token_time = None with requests.post(url, json=payload, stream=True, timeout=60) as r: for line in r.iter_lines(): if line and first_token_time is None: first_token_time = time.time() - t0 print(f"首 Token 延迟:{first_token_time:.2f}s")5.5 结果解读与优化方向
如果测试发现生成速度不理想,先不要急着换硬件,按下面逻辑排查:
- 检查是否触发显存交换(OOM 日志)。
- 检查上下文长度是否远超业务真实需求。
- 检查量化级别,FP8 或 INT4 能显著降低权重读取量。
- 检查是否开启 PagedAttention、FlashAttention。
这些优化的本质都是同一个方向:减少数据搬运,让有限的内存带宽做更多有用的事。
6. 常见问题与排查思路
在推理优化这条路上,下面几个问题出现频率最高,整理成表格方便快速定位:
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| GPU 占用率很高但生成速度慢 | Decode 阶段是 Memory-Bound,带宽饱和 | 降低 KV Cache 精度、做量化、缩短上下文 |
| 长上下文时速度明显下降 | KV Cache 膨胀,显存带宽压力增大 | 使用 PagedAttention,限制最大上下文 |
| 多卡推理速度增长不明显 | 跨卡通信成为瓶颈 | 减小并行度,或做好模型切分策略 |
| 服务器内存频繁交换 | 显存容量不足,部分参数被换出 | 增加显存,或使用 INT8/INT4 量化 |
| Ollama 生成速度慢 | 上下文过长、KV Cache 内存占用高 | 调整 num_ctx,启用 Flash Attention |
| 多轮对话越聊越慢 | 历史会话累计的 KV Cache 越来越多 | 做历史摘要压缩,限制上下文窗口 |
还有一个容易被忽略的问题:服务器的普通内存容量和推理卡之间其实是相互影响的。推理引擎会在加载模型、缓存数据集时占用主机内存;如果主机内存不足,数据可能被交换到磁盘,进一步拖慢运行速度。
因此部署推理服务时应同时关注显存和内存两方面的资源规划:
- 模型权重、KV Cache、临时激活值应尽量放在显存。
- 预留足够主机内存用于框架开销和数据处理。
- 监控
free -g与nvidia-smi,避免内存交换。
7. 推理框架学习路线与工程建议
7.1 推理框架学习路线
如果你想系统学习大模型推理优化,建议按这条路线推进:
- 基础阶段:理解 Transformer 架构、KV Cache、注意力机制。
- 框架阶段:掌握 vLLM、SGLang、llama.cpp、Ollama 至少其中两种的使用和部署。
- 算子阶段:了解 FlashAttention 的基本原理,学习 TensorRT-LLM 或 MLIR 的基本用法。
- 调度阶段:研究 Continuous Batching、投机采样、量化蒸馏等进阶技术。
- 硬件阶段:对比不同芯片、不同内存架构在推理场景下的优劣。
不要把时间全部花在刷框架 API 上,核心是理解“推理性能模型”,知道瓶颈在计算还是在访存。
7.2 工程建议:把“减少数据搬运”当成第一原则
在实际项目中,以下实践能比较稳定地提升推理性能:
- 量化优先:FP16 改 FP8/INT8,权重读取量直接减半或四分之一。
- 上下文压缩:非必要不保留完整历史,做摘要或滑动窗口。
- 动态批处理:开启 Continuous Batching,提高吞吐,减少空闲等待。
- 投机采样:用小模型草稿、大模型验证,减少 Decode 步数。
- 监控指标:统一记录 TTFT、TPOT、吞吐、排队延迟。
7.3 硬件选型:GPU 还是晶圆级架构
虽然 WSE 在特定推理场景表现激进,但它并不是万能答案。
- 如果你需要跑成熟的 PyTorch 生态、频繁切换模型结构、依赖社区算子库,GPU 生态仍是更稳妥的选择。
- 如果你有稳定的大模型长上下文推理需求,且希望省去多卡通信和显存管理成本,晶圆级架构值得关注。
- 现实工程中,混合架构也很常见:用 GPU 做训练和 Prefill,用更贴合访存的硬件做 Decode 和长上下文推理。
选型的核心是建立在自己业务的 In/Out 特征上,先压测,再选型。
8. 总结
回到最初的问题:Cerebras CEO 说晶圆级架构推理快 2500 倍,这背后不是单纯的算力碾压,而是通过将数据存放在离计算单元更近的片上 SRAM、用片内互联消除跨卡通信、提升长上下文场景的缓存命中率三大手段,针对性解决了大模型推理中最棘手的“内存墙”问题。
对于普通开发者来说,即使暂时用不上 WSE,这个案例也提供了一个很重要的视角:优化的关键不是盲目堆算力,而是先弄清楚你的任务是被计算限制,还是被带宽限制。
在实际项目中,建议先用 vLLM、Ollama 等框架做一轮基准测试,记录 TTFT、TPOT 和 GPU 利用率;再通过量化、上下文压缩、Flash Attention 等手段压低数据搬运量。等你把这些优化都做完了,再回头看硬件差异,就能更准确地判断“换架构”到底值不值。