再谈GeForce 系列显卡 NVLINK桥接知识 2080ti 3090 3090ti
今天一个教育客户因为预算问题,无法采购主流型号的显卡,计划使用3090桥接后使用两块GPU的资源。
因为20和30系显卡停产很久,许久没有卖这样的方案了,我们在给客户推荐的时候,考虑到要给客户合理建议,
所以几个同事抓紧多维度重新帮客户检索一下
什么是 NVLink?
NVLink是一种NVIDIA研发的GPU之间通讯的高速互连技术和协议,
让多个显卡 (GPU) 直接相互通信,用于在两块显卡之间建立高带宽链接。
而不必通过速度较慢的 PCI-Express 总线发送数据。
它首次出现在 NVIDIA Quadro GP100 上,
在其他几款专业 NVIDIA 显卡(如 Quadro GV100 和 Tesla V100)上。
它可以用于很多方面,从用于加快游戏速度的基本 SLI 到用于渲染大型复杂场景的潜在 GPU 内存池。
NVLink 的用途取决于软件开发人员如何编写应用程序,这项技术具有许多令人兴奋的潜力。
当 NVIDIA 于 2018 年 8 月宣布推出 GeForce RTX 产品线时,
他们指出的一件事是,用于连接多张显卡的旧 SLI 连接器已被淘汰。
RTX 2080 和 2080 Ti 卡将使用高端 Quadro GP100 和 GV100 卡上的 NVLink 连接器。
这引起了极大的兴奋,因为 Quadro 上的 NVLink 功能之一是能够合并两张卡上的视频内存并在它们之间共享。
这对于可能受内存限制的应用程序(如基于 GPU 的渲染)非常有用,并且在 GeForce 卡上提供它似乎是一个很大的福音。
不过,后来 NVIDIA 只使用“SLI over NVLink”这样的术语来谈论它——这导致许多人猜测 GeForce RTX 卡不支持完整的 NVLink 功能集,因此可能根本无法池化内存。
Quadro GP100 |
Quadro GV100 |
Quadro RTX 5000 |
Quadro RTX 6000 |
Quadro RTX 8000 |
Titan RTX |
GeForce RTX 2080 |
GeForce RTX 2080 Ti |
GeForce RTX 3080 |
GeForce RTX 3080 Ti |
Quadro 卡 NVLink 能做什么?
NVLink 最初在 Quadro GP100 上实现,
它允许两个相同的显卡之间进行双向通信 - 包括访问另一张卡的显存。
有了适当的软件支持,这使得此类配置的 GPU 能够处理比单独处理更大的项目,
甚至在没有 NVLink 功能的情况下,也可以成组处理。
不过,它需要特定的驱动程序设置。
在 Quadro 上使用 NVLink 有哪些要求?
在 Quadro GP100 和 GV100 卡上使用 NVLink 需要特殊设置。
需要两个 NVLink 桥接器来连接它们,并且需要第三个视频卡来处理实际显示输出。
然后将链接的 GPU 置于TCC 模式,这会关闭它们的输出(因此需要第三张卡)。还需要应用程序级支持来启用内存池。
如何在 Windows 中验证 NVLink 功能
在 NVIDIA 控制面板中,没有简单的方法可以判断 NVLink 是否正常工作,
但 NVIDIA 确实提供了一些可以检查点对点通信的示例 CUDA 代码。
GeForce RTX 卡是否支持跨显卡访问显存?
不是直接的。
虽然可以启用 NVLink 并且点对点通信可以正常运行,但跨显卡访问内存取决于软件支持。
如果编写的应用程序能够识别 NVLink 并利用该功能,那么两张 GeForce RTX 卡(或任何其他支持 NVLink 的卡)可以一起处理比单独处理更大的数据集。
GeForce RTX 卡上的 NVLink 提供哪些好处?
虽然内存池可能不会自动“工作”,
但如果软件开发人员选择这样做,则可以使用它。
目前支持并不广泛,但Chaos Group 已在其 V-Ray 渲染引擎中运行它。
就像 RTX 卡中的新 RT 和 Tensor 核心一样,我们将不得不拭目以待开发人员如何利用 NVLink。
GeForce RTX 卡上的 NVLink SLI 怎么样?
虽然内存池可能需要特殊的软件支持,
但 RTX 2080 上的单个 NVLink 和 2080 Ti 上的双链路仍然比旧的 SLI 互连快得多。
这似乎是这些面向游戏的显卡的主要重点:通过更快的 NVLink 连接实现 SLI 。
正如其他地方的基准测试所示,这一目标已经实现。
GeForce RTX 卡将来会获得更多 NVLink 功能吗?
随着软件开发人员学会利用 NVLink,未来的应用程序和驱动程序更新将逐个改变这种情况。
此外,2.5 Geeks Webcast采访了一位 NVIDIA 工程师,
他表示这些卡上的 NVLink 功能将通过 DirectX API 公开- 这可能与我们在此处测试的基于 CUDA 的 P2P 代码不同。
NVLink 可以在 Linux 上的 GeForce RTX 卡上运行吗?
在 Ubuntu 18.04 中进行了类似的测试,
发现通过 NVLink 进行的点对点通信在该操作系统上确实可以在 RTX 2080 卡上运行。
Linux 中的此功能似乎不依赖于 TCC 或 SLI,因此消除了这一障碍后,硬件链接本身似乎可以正常工作。
https://www.chaos.com/blog/profiling-the-nvidia-rtx-cards
https://www.legitreviews.com/nvidia-geforce-rtx-2080-ti-sli-review-with-nvlink_208222/13
https://developer.nvidia.com/vrworks/graphics/vrsli
https://www.nvidia.cn/design-visualization/nvlink-bridges/
RTX3090/TI显卡是最后一代支持NVLink的消费级游戏显卡(40系开始取消NVLink接口,只有专业显卡保留)。因为有NVLink加持,3090成为了深度学习训练的入门显卡之一。
Ubuntu下3090默认不支持NVLink,经过测试,发现原因是驱动持久化模式没有开启:
Two/Dual GeForce RTX 3090s and NVLink: Ubuntu support? At least Blender has support for NVLink
为了开启持久化模式,安装完驱动后,命令行需要输入nvidia-smi -pm 1
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.08Driver Version: 545.23.08CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPUName Persistence-M | Bus-IdDisp.A | Volatile Uncorr. ECC |
| FanTemp PerfPwr:Usage/Cap | Memory-Usage | GPU-UtilCompute M. |
| || MIG M. |
|=========================================+======================+======================|
| 0NVIDIA GeForce RTX 3090On| 00000000:82:00.0On |N/A |
|0% 30CP832W / 420W |467MiB / 24576MiB | 28%Default |
| ||N/A |
+-----------------------------------------+----------------------+----------------------+
| 1NVIDIA GeForce RTX 3090On| 00000000:C1:00.0 Off |N/A |
|0% 30CP815W / 420W | 18MiB / 24576MiB |0%Default |
| ||N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes:|
|GPU GI CIPID Type Process nameGPU Memory |
|ID ID Usage|
|=======================================================================================|
|0 N/AN/A2011G /usr/lib/xorg/Xorg 53MiB |
|0 N/AN/A2777G /usr/lib/xorg/Xorg115MiB |
|0 N/AN/A2948G /usr/bin/gnome-shell126MiB |
|0 N/AN/A3473G ...45,262144 --variations-seed-version140MiB |
|1 N/AN/A2011G /usr/lib/xorg/Xorg4MiB |
|1 N/AN/A2777G /usr/lib/xorg/Xorg4MiB |
+---------------------------------------------------------------------------------------+
看到 NVIDIA GeForce RTX 3090 On
就说明ok了
随后输入sudo reboot
,重启后再检查nvidia-smi topo -m
会发现GPU之间的连接已经是NV#了。
GPU0 GPU1 CPU Affinity NUMA Affinity GPU NUMA ID
GPU0 X NV4 0-47 0 N/A
GPU1 NV4 X 0-47 0 N/A
Legend:
X= Self
SYS= Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
PHB= Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
PXB= Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
PIX= Connection traversing at most a single PCIe bridge
NV#= Connection traversing a bonded set of # NVLinks
如果还是SYS(也就是PCIE),而不是NV#,需要检查 nvidia-smi topo -p2p n
GPU0 GPU1
GPU0 X OK
GPU1 OK X
Legend:
X= Self
OK = Status Ok
CNS= Chipset not supported
GNS= GPU not supported
TNS= Topology not supported
NS = Not supported
U= Unknown
如果是NS或OK以外的值,需要看硬件是否支持NVLink,否则应该支持。重新插拔一下NVLink,然后重启。