1. 课程导入

1.1 为什么多卡推理会“卡”在负载不均上

当大语言模型(LLM)的参数量突破百亿、千亿级别后,单张 GPU 的显存容量与算力已无法满足推理需求。将模型切分到多张 GPU 上并行推理,成为生产环境的必然选择。然而,许多团队在完成多卡部署后,发现整体吞吐量远低于理论峰值,GPU 利用率参差不齐,甚至出现“一张卡忙到冒烟、另一张卡闲到发慌”的现象。这种多卡推理负载不均问题,直接决定了推理系统的成本、延迟与稳定性。

负载不均并非单一原因造成,而是模型切分策略、数据分发机制、GPU 间通信拓扑以及运行时调度共同作用的结果。其中,CUDA 拓扑感知部署是容易被忽视却影响深远的一环——它关注 GPU 在物理主机上的连接方式(如 NVLink、PCIe 交换机、NUMA 节点),并据此优化张量并行、流水线并行或专家并行(EP)的通信路径。

学习提示:本课程不要求你精通 CUDA 底层编程,但需要具备基本的 GPU 架构认知(如显存、SM、NVLink 概念)。课程将围绕“问题→原理→工具→实践”展开,帮助你建立从现象到根因的排查思维。

1.2 课程学习目标

完成本课程后,你将能够:

  • 诊断负载不均:使用 nvidia-smi、nsys、dcgm 等工具定位 GPU 利用率、显存带宽、通信耗时等关键指标,区分“计算瓶颈”与“通信瓶颈”。
  • 理解切分与通信的耦合关系:掌握张量并行(TP)、流水线并行(PP)、专家并行(EP)在不同拓扑下的通信模式,理解为何同一模型在不同机器上表现差异巨大。
  • 实施拓扑感知部署:通过 nvidia-smi topo -m 获取 GPU 拓扑矩阵,结合 NCCL 环境变量(如 NCCL_P2P_LEVEL、NCCL_TOPO_DUMP_FILE)优化通信路径,实现负载均衡。
  • 建立量化评估体系:使用吞吐量(tokens/s)、首 token 延迟(TTFT)、尾 token 延迟(TPOT)、GPU 利用率标准差等指标,客观评估优化效果。

1.3 课程结构总览

本课程共 30 章,按“认知→原理→工具→实战→调优”五个阶段组织,各阶段内容环环相扣:

阶段 章节范围 核心主题
认知基础 第 1-4 章 负载不均问题定义、GPU 硬件架构、CUDA 编程模型、通信原语
切分策略 第 5-9 章 TP/PP/EP 切分原理、显存与计算均衡、序列并行、MoE 负载
拓扑与通信 第 10-16 章 NVLink/PCIe 拓扑、NCCL 原理、拓扑感知分配、通信压缩
监控与诊断 第 17-22 章 性能剖析工具、负载采集、瓶颈定位、日志分析
部署与调优 第 23-30 章 容器化部署、动态批处理、自动并行、故障恢复、案例复盘

每章均配有可运行的示例、诊断命令或配置模板,建议在真实多卡环境(至少 2 张 GPU)中同步实践。

1.4 多卡推理负载不均:一个典型场景

假设你在一台 8×A100(40GB)服务器上部署 70B 参数的 LLM,采用张量并行(TP=8)方式将模型切分到全部 GPU。启动服务后,你观察到以下现象:

nvidia-smi 输出(节选):
GPU 0: 98%  |  GPU 1: 97%  |  GPU 2: 45%  |  GPU 3: 12%
GPU 4: 10%  |  GPU 5: 95%  |  GPU 6: 88%  |  GPU 7: 30%

GPU 0、1、5、6 利用率接近满载,而 GPU 3、4 几乎空闲。进一步使用 nsys profile 抓取通信事件,发现 GPU 3 和 GPU 4 之间的 NVLink 带宽利用率不足 5%,而 GPU 0 与 GPU 1 之间的带宽利用率高达 80%。这说明通信流量集中在部分链路上,而其他链路闲置。

这种不均的根因往往在于:

  1. 切分维度不当:TP=8 要求每层权重按列/行切分到 8 张卡,但若模型某些模块(如 MoE 的专家)本身负载不均衡,会导致部分 GPU 计算量偏大。
  2. 拓扑未感知:8 张 A100 可能分布在 2 个 NUMA 节点上,跨 NUMA 的 P2P 通信走 PCIe 而非 NVLink,带宽相差 5-10 倍。若未按拓扑分配 rank,就会造成通信热点。
  3. 调度策略简单:静态 batch 分配未考虑各 GPU 的实时负载,导致请求堆积在繁忙 GPU 上。

下图展示了同一模型在“未感知拓扑”与“拓扑感知部署”下的通信负载差异:

未感知拓扑(通信热点) GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 80% 30% 5% 5% 75% 85% 25% 98% 97% 45% 12% 10% 95% 88% 30% 拓扑感知部署(负载均衡) GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 45% 42% 40% 43% 41% 44% 42% 62% 60% 65% 61% 63% 62% 59% 64% 高负载 低负载 均衡

左侧场景中,GPU 0/1/5/6 承担了大部分通信与计算,而 GPU 3/4 几乎闲置;右侧通过拓扑感知将通信密集的 rank 分配到同一 NVLink 域内,各 GPU 利用率趋于一致,整体吞吐量提升约 1.8 倍。

1.5 常见误区与学习建议

误区一:认为负载不均只是“模型切分不均匀”导致的。实际上,即使切分完全均匀,通信拓扑不匹配同样会造成严重的负载倾斜。
误区二:盲目增加 GPU 数量就能线性提升性能。当通信成为瓶颈时,增加 GPU 反而可能降低加速比。
误区三:只关注 GPU 利用率,忽略显存带宽和通信延迟。利用率高不代表效率高,可能是在低效地“忙等”。

建议在学习过程中,始终带着“数据从哪来、到哪去、经过哪条链路”的视角分析问题。每章结束后,尝试用一张图或一张表总结该章的核心结论,逐步构建自己的多卡推理调优知识体系。

本章小结:多卡推理负载不均是切分策略、通信拓扑、调度机制共同作用的结果。CUDA 拓扑感知部署是解决该问题的关键手段之一。本课程将从硬件原理出发,逐步深入到工具实践与案例复盘,帮助你系统掌握多卡推理的优化方法。