双魔改卡实现P2P的新路线
-
双魔改卡实现P2P的新路线
魔改卡通常采用特殊 PCB / VBIOS,因此和正常卡 在 PCIe ReBAR / BAR1 方面存在一些差异。
除了主板是否支持ReBAR,魔改卡的BAR1也是其中一堵高墙,最近发现除了传统的“ReBAR + P2P 驱动”路线之外,现在其实出现了一条专门绕开 256MB BAR1 限制的新路线。
如果这条路线能够进一步成熟,那么对于使用魔改卡推理,会挺有意义。
一、传统双魔改卡 P2P 的路线
目前双卡 P2P,比较常见的思路大致是:
双 GPU ↓ 开启 Above 4G Decoding / ReBAR ↓ 让 GPU BAR1 尽可能扩大 ↓ 使用修改后的 NVIDIA P2P 驱动 ↓ CUDA P2P ↓ NCCL P2P ↓ 双 GPU 直接通信正常的消费级 NVIDIA GPU,只要平台、VBIOS 和驱动条件合适,就可以通过这种方式实现 GPU
GPU 的直接 PCIe 通信。这样做最大的好处就是:
GPU0 → PCIe → GPU1数据可以直接从一张显卡到另一张显卡,不需要先经过系统内存再绕回来。
对于大模型推理来说,这一点很重要,尤其是 Tensor Parallel(TP)。因为 TP 运行过程中需要频繁进行 GPU 间通信。
二、问题就在 BAR1
问题是,传统线路要求BAR1与VRAM大小一致,由于魔改的显存是硬长出来的,BAR1还是原来的大小,甚至30系列可能只有256MB。有些魔改卡可以通过更换 VBIOS来实现ReBAR,使BAR1 达到要求,但一是很多卡刷了VBIOS也无法解决,二是刷VBIOS是有风险的。
三、新路线
最近发现这个项目:
barlink-pcie
项目地址:
https://github.com/efschu/barlink-pcie
它解决这个问题的思路并不是:
“想办法把 256MB BAR1 变成 20GB。”
而是:
既然 BAR1 只有 256MB,那就把它当成一个“小窗口”来使用。
也就是说,它不要求整个 20GB 显存都映射到 BAR1。
而是让 GPU 在 BAR1 里建立一个比较小的通信窗口,然后把需要传输的数据分批通过这个窗口直接发送到另外一张显卡。
简单理解就是:
传统方案: GPU0 ↓ 整个显存映射到大 BAR1 ↓ PCIe ↓ GPU1 新方案: GPU0 ↓ 小块 BAR1 窗口 ↓ PCIe ↓ GPU1 BAR1 ↓ GPU1 显存256MB 在这里并不是“只能传 256MB 数据”,而只是:
一次能够直接映射和传输的窗口比较小。
数据量大了,就分成多轮传输。
因此:
256MB BAR1并不再成为:
20GB 显存无法 P2P这样的绝对限制。
四、是否有人实际跑通
这不是单纯的理论方案。
项目作者提到,这套 BAR1→BAR1 DMA 的方案已经在:
- RTX 3080 20GB
- BAR1 = 256MB
- 双 3080
- 甚至跨代 GPU
上做过实际测试。
这个方案就是最初从 htsglang 项目里的相关实现独立出来的,后来单独做成了
barlink-pcie项目。倒是一个非常值得试一下的方向:
RTX 3080 20GB BAR1 = 256MB ↓ 不追求扩大 BAR1 ↓ 直接利用现有 256MB BAR1 ↓ BAR1 → BAR1 DMA ↓ PCIe GPU → GPU -
-
感謝分享 很受用 來研究看看
@starryskyknight 我也要
-
-
感兴趣,请大佬继续跟踪