“世界第三”的 Kimi K3 开放权重后,我才看懂:8 张顶级 GPU 能跑,不等于真的能部署
2026 年 7 月 27 日,Kimi K3 正式开放完整模型权重。
这是近期大模型领域最值得关注的事件之一。
K3 拥有 2.8T 总参数、约 104B 激活参数、896 个路由专家,每个 Token 选择其中 16 个专家,同时支持最高 100 万 Token 上下文。按照官方公布的评测结果,它已经进入全球最强模型的第一梯队,也因此被很多人直接称为“世界第三的大模型”。
但比“世界第三”更有冲击力的,是另一件事:
这样一个第一梯队模型的完整权重,真的被放出来了。
很多开发者看到这里,第一反应是:
权重开放
=
可以下载
=
可以私有部署
=
终于不用调用闭源 API
然而,AMD 随后公布的 Day-0 部署方案,却给这种兴奋泼了一盆冷水。
K3 当前公开验证过的最低整机配置之一,是:
8 张 AMD Instinct MI355X
每张 288GiB HBM3E
总 HBM 超过 2TB
TP8 张量并行
即便如此,AMD 也明确说明:
这次验证的目标不是追求峰值性能,而是确认模型权重为什么能装进去、如何在 8 张 GPU 之间分配,以及能否完成最小正确性测试。
换句话说,这套配置证明的是:
K3 能加载
K3 能生成
K3 能完成正确性验证
但它没有证明:
K3 的首字延迟是多少
每秒能够生成多少 Token
可以支持多少并发用户
长上下文性能如何
单位 Token 成本是多少
是否适合长期生产运行
AMD 没有在这次验证中公布这些生产指标。
这就产生了一个非常有意思的矛盾:
一个被认为进入世界前三、已经开放完整权重的模型,为什么绝大多数企业还是部署不了?
答案并不只是显卡太贵。
真正的问题是:
当模型大到必须跨越多张 GPU 时,部署就不再是一道显存加法题,而变成了一道分布式系统题。
一、K3 开放的是模型权重,不是一条廉价部署捷径
过去部署 7B、14B、32B 模型时,我们通常只需要回答一个问题:
模型需要多少显存?
如果模型能装进显存,推理框架又支持相应架构,那么部署大概率就能继续进行。
但 K3 已经完全不是这个尺度。
它的模型 Checkpoint 大约为 1.56TB。
即使使用 8 张每张拥有 288GiB HBM 的 MI355X,也需要通过 TP8,把模型权重分散到所有 GPU 上。
这意味着一个请求不再由一张 GPU 独立完成。
而是可能变成:
GPU 0 计算一部分
GPU 1 计算一部分
GPU 2 计算一部分
……
GPU 7 计算一部分
↓
所有 GPU 交换结果
↓
完成同步
↓
继续计算下一层
从这一刻开始,决定系统性能的就不只是 GPU 算力。
而是:
GPU 计算能力
× 并行策略
× GPU 通信带宽
× PCIe / 高速互联拓扑
× P2P 能力
× 请求调度
× 推理引擎优化
任何一项严重退化,整套系统都会被拖慢。
所以,K3 真正值得研究的地方,不只是它拥有 2.8T 参数。
而是它把一个事实暴露得非常彻底:
前沿大模型已经不再只是一份神经网络权重,而是一台由模型、GPU、互联、通信库和调度系统共同组成的分布式计算机器。
二、为什么会出现“GPU 没跑满”?
这是很多多卡用户最困惑的问题。
明明服务器里安装了四张 GPU:
- 四张卡都被正确识别;
- 显存也全部占用了;
- 模型成功启动;
- 没有出现 OOM。
但运行模型时,却发现:
GPU 利用率忽高忽低
有的 GPU 长期等待
Token 生成速度没有明显提升
从两张卡增加到四张卡,延迟反而升高
很多人会认为:
是不是显卡算力不够?
是不是 CUDA 没安装好?
是不是量化模型有问题?
但真实原因可能恰恰相反:
GPU 计算得太快,剩下的大量时间都暴露成了通信和等待。
假设一个 Transformer 层被切分到四张 GPU:
GPU 0:计算矩阵的一部分
GPU 1:计算矩阵的一部分
GPU 2:计算矩阵的一部分
GPU 3:计算矩阵的一部分
↓
等待所有 GPU 完成局部计算
↓
All-Reduce / All-Gather
↓
合并计算结果
↓
进入下一层
一张 GPU 即使已经完成自己的部分,也不能直接进入下一层。
因为下一层需要的是完整结果。
它必须等待其他 GPU 完成,并等待集合通信结束。
NCCL 的集合通信要求参与操作的各个 Rank 共同完成相应操作。All-Reduce 会聚合所有 Rank 的结果,并将结果返回给各个 Rank;All-Gather 则会收集各 Rank 的数据,并将完整结果分发给所有参与者。
假设某一次执行周期是:
有效计算:10ms
跨卡通信:15ms
同步等待:5ms
那么总时间为:
10 + 15 + 5 = 30ms
真正用于 GPU 有效计算的时间占比是:
有效计算利用率
=
10 ÷(10 + 15 + 5)
=
33.3%
也就是说,剩下约三分之二的时间,GPU 并不是没有任务。
它是在等待。
整个执行过程可能不断重复:
计算 10ms
通信 15ms
等待 5ms
计算 10ms
通信 15ms
等待 5ms
计算 10ms
通信 15ms
等待 5ms
于是,你在 nvidia-smi 中看到的 GPU 利用率可能是:
100% → 20% → 0% → 100% → 15% → 0%
GPU 可能在等待:
- 其他 GPU 完成局部计算;
- NCCL 集合通信;
- PCIe 数据传输;
- CPU 内存中转;
- 跨 NUMA 节点传输;
- 上一个 Pipeline Stage;
- 最繁忙的 MoE 专家;
- 推理框架完成调度。
因此,GPU 利用率出现波动,不一定说明 GPU 算力不足。
更准确的判断是:
GPU 的计算阶段很短,通信和同步阶段太长。
多卡执行时间可以粗略理解为:
总执行时间
=
有效计算时间
+ 数据传输时间
+ 集合通信时间
+ 同步等待时间
+ 调度开销
当通信和等待时间超过计算时间时,继续增加 GPU 数量并不会自动提升速度。
因为 GPU 越多:
- 通信参与者越多;
- 同步点越多;
- 通信路径越复杂;
- 最慢 GPU 拖累全局的概率越高。
这就是多卡系统最反直觉的现象:
显卡越快,通信瓶颈反而可能越明显。
三、8 张 GPU 能运行,为什么不能证明 K3 能服务?
评价一次大模型部署,至少应该分成三个层次。
第一层:能加载
模型权重能够进入显存
不会发生 OOM
第二层:能生成
模型可以完成前向传播
能够正确输出 Token
第三层:能服务
TTFT 达标
TPOT 达标
吞吐量达标
并发能力达标
稳定性达标
单位成本达标
其中:
- TTFT 是从请求发出到第一个 Token 出现的时间;
- TPOT 是开始生成后,每个新 Token 所需的时间;
- Throughput 是整个系统每秒能够为所有用户生成多少 Token;
- Concurrency 是系统在延迟不失控的前提下,可以同时服务多少请求。
很多所谓的“最低配置”,只能证明前两层。
它证明模型能装进去,也能输出答案。
但如果没有公布:
TTFT
TPOT
单请求 Tokens/s
总吞吐量
并发用户数
P95 / P99 延迟
长时间运行稳定性
单位百万 Token 成本
就不能直接得出“适合生产部署”的结论。
AMD 的 8 张 MI355X 方案,本质上是一次 Day-0 容量与正确性验证,而不是完整的生产性能报告。AMD 还特别说明,模型在 TP8 下每张 GPU 约占用 190.974GiB 权重;一条百万 Token 序列的已知额外运行状态,估算还会占用每张 GPU 约 14.427GiB,但这尚未包括通信缓冲区、Kernel Workspace、CUDA Graph、内存碎片和框架运行时开销。
所以,“8 卡能跑”的准确含义是:
8 张 MI355X 能够容纳 K3
并完成最小功能验证
它不等于:
8 张 MI355X 已经能以合理成本
高并发、低延迟地服务 K3
“能运行”和“能服务”之间,隔着一整套推理系统工程。
四、多卡性能不能只看显卡,还要看整台机器的拓扑
很多人购买 GPU 服务器时,只看四件事:
有几个 PCIe 插槽
可以安装几张显卡
总显存有多少
电源功率够不够
但这些信息只能说明:
显卡能不能物理安装进去。
它不能说明:
这些显卡能不能高效协同。
真正决定多卡训练和推理性能的,是:
GPU 型号
+
PCIe 代际
+
每张 GPU 的实际通道数
+
PCIe 交换芯片
+
CPU 数量
+
NUMA 结构
+
GPU P2P 能力
+
NCCL 实际通信路径
例如,主板上虽然有四个物理 x16 插槽,但实际运行状态可能是:
GPU 0:PCIe 4.0 x16
GPU 1:PCIe 4.0 x16
GPU 2:PCIe 4.0 x8
GPU 3:PCIe 4.0 x8
物理上是 x16 长度的插槽,不代表它真的获得了 16 条 PCIe Lane。
有些主板会因为 CPU 可用 PCIe Lane 数量有限,在安装多张 GPU 后自动降速。
所以,看到“4 个 PCIe x16 插槽”时,还要继续问:
四张卡同时安装后
每张卡实际运行在 x16 还是 x8?
双路 CPU 服务器还可能出现另一种结构:
CPU 0
├── GPU 0
└── GPU 1
CPU 1
├── GPU 2
└── GPU 3
GPU 0 和 GPU 1 通信时,路径可能是:
GPU 0
→ PCIe Switch
→ GPU 1
但 GPU 0 和 GPU 2 通信时,路径可能变成:
GPU 0
→ PCIe
→ CPU 0
→ CPU 间互联
→ CPU 1
→ PCIe
→ GPU 2
这条路径跨越了两颗 CPU 和两个 NUMA 域。
通常意味着:
- 传输路径更长;
- 延迟更高;
- 可用带宽更低;
- CPU 间互联也会成为共享瓶颈;
- NUMA 内存访问更复杂。
NVIDIA 的 nvidia-smi topo -m 会显示 GPU、CPU、NUMA 和网络设备之间的拓扑关系。其中,PIX 表示经过单个 PCIe Switch;PXB 表示经过多个 PCIe Switch;PHB 表示经过 CPU 的 PCIe Host Bridge;SYS 则表示路径还需要穿越 NUMA 节点之间的 CPU 互联。
因此,可以粗略理解为:
NV#:通常最好
PIX:路径较短
PXB:经过多个 PCIe Switch
PHB:经过 CPU Host Bridge
NODE:同一 NUMA 节点内跨 Host Bridge
SYS:跨 NUMA 或 CPU 间互联
假设拓扑结果是:
GPU0 GPU1 GPU2 GPU3
GPU0 X PIX SYS SYS
GPU1 PIX X SYS SYS
GPU2 SYS SYS X PIX
GPU3 SYS SYS PIX X
这说明:
GPU0 和 GPU1 路径较近
GPU2 和 GPU3 路径较近
两组 GPU 之间需要跨 NUMA 或 CPU 互联
那么更合理的 TP2 组合是:
GPU0 + GPU1:实例 A
GPU2 + GPU3:实例 B
而不是:
GPU0 + GPU2
GPU1 + GPU3
必须记住:
GPU 编号相邻,不代表物理路径相邻。
多卡性能不是由显卡列表决定的。
它是由显卡之间的数据路径决定的。
五、最危险的情况:GPU 之间不能直接 P2P
理想的 GPU 间通信路径是:
GPU 0 显存
↓
GPU P2P
↓
GPU 1 显存
GPU 0 可以直接访问或传输数据到 GPU 1 的显存。
CUDA 是否支持两张 GPU 直接访问彼此显存,可以通过 cudaDeviceCanAccessPeer() 判断,并通过 cudaDeviceEnablePeerAccess() 启用。它是否可用,取决于具体的 GPU、PCIe 或 NVLink 拓扑以及系统配置。
如果 P2P 无法使用,数据传输可能需要经过主机内存:
GPU 0 显存
↓
PCIe
↓
CPU 内存
↓
PCIe
↓
GPU 1 显存
这会带来两个直接问题。
第一,多了一次或多次数据复制。
第二,CPU、系统内存带宽和 PCIe 会同时成为瓶颈。
原本应该由 GPU 直接完成的数据交换,现在需要 CPU 内存参与中转。
如果每生成一个 Token,都要在几十层甚至上百层模型中反复进行这种传输,性能损失会被不断放大。
NVIDIA 的 CUDA 文档明确说明,启用 P2P 后,GPU 间复制不再需要通过 Host Staging,也就是不必经过主机内存中转,因此通常会更快。
但 P2P 并不是“显卡插在同一台机器里”就自动成立。
它还可能受到以下因素影响:
- GPU 是否支持相应 P2P 路径;
- PCIe 拓扑;
- 驱动版本;
- BIOS 配置;
- 虚拟机环境;
- 容器对系统拓扑的暴露;
- IOMMU;
- ACS;
- GPU 与 PCIe Switch 的连接方式。
NCCL 官方文档指出,NCCL 会优先使用 GPU Direct 和 P2P 进行 GPU 间通信。但错误的虚拟机、容器、BIOS 或 PCIe 配置都可能导致 P2P 不可用或性能很差。
其中 ACS 是一个非常典型的坑。
ACS 可能把原本可以直接进行的 PCIe 点对点流量,强制重定向到 CPU Root Complex。
结果就是:
原本:
GPU 0 → PCIe Switch → GPU 1
变成:
GPU 0 → CPU Root Complex → GPU 1
NVIDIA 的 NCCL 故障排查文档明确指出,VT-d、IOMMU 和 ACS 可能干扰 GPU Direct,把点对点流量重定向到 CPU Root Complex,从而造成显著性能下降,严重时甚至可能导致任务挂起。
所以,绝对不能简单认为:
四张卡都插在同一台服务器里,就一定可以高速互访。
物理上位于同一台服务器,不等于逻辑上能够直接访问彼此显存。
六、不同并行方式,对通信的敏感度完全不同
很多多卡性能问题,本质上不是显卡性能差,而是并行策略和硬件条件不匹配。
常见并行方式至少包括:
数据并行 DP
张量并行 TP
流水线并行 PP
专家并行 EP
它们对 GPU 通信的依赖程度完全不同。
1. 数据并行:最适合消费级多卡推理
推理场景中的数据并行,可以理解为每张 GPU 保存一份完整模型,然后分别处理不同请求。
GPU 0:完整模型副本,处理用户 A
GPU 1:完整模型副本,处理用户 B
GPU 2:完整模型副本,处理用户 C
GPU 3:完整模型副本,处理用户 D
不同 GPU 之间几乎不需要频繁交换中间状态。
它的优点是:
- 单卡利用率通常更稳定;
- 总并发能力强;
- 对 PCIe 和 NVLink 要求较低;
- 单个请求不需要跨 GPU 同步;
- 某张 GPU 故障不一定影响全部服务;
- 尾延迟更容易控制。
缺点也很明显:
每张 GPU 都必须完整保存一份模型。
但只要模型能放进单卡,这通常就是四卡服务器最高效的使用方式。
例如,企业内部的:
- RAG;
- 知识库问答;
- Agent;
- 代码助手;
- 文档分析;
- OCR;
- Embedding;
- Reranker。
这些系统通常面对的是多个并发用户。
真正需要优化的是:
同时服务更多请求
而不是:
让一个请求同时占满所有 GPU
所以,只要模型能放进一张卡,优先考虑多个模型副本。
2. 张量并行:最容易被通信拖死
张量并行会把同一层中的矩阵计算切分到多张 GPU。
一层 Transformer
├── GPU 0 计算 25%
├── GPU 1 计算 25%
├── GPU 2 计算 25%
└── GPU 3 计算 25%
每张 GPU 完成自己的局部计算以后,还需要交换和合并结果。
因此,几乎每一层都可能执行:
- All-Reduce;
- All-Gather;
- Reduce-Scatter。
假设模型有 80 层。
那么生成一个 Token 的过程中,就可能发生大量跨 GPU 同步。
张量并行最麻烦的地方,不一定是单次传输量特别大。
而是:
通信发生得非常频繁。
所以它非常依赖:
- NVLink;
- NVSwitch;
- 高质量 PCIe P2P;
- 良好的 GPU 拓扑;
- NCCL 拓扑优化;
- 足够大的 Batch;
- 计算与通信重叠。
在只有 PCIe、没有 NVLink 的消费级多卡服务器上,经常会出现:
TP1:速度最快,但模型放不下
TP2:模型能运行,性能尚可
TP4:模型终于能放下,但生成速度下降
原因是 TP 从 2 增加到 4 后:
每张 GPU 的计算量减少了
但通信参与者增加了
同步点增加了
数据路径更加复杂
最慢 Rank 的影响更明显了
所以:
TP4 很多时候不是性能优化,而是显存不足时的容量妥协。
3. 流水线并行:通信少一些,但容易出现气泡
流水线并行按照模型层数进行切分。
GPU 0:第 1~20 层
GPU 1:第 21~40 层
GPU 2:第 41~60 层
GPU 3:第 61~80 层
GPU 0 完成前 20 层后,将 Hidden State 发送给 GPU 1。
GPU 1 再计算第 21~40 层。
与张量并行相比,它不需要在每一层内部进行完整的 All-Reduce。
相邻 Stage 主要传递 Hidden State。
但它存在一个严重问题:
Pipeline Bubble,也就是流水线气泡。
例如:
时间 1:
GPU0 工作
GPU1、GPU2、GPU3 等待
时间 2:
GPU0、GPU1 工作
GPU2、GPU3 等待
时间 3:
GPU0、GPU1、GPU2 工作
GPU3 等待
时间 4:
四张 GPU 才全部进入工作状态
想要减少流水线气泡,就需要持续输入多个 Micro-batch,让不同 Stage 同时处理不同批次。
但对于单用户、本地聊天和低并发推理:
请求数量不足
Batch 太小
Micro-batch 不够
流水线就很难被填满。
于是,即使安装了四张 GPU,也可能不断出现部分 GPU 空转。
4. 专家并行:对通信最凶险
专家并行是 K3 这类 MoE 模型最需要警惕的部分。
K3 拥有 896 个路由专家,每个 Token 选择其中 16 个专家。
这些专家会被分布到不同 GPU。
Router 完成选择后,可能得到:
Token 1 → GPU 0 上的专家
Token 2 → GPU 3 上的专家
Token 3 → GPU 1 上的专家
Token 4 → GPU 2 上的专家
系统先执行 Token Dispatch:
把 Token 发送到专家所在 GPU
专家完成计算后,再执行 Expert Combine:
把专家结果发送回来
重新恢复原来的 Token 顺序
合并计算结果
这个过程通常依赖 All-to-All 通信。
All-to-All 的意思是:
每张 GPU
都可能向其他所有 GPU 发送数据
同时
每张 GPU 也可能从其他 GPU 接收数据
NCCL 对 All-to-All 的定义是:每个 Rank 都提供面向所有目标 Rank 的数据块,并将对应数据块发送给相应 Rank。
专家并行还有一个比通信更加麻烦的问题:
专家负载不均衡。
例如,某个 Batch 的路由结果是:
专家 A:收到 10000 个 Token
专家 B:收到 8000 个 Token
专家 C:收到 100 个 Token
专家 D:收到 20 个 Token
专家 C 和专家 D 很快就计算完成。
但整个系统不能直接继续。
因为专家 A 还没有完成。
结果可能变成:
GPU 0:完成,等待
GPU 1:完成,等待
GPU 2:仍在处理热门专家
GPU 3:完成,等待
整个系统的速度,最终由最慢的那个 Rank 决定。
这就是分布式计算中的 Straggler,也就是掉队者问题。
因此,四种并行方式的通信敏感度可以粗略排序为:
数据并行 较低
流水线并行 中等
张量并行 较高
专家并行 最高
这也解释了为什么 K3 这种拥有 896 个专家的模型,需要高带宽、低延迟的高速互联域。
而不能简单地认为:
找几十张消费级 GPU
把显存加起来
就等于拥有一套 K3 推理集群
显存容量可能够了。
但通信系统很可能完全撑不住。
七、为什么 104B 激活参数不等于一个普通的 104B 模型?
很多人看到 K3 的参数配置:
总参数:2.8T
激活参数:104B
会下意识认为:
虽然 K3 有 2.8T 参数,但每次只用 104B,所以部署难度应该和一个 104B Dense 模型差不多。
这个结论不成立。
可以把 K3 想象成一家拥有 896 名专家的公司。
每次处理一个任务,只邀请 16 名专家参加。
这样做的好处是:
公司可以拥有巨大的知识容量
但不需要每个任务都让全部专家参与
这就是 MoE 的价值。
但是,虽然一次只邀请 16 名专家开会,896 名专家依然都需要办公室。
同样:
总参数量
决定所有模型权重需要占用多少空间
激活参数量
决定一个 Token 大约需要执行多少计算
2.8T 总参数解释了为什么 K3 的 Checkpoint 接近 1.56TB。
104B 激活参数解释了为什么每个 Token 不必让全部 2.8T 参数参与计算。
但 104B 激活参数没有包括:
- Router 计算;
- Token Dispatch;
- Expert Combine;
- All-to-All 通信;
- 专家负载不均衡;
- 跨卡同步;
- 通信缓冲区;
- 等待最慢 Rank。
因此:
激活参数描述的是“算多少”,不是“搬多少”,更不是“等多久”。
K3 每个 Token 的计算量可能接近一个超大 Dense 模型。
但它的系统行为和普通 Dense 模型完全不同。
八、看 K3 这样的超大模型,必须同时算四本账
以后看到一个超大模型,不能只看参数量。
至少要同时计算四本账。
第一笔账:权重存储
理论权重大小可以粗略估算为:
权重大小
≈ 参数数量 × 每个参数位数 ÷ 8
K3 有 2.8T 参数。
假设全部按照 4bit 保存:
2.8T × 4bit ÷ 8
≈ 1.4TB
但真实模型中还包括:
- 部分高精度参数;
- 量化 Scale;
- Embedding;
- Norm 参数;
- 视觉编码器;
- 元数据;
- 文件格式开销;
- 内存对齐。
因此,K3 实际 Checkpoint 大约为 1.56TB。
这笔账决定的是:
模型权重能不能放进显存?
第二笔账:每个 Token 的计算量
激活参数决定一次前向传播中,大约有多少参数真正参与计算。
MoE 的价值可以理解为:
很大的总参数容量
+
相对受控的单 Token 计算量
但它没有完整计算:
路由开销
通信开销
同步开销
负载不均衡
所以这笔账回答的是:
大约需要算多少?
而不是:
最终需要运行多久?
第三笔账:KV Cache 和运行状态
生产环境中的显存占用,不只有模型权重。
完整占用更接近:
总显存占用
=
模型权重
+ KV Cache
+ KDA / MLA 运行状态
+ 活跃请求状态
+ 通信缓冲区
+ Kernel Workspace
+ CUDA Graph
+ 框架运行时
+ 内存碎片
K3 支持最高 100 万 Token 上下文,但“一条百万 Token 请求能够运行”,不代表“几十条百万 Token 请求能够同时运行”。
并发环境中,运行状态还会受到以下因素影响:
上下文长度
× 模型层数
× 隐藏状态规模
× 活跃请求数量
所以,支持百万上下文是模型能力。
能否以合理成本并发服务百万上下文,则是系统能力。
第四笔账:GPU 通信
多卡总时间可以粗略理解为:
总时间
=
计算时间
+ 数据传输时间
+ 集合通信时间
+ 同步等待时间
+ 调度开销
这笔账最容易被忽略。
却经常决定模型最终到底能跑多快。
一个模型可能已经成功放进显存:
模型加载成功
GPU 全部识别
显存全部占用
但系统仍然可能处于:
GPU 很快完成计算
然后长时间等待通信
所以:
能不能装下,是容量问题;能不能高效运行,是系统问题。
九、没有 NVLink,消费级多卡还有价值吗?
当然有。
但必须用对方式。
以 RTX 4090 为例,它没有 NVLink,多卡之间主要依赖 PCIe。
这意味着它不适合所有跨卡并行方式。
如果一个模型可以装进单张 GPU,可以让多张 GPU 分别处理不同请求:
GPU 0:处理用户 A
GPU 1:处理用户 B
GPU 2:处理用户 C
GPU 3:处理用户 D
这种情况下,不同 GPU 之间几乎不需要频繁交换中间状态。
四张 GPU 仍然可以显著提高总吞吐。
所以,真正应该问的不是:
服务器里有几张 GPU?
而是:
一个请求需要跨越几张 GPU?
一个请求跨越的 GPU 越多,对通信的要求通常越高。
因此,消费级多卡最重要的原则不是:
尽量让所有 GPU
都参与同一个请求
而是:
尽量减少一个请求
需要跨越的 GPU 数量
十、四张消费级 GPU,应该怎么分配?
假设你有四张 GPU,可以根据模型容量分成三种情况。
场景一:模型可以装进一张 GPU
优先部署四个独立副本:
GPU 0:模型副本 A
GPU 1:模型副本 B
GPU 2:模型副本 C
GPU 3:模型副本 D
然后通过 API Gateway、LiteLLM 或负载均衡器分发请求。
如果并发量不高,也可以按照服务拆分:
GPU 0:主语言模型
GPU 1:视觉语言模型
GPU 2:Embedding + Reranker
GPU 3:OCR、批处理或备用实例
这通常比强行把四张卡绑成一个 TP4 实例更加稳定。
场景二:模型必须两张 GPU 才能装下
优先考虑两个 TP2 实例:
GPU 0 + GPU 1:模型实例 A
GPU 2 + GPU 3:模型实例 B
而不是一个 TP4 实例:
GPU 0 + GPU 1 + GPU 2 + GPU 3
两个 TP2 通常意味着:
- 每个实例参与通信的 GPU 更少;
- 总并发能力更高;
- 尾延迟更稳定;
- 故障隔离更容易;
- GPU 更容易持续执行有效计算。
但 GPU 配对不能只看编号。
应该结合:
nvidia-smi topo -m
优先选择 PIX、PXB 或高速互联路径较近的 GPU。
场景三:模型必须四张 GPU 才能装下
这时候 TP4 是容量上的被迫选择。
目标不应该再是:
四张 GPU 必须长期保持 100% 利用率
更合理的目标是:
模型稳定加载
不发生 OOM
TTFT 可以接受
TPOT 可以接受
并发达到业务要求
NCCL 没有走异常路径
没有严重 Host Staging
单位请求成本合理
如果跨卡通信已经占用大量时间,那么 GPU 利用率只有 40% 或 50%,不一定说明程序写错了。
它可能已经接近当前硬件拓扑的性能上限。
十一、真正排查多卡性能,不能只看 nvidia-smi
nvidia-smi 的 GPU 利用率,只能告诉你某个采样窗口内 GPU 是否在执行 Kernel。
它不能直接告诉你:
GPU 为什么没有执行 Kernel
是在等待数据
还是在等待同步
还是在等待 CPU
还是在等待其他 GPU
一套完整的多卡排查流程,至少应该包括以下步骤。
第一步:查看 GPU 拓扑
nvidia-smi topo -m
重点查看:
GPU 之间是 NV#、PIX、PXB、PHB、NODE 还是 SYS
GPU 分别属于哪个 NUMA 节点
GPU 和网卡之间的距离
第二步:查看 PCIe 实际速率
nvidia-smi -q
或者使用:
lspci -vv
确认每张 GPU 实际运行在:
PCIe 4.0 x16
PCIe 4.0 x8
PCIe 5.0 x16
不要只看主板插槽外观。
第三步:检查 GPU P2P
nvidia-smi topo -p2p p
其中 p 用于检查 PCIe P2P 能力。
NVIDIA 文档也建议使用 CUDA Samples 中的工具测试 GPU 间 Peer Access、带宽和延迟。
例如:
p2pBandwidthLatencyTest
它可以帮助确认:
- GPU 是否支持 Peer Access;
- 单向 P2P 带宽;
- 双向 P2P 带宽;
- GPU 间延迟。
第四步:测试 NCCL 集合通信
可以使用 nccl-tests:
./build/all_reduce_perf \
-b 8M \
-e 8G \
-f 2 \
-g 4
分别测试:
-g 1
-g 2
-g 4
重点关注:
algbw
busbw
不同数据量下的带宽
GPU 数量增加后的扩展效率
如果从两张 GPU 增加到四张 GPU 后,通信带宽没有合理扩展,甚至明显下降,就需要继续检查:
- PCIe 拓扑;
- P2P;
- PCIe Lane;
- NUMA;
- CPU 绑定;
- ACS;
- IOMMU;
- BIOS 设置。
第五步:查看 NCCL 实际通信路径
运行任务前开启日志:
export NCCL_DEBUG=INFO
export NCCL_DEBUG_SUBSYS=INIT,GRAPH,P2P
重点观察 NCCL 选择的路径:
P2P / IPC
SHM
NET
Socket
可以粗略理解为:
P2P / IPC:
GPU 之间直接传输,通常更理想
SHM:
通过主机共享内存中转
NET / Socket:
通过网络或 Socket 通信
如果同一台服务器中的 GPU 通信大量退化到 SHM,就需要进一步检查:
- P2P 是否被禁用;
- ACS 是否强制流量绕路;
- IOMMU;
- 容器权限;
/sys是否正确挂载;- PCIe 拓扑;
- 驱动和 NCCL 版本。
第六步:对比 TP1、TP2、TP4
如果显存允许,应分别测试:
TP1
TP2
TP4
每一种配置至少记录:
- TTFT;
- TPOT;
- 单请求 Tokens/s;
- 总吞吐量;
- 并发能力;
- P50 延迟;
- P95 延迟;
- P99 延迟;
- GPU 利用率;
- GPU 显存占用;
- CPU 内存占用。
不要只比较模型能不能启动。
真正需要回答的是:
GPU 数量增加以后,业务指标到底有没有改善?
十二、买显卡之前,应该先决定怎么并行
很多人的采购顺序是:
先买显卡
→ 再选择模型
→ 最后研究怎么并行
更合理的顺序应该反过来:
先确定业务负载
→ 再确定模型规模
→ 再选择并行策略
→ 最后选择硬件
采购之前,至少应该回答以下问题。
1. 模型能不能装进一张卡?
如果可以,优先考虑多个独立副本。
2. 模型至少需要几张卡?
能用 TP2,就不要为了“让所有 GPU 都参与”而强行使用 TP4。
3. 业务目标是低延迟还是高并发?
低延迟更怕跨卡通信。
高并发通常更适合多个独立副本。
4. 模型是 Dense 还是 MoE?
MoE 对以下能力更加敏感:
All-to-All
专家负载均衡
专家放置
GPU 高速互联
跨节点 RDMA
5. 每张 GPU 实际获得多少 PCIe Lane?
物理 x16 插槽,不等于实际运行在 x16。
6. GPU 是否跨 CPU 和 NUMA?
跨 NUMA 会增加通信路径和延迟。
7. GPU P2P 是否真正可用?
必须通过命令和基准测试确认。
8. NCCL 实测带宽是多少?
购买多卡服务器时,应该要求供应商提供真实 NCCL 测试结果,而不只是显卡规格表。
十三、多卡服务器真正的采购清单
下一次采购多卡服务器,不要只问:
可以安装几张显卡?
总显存有多少?
电源功率够不够?
还要继续追问:
每张 GPU 实际运行在 PCIe x16 还是 x8?
四张卡同时安装后是否会降速?
GPU 分别挂在哪一颗 CPU 下?
GPU 是否跨 NUMA 节点?
GPU 之间是 NV#、PIX、PXB、PHB 还是 SYS?
是否存在 PCIe Switch?
GPU P2P 是否可用?
ACS 和 IOMMU 如何配置?
NCCL All-Reduce 实测带宽是多少?
目标模型准备使用 DP、TP、PP 还是 EP?
TP2 和 TP4 的真实性能分别是多少?
是否支持 GPU Direct RDMA?
跨节点网络使用什么网卡和交换机?
显卡型号只能告诉你:
单个计算节点有多强
拓扑和通信才能告诉你:
这些节点能不能组成一个高效系统
结语:K3 开放了世界级模型,但没有消灭系统工程门槛
Kimi K3 的开放,确实具有标志性意义。
一个拥有 2.8T 参数、896 个专家、百万 Token 上下文、进入全球第一梯队的模型,其完整权重已经可以被开发者获取。
但 K3 同时也证明了一件更现实的事:
模型权重开放,不等于部署门槛消失。
8 张 MI355X 可以让 K3 完成加载和正确性验证。
但这首先解决的是:
模型能不能放进去?
它还没有完整回答:
模型放进去以后
能不能以合理的吞吐、延迟和成本运行?
同样,四张 24GB 显卡的确可以提供 96GB 总显存。
但它们不会自动变成一张拥有 96GB 统一显存、四倍算力和四倍速度的超级显卡。
显存只能相对直接地相加。
性能却取决于:
单卡计算能力
× 并行策略
× GPU 通信带宽
× PCIe 拓扑
× P2P 能力
× NUMA 路径
× 批处理与调度
× 推理框架优化
对于消费级多卡服务器,更合理的原则通常是:
模型尽量控制在一到两张 GPU 内
+
使用多个模型副本提高并发
+
按照真实拓扑选择 GPU 组合
+
让不同 GPU 承担不同服务
+
容量不足时再提高张量并行规模
以后再看到:
支持八卡
总显存 192GB
四卡并行加速
不要只看 GPU 数量。
真正应该追问的是:
这些 GPU 之间如何通信?
数据会经过哪些设备?
P2P 是否可用?
是否跨 CPU 和 NUMA?
NCCL 实测带宽是多少?
一个请求需要跨越几张 GPU?
选择的是 DP、TP、PP 还是 EP?
当你开始关注拓扑、P2P、NCCL、NUMA 和并行策略时,才算真正从“会买显卡”,进入了“会设计大模型计算系统”的阶段。
最后记住一句话:
K3 开放的是世界第一梯队模型的权重,但真正让这种模型运行起来的,不是某一张最强显卡,而是让几十张甚至上百张 GPU 像一台机器一样协同工作的系统能力。
文章标签:Kimi K3、大模型部署、MoE、GPU 通信、NCCL、张量并行、数据并行、流水线并行、专家并行、PCIe、P2P、NUMA、RTX 4090、AMD MI355X、分布式推理
更多推荐
所有评论(0)