没有NVLink怎么办?club-3090纯PCIe多卡P2P通信配置实战
【免费下载链接】club-3090Community recipes for serving LLMs on RTX 3090/4090/5090 CUDA gpus. Multi-engine (vLLM, llama.cpp, ik_llama) and model-agnostic. Currently shipping Qwen3.6-27B Qwen3.6 35B Gemma 4 26B Gemma 4 31B configs for 1× and 2× cards.项目地址: https://gitcode.com/gh_mirrors/cl/club-3090
club-3090是一个面向 RTX 3090/4090/5090 消费级显卡的开源项目,提供 vLLM、llama.cpp、SGLang 等多引擎的 LLM 多卡推理配置。很多用户以为双卡跑大模型必须上 NVLink 桥,实际上 club-3090 的默认路径在纯 PCIe 上就能稳定运行——而如果你愿意多做一步开启 PCIe P2P 通信,还能在预填充(prefill)阶段额外榨出 12%~59% 的吞吐。这篇实战指南就讲清楚:没有 NVLink 时,GPU 之间到底怎么通信、P2P 是否值得开、以及如何一步步配置和验证。
为什么"PHB"不是死胡同:纯PCIe双卡怎么通信
先纠正一个最常见的误解。运行nvidia-smi topo -m后看到 GPU 之间是PHB(经过 CPU 主桥)而不是PIX(PCIe 交换机),不代表配置有问题——绝大多数消费级主板根本没有 PCIe 交换芯片,两张卡都直接挂在 CPU 的 IO die 上,PHB就是正确且预期的结果。
关键结论在 docs/HARDWARE.md 中写得很明确:NVLink 不是必需的。club-3090 的双卡 compose 会在启动时自动检测 NVLink:
- 没检测到 NVLink(纯 PCIe):自动给 vLLM 传
--disable-custom-all-reduce,并设置NCCL_P2P_DISABLE=1,NCCL 通过主机内存中转 GPU↔GPU 流量——稳健、免调优、开箱即用; - 检测到 NVLink:自动启用 custom all-reduce,NCCL 走 NVLink 路径。
也就是说,纯 PCIe 机器的默认路径是"牺牲一点带宽换绝对稳定"。而 P2P 的价值在于:让 NCCL 直接走 PCIe 总线点对点传输,主要收益在 prefill(长上下文、大批 prompt),decode 收益很小。
三步自检:你的P2P到底开没开?
"P2P 开着吗"其实是三个独立的问题,混在一起排查是最常见的错误来源(完整剖析见 docs/PCIE_P2P.md):
| 层次 | 问题 | 怎么查 |
|---|---|---|
| 1. 驱动层 | GPU↔GPU 直接访问是否被驱动授权? | nvidia-smi topo -p2p rw显示OK |
| 2. NCCL 层 | 授权的通道是否被真正使用? | 看启动日志里的NCCL_P2P_LEVEL解析结果 |
| 3. vLLM 自定义 all-reduce | vLLM 额外的 kernel 是否启用? | vLLM 日志中Custom allreduce is disabled…表示没启用 |
第 3 层有个容易被忽略的设定:超过 2 张 PCIe 卡时,vLLM 会主动禁用 custom all-reduce(它要求全 NVLink 网格)。所以 3 卡及以上的 PCIe 机器看到这句日志属于设计如此,不是配置错误,P2P 依然通过第 2 层的 NCCL 通道生效。
快速配置清单:BIOS、插槽与NUMA
如果你决定要开 P2P(消费级 GeForce 卡的 P2P 需要打过补丁的驱动模块,stock 驱动会拒绝),先过一遍硬件清单,docs/PCIE_P2P.md 按顺序列了六道关卡:
- 拓扑:两卡必须在同一 CPU 插槽域,出现
SYS(跨 NUMA/跨插槽)直接放弃; - BIOS:开启
Above 4G Decoding+Re-Size BAR(ReBAR);裸机 P2P 建议 IOMMU 设为 passthrough(iommu=pt)并关闭 ACS——ACS 强制 peer 流量绕行根复合体,是"排名第一的隐形杀手"; - NUMA:EPYC 平台在 BIOS 里设
NPS1,保证两卡同属一个 NUMA 域; - 插槽间距:两张三槽卡之间至少隔 3 个槽位,注意 M.2/NVMe 可能与某条 x16 槽共享通道,装卡后用
nvidia-smi查实际训练出的链路宽度; - 优先选 CPU 直连通道:同为
PHB,挂在 CPU 直连通道的卡带宽可达 13 GB/s,挂芯片组的只有约 6.5 GB/s——topo -m分辨不出这个差异,只能实测; - ReBAR 是大 BAR1 的前提:补丁驱动路径通过 BAR1 映射整块显存,BAR1 只有 256MB 的卡(预 ReBAR 时代 VBIOS)此路径不可达。
💡 上图底部标注 "PCIe-only, 230W" ——这就是没有 NVLink 的 club-3090 双 3090 在 TP=2 下的真实水平,dual-dflash 档代码场景跑到 125 TPS。
在引擎里打开P2P:每个引擎都有自己的开关
驱动授权 ≠ 引擎在用,这是第二常见的坑。club-3090 各引擎的开关与默认值(详见 docs/PCIE_P2P.md → §0c):
| 引擎 | 默认 | 开启方式 | 逃生阀(关闭) |
|---|---|---|---|
| vLLM | 检测到 P2P 授权后自动开启 | NVLINK_MODE=pcie_p2p强制 | NVLINK_MODE=force_off或NCCL_P2P_DISABLE=1 |
| vLLM custom all-reduce | ≤2 卡随传输层启用,>2 卡自动禁用 | — | DISABLE_CUSTOM_ALL_REDUCE=1(只关 kernel,保留 NCCL P2P 传输层收益) |
| llama.cpp | ⚠️ 默认关(opt-in) | GGML_CUDA_P2P=1+--split-mode row/tensor | 取消该环境变量 |
| SGLang | 有授权时自动使用,无需操作 | 无 | NCCL_P2P_DISABLE=1 |
club-3090 的使用体验在于"保存一个设置即可全局生效":
bash scripts/settings.sh set NVLINK_MODE=pcie_p2p启动器 scripts/detect_nvlink.sh 随后会把所有双卡/多卡 compose 切到NCCL_P2P_LEVEL=PHB+ custom all-reduce 开启的状态;反过来,P2P 行为异常时一句bash scripts/settings.sh set NVLINK_MODE=force_off就能回到补丁前的行为。
验证P2P真正生效:report.sh 与 p2p-validate.sh
能力查询(topo -m)只能告诉你"能",不能证明"在用"。club-3090 提供两级验证:
bash scripts/report.sh(scripts/report.sh):启动容器后运行,读取Boot log highlights下的Interconnect verdict行,自动交叉比对主机能力与运行中容器的实际启用状态——✓ engaged/⚠ WARN(NVLink 桥闲置)/ℹ(驱动支持但容器没用上),并直接给出修复建议;bash scripts/p2p-validate.sh(scripts/p2p-validate.sh):跑两次带结果校验的 all-reduce(一次 P2P 开、一次关作对照),校验的是数值正确性而非"跑完了",能同时抓住"挂死"和"错数据"两类假授权问题,只读、不改任何配置。
还有一条实战建议:任何硬件/BIOS/驱动改动后,跑一次真实生成请求并读输出内容——项目里记录过"所有指标全绿、集合通信正常完成、但模型输出全是感叹号"的案例,只有读生成的文本才能发现。
实际能快多少?别被数字误导
来自 docs/PCIE_P2P.md → §6 的跨机器实测摘要:
| 场景 | 实测收益 |
|---|---|
| 双 3090,TP=2,仅看 NCCL 传输层 | prefill @10K +14.4%、@90K +12.2%,TTFT 降 13–15%,decode 在噪声范围内 |
| 双 3090,custom all-reduce 开启(P2P 机器的出货默认) | decode 叙事 +12.5% / 代码 +7.1% |
| 4×3090,TP=4 | prefill +74~85%,decode +8~9% |
| 虚拟机内双 3090(VFIO 直通) | prefill +16%~+59%(虚拟机的主机中转路径更慢,可回收空间更大) |
llama.cpp-sm layer/-sm tensor | 约等于 0——官方镜像未编译 NCCL,且 layer 模式走普通拷贝 |
两点提醒:
- 收益主要来自延迟而非带宽:张量并行 all-reduce 是大量小的串行传输,P2P 把单次延迟从 15.23 µs 打到 1.01 µs,链路利用率往往不到 20%。只看 GB/s 会得出"P2P 没用"的错误结论;
- 如果你只跑 GGUF/llama.cpp,打补丁驱动换不来可测量的收益,不值得为它维护 DKMS 构建。
什么时候不值得折腾P2P
- 单卡能装下模型:club-3090 的单卡配置(见 docs/SINGLE_CARD.md)对单用户流式生成往往是更划算的选择,第二张卡主要买的是容量与并发,不是速度;
- 只用
--split-mode layer:卡间流量只有约 7 MB/s,加速空间为零; - 追求省心:纯 PCIe 默认路径(NCCL 走主机内存中转)稳健免调,P2P 属于"锦上添花"的进阶项。
小结
没有 NVLink 的 club-3090 多卡机器完全可以用,而且比很多人以为的更快:默认路径开箱即用;想榨出 PCIe 总线的全部潜力时,按 docs/PCIE_P2P.md 的六道关卡逐项过一遍——BIOS 开 ReBAR/关 ACS → 装好补丁驱动 →settings.sh set NVLINK_MODE=pcie_p2p→report.sh看 Interconnect verdict →p2p-validate.sh做数值校验 → 读真实输出。双卡 prefill 提速两位数、虚拟机里最高近 60%,这就是纯 PCIe 多卡 P2P 通信的全部回报。相关延伸阅读:docs/DUAL_CARD.md(双卡选哪个 slug)、docs/HARDWARE.md(NVLink 与 PCIe 对比)。
【免费下载链接】club-3090Community recipes for serving LLMs on RTX 3090/4090/5090 CUDA gpus. Multi-engine (vLLM, llama.cpp, ik_llama) and model-agnostic. Currently shipping Qwen3.6-27B Qwen3.6 35B Gemma 4 26B Gemma 4 31B configs for 1× and 2× cards.项目地址: https://gitcode.com/gh_mirrors/cl/club-3090
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考