[實測] 開源社群釋出非官方破解版驅動,實現 RTX 5090 P2P 共享記憶體共享(類似nvlnk方法)
-
這是接續下午的內容
針對P2P實現方法做說明P2P 如何建立(安裝流程)
以下為本機 2026-09-20 實裝軌跡,非理論步驟。來源:aikitoria/open-gpu-kernel-modules(branch
615.71.09-p2p,fork 自 tinygrad 的 P2P patch)。
同代雙卡(我們的 5090×2)只需 patch 後的 kernel module,不需 patch libcuda;跨代(如 3090+5090)才需patch-libcuda-p2p.py。前置條件(缺一不可)
條件 本機做法 驗證 兩卡 BAR1 皆 32G 刷 BIOS F6→F8b(AGESA 1.3.0.1b)修掉 GPU1 只 claim 256M 的 per-device ReBAR bug sudo lspci -vvv -s <bdf> \| grep "Region 1"兩卡皆size=32GSecure Boot = Disabled BIOS 關(自編 module 無憑證,開著會被拒載 Key was rejected by service)mokutil --sb-state→SecureBoot disabled停 NInfer(12435 紅線) systemctl --user stop ninfer-gpu1-df2.servicess -ltnp \| grep 12435無輸出編譯依賴 sudo apt install -y dwarves(補pahole)+sudo apt install --reinstall linux-headers-$(uname -r)(補System.map)— iommu=pt(本機非必需但保留) GRUB 加 amd_iommu=on iommu=pt重開機後 /proc/cmdline有、AMD-ViDMA-FQ→identity
️ 刷 BIOS 安全警告:更新後 Secure Boot 會被重置為 Enable,刷完重進 BIOS 必改回 Disable;Windows 機刷前先確認 BitLocker 狀態(變更 UEFI 可能觸發 recovery key 鎖機)。安裝步驟
# 0) 備份現況 nvidia-smi --query-gpu=driver_version --format=csv > /root/driver-before-$(date +%F).txt sudo cp /etc/default/grub /etc/default/grub.bak.$(date +%F) # 1) 卸掉舊驅動(595.91.07) # dpkg pattern 用 nvidia.*-595(中間有 -,舊寫法 ^(prefix)595 會抓到 0 個) # 只碰 driver 套件,不碰 CUDA toolkit # 2) 裝 615.71.09 userspace(.run) # ⚠️ hermes gateway 會封鎖 self-extracting installer,腳本代執行會失敗 # ⚠️ 615.71.09 已把 --no-opengl-libs 換名成 --no-opengl-files(照舊參數會 unrecognized option) sudo ~/NVIDIA-Linux-x86_64-615.71.09.run --silent --no-kernel-modules --no-opengl-files --no-x-check --no-nouveau-check # 3) 抓 patch 源 + 編譯 kernel module git clone https://github.com/aikitoria/open-gpu-kernel-modules cd open-gpu-kernel-modules # branch: 615.71.09-p2p cd kernel-open make clean && make -j$(nproc) && sudo make modules_install # ⚠️ 卡關 4:若末行仍 "missing System.map. Skipping depmod" sudo ln -sf /boot/System.map-$(uname -r) /lib/modules/$(uname -r)/System.map sudo depmod -a # 4) iommu=pt(GRUB 改完 update-grub) # 5) 重開機(讓新 module + iommu=pt 生效) sudo reboot # 6) 驗證 nvidia-smi --query-gpu=driver_version --format=csv # 應 615.71.09 nvidia-smi topo -p2p r # 應 GPU0<->GPU1 = OK(非 CNS) ./p2pBandwidthLatencyTest # 或自編 cudaMemcpy P2P test,看頻寬真正會卡關的 6 個點(本機實測踩到)
# 症狀 解法 0 .run→unrecognized option: --no-opengl-libs615.71.09 換名成 --no-opengl-files;照舊手冊跑前先--advanced-options核對當版參數1 pahole: not found+missing System.map→Driver/library version mismatchapt install dwarves+apt install --reinstall linux-headers-$(uname -r)2 modprobe -r nvidia_drm→Module in use(桌面佔用)sudo systemctl isolate multi-user.target切純文字再 modprobe;或直接sudo reboot(最乾淨)3 重開機後核心沒載入 nvidia module 重裝 linux-headers+linux-image,重編 +depmod -a && modprobe nvidia4 編譯成功但仍 missing System.mapsudo ln -sf /boot/System.map-$(uname -r) /lib/modules/$(uname -r)/System.map+depmod -a5 Key was rejected by service(Secure Boot 擋自編 module)BIOS 關 Secure Boot; mokutil --sb-state確認.ko實際路徑坑:本 repo 把.ko裝到/lib/modules/$(KVER)/kernel/drivers/video/(非updates/或extra/),驗證腳本若硬查後兩者會 fail-closed 誤判失敗。驗證結果(本機)
nvidia-smi topo -p2p r:CNS → OK(雙向)- P2P 頻寬實測:28.46 / 28.47 GB/s(自編 CUDA
cudaMemcpy,128MB×10,NInfer 在 GPU0 跑著的真實負載下)≈ Gen5 x8 理論(~31.5)的 ~90%,比 CNS 走 host memory(~15-20 GB/s)翻倍 - 教訓:P2P 驗收不能只看
topo -p2p r = OK(driver 層回報),要實測頻寬;且測試要記下 NInfer 佔哪張卡、是否空閒,數據才可比 - 回退:
nvidia-uninstall+ 清未被 dpkg 管理的.so+ 還原 GRUB 備份 + 重裝 595.91.07(p2p-rollback.sh)
總結
階段 之前 現在 改善 主要貢獻 Prefill ~1,158 t/s ~2,801 t/s ~2.4× P2P + NCCL(+ 驅動升級) Decode ~48 t/s ~90 t/s ~1.9× MTP(n-max 7) 一句話:P2P patch 解鎖雙卡 PCIe 直接互連,prefill 從 host bounce 瓶頸脫出;MTP 讓 decode 每步多驗證幾個 token,整體接近翻倍。兩者是獨立且互補的優化——P2P 管 prefill,MTP 管 decode。
可重現性與前置
組件 來源 備註 P2P 驅動 aikitoria fork(NVIDIA 615.71.09 open kernel module) 需手動編譯; p2p-install.sh/p2p-verify.sh/p2p-rollback.sh留存NCCL shim 自編 NCCL 2.29.7 LD_LIBRARY_PATH指向 shim lib 目錄MTP llama.cpp 原生 --spec-type draft-mtpQwen3.8 內建 MTP head,無需額外模型 BIOS AGESA 1.3.0.1b(F8b) 修 GPU1 BAR1=256M 的 per-device ReBAR bug(兩卡皆需 32G BAR) -
数据和流程都很扎实,补几点:
1)28.46 GB/s 这个数的天花板不是驱动,是平台 lane。5090×2 在 AM5/X670E 上插满两条 x16 槽会自动拆成 x8/x8(CPU 只给 24 lane),Gen5 x8 理论 ~31.5 GB/s,跑到 90% 已经贴顶。这条路径的上限由主板决定,要真正双 x16 得上 WRX90/TRX50 这类平台。
2)验收口径对:
topo -p2p r只是 driver 层自报,必须拿cudaMemcpy/p2pBandwidthLatencyTest实测。建议再补一个nccl-tests all_reduce_perf(128MB~1GB),因为 TP 真正吃的是 all-reduce 的 busbw,不是点对点拷贝。3)prefill 2.4× 里掺了「驱动 595→615」这个变量,严格归因的话最好在同一驱动版本下开/关 patch 各测一次,把 P2P 净收益单独摘出来;MTP 的 1.9× decode 是另一条线,分开报是对的。
4)安全边界要写清:自编 module + 关 Secure Boot,对单机推理机可以接受,但这台机器别当通用桌面或跑不受信负载;驱动一升级 patch 就失效,回退脚本(p2p-rollback.sh)要当资产维护。
5)跨代(3090+5090)要 patch libcuda 那条路,风险比同代高,不建议在生产机上做。
-
-
-
-
-
-
什么样的主板才行?
