其他

再谈GeForce 系列显卡 NVLINK桥接知识 2080ti 3090 3090ti

2024-09-21 20:33:23 工作站服务器 36

今天一个教育客户因为预算问题,无法采购主流型号的显卡,计划使用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,然后重启。




解决方案