前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nvidia技术壁垒之一--NVLink&NVSwitch

Nvidia技术壁垒之一--NVLink&NVSwitch

原创
作者头像
aaronwjzhao
修改2024-09-06 13:47:27
1791
修改2024-09-06 13:47:27
举报
文章被收录于专栏:AI工程落地

NVLink

NVLink数据包

单个 NVLink 数据包的范围从 1 到 18 个 flit。每个 flit 为 128 位,允许使用单个 header flit 和 16 个 payload flit 传输 256 字节,峰值效率为 94.12%,使用单个 header flit 和 4 个数据 payload flit 传输 64 字节,单向效率为 80%。在双向流量中,效率分别略微降低至 88.9% 和 66.7%。

数据包至少包含一个标头,以及可选的地址扩展 (AE) 数据块、字节启用 (BE) 数据块和最多 16 个数据有效负载数据块。典型的事务至少包含请求和响应,而发布的操作不需要响应。

数据包构成
数据包构成

链接

NVLink 通道称为 Brick(或NVLink Brick)。单个 NVLink 是双向接口,每个方向包含 8 个差分对,总共 32 条线。这些线是直流耦合的,使用带有嵌入式时钟的 85Ω 差分终端。为了简化路由,NVLink 支持通道反转和通道极性,这意味着两个设备之间的物理通道顺序及其极性可以反转。

NVLink原理图
NVLink原理图

数据传输方式

NVLINK 支持两种数据传输模式:DMA 和 P2P。

DMA 模式:在 DMA 模式下,CPU 可以通过 NVLink 桥接器直接将数据传输到目标 GPU 的显存中。这个过程不需要目标 GPU 的参与,因此可以有效地提高数据传输效率。

P2P 模式:在 P2P 模式下,两个 GPU 之间可以直接进行数据传输。这种模式通常用于在 GPU 之间共享数据或进行并行计算任务。

使用记录

查看NVLink状态:NVIDIA-SMI系列命令详解(16)-NVLINK本文为NVIDIA-SMI系列命令详解第十六篇-NVLINK,介绍 - 掘金 (juejin.cn)

安装NVLink:直接插到对应的卡上即可,一般情况下不需要手动安装驱动

拔除NVLink:一般也可以直接拔除

踩坑记录

如果一台机器有多张卡,只有装了NVLink的两卡之间可以通信,没有装的卡只能用单卡(比较坑,也就是说只要机器上有NVLink,通信就都会改成NVLink的方式,导致正常的卡间不能通信了)。针对该问题,在nccl上提了Issues:Not all gpus have nvlinks, the communication data is all incorrect · Issue #1423 · NVIDIA/nccl (github.com)

解决方案一:拔除nvlink,只使用PCIE传输。如果是AMD的CPU,拔出后还需要进BIOS强制关闭IOMMU,禁止程序直接访问物理内存,必须经过CPU。具体可以参考Silent data corruption when moving data between GPUs · Issue #84803 · pytorch/pytorch (github.com)。我再修改上述操作之后,多卡推理可以跑了,但是多卡训练会报CUDA error: unspecified launch failure,后来发现是transformers、torch等安装包的版本较低导致的。使用pip命令更新安装包,pip install --force-reinstall transformers==4.44.2 trl==0.10.1 torchvision==0.19.1。

解决方案二:所有卡都连上nvlink(但有的卡只有一个NVLink插槽,比如A6000,也就是最多能做到两张卡配对使用)

解决方案三:八张卡既有PCIE,又有NVLink,目前来看是有bug的。持续关注Issues:Not all gpus have nvlinks, the communication data is all incorrect · Issue #1423 · NVIDIA/nccl (github.com)

缺点

NVLink虽然是双向接口,两张卡之间只需要一条连接,但也很容易发现,只有插了线的两卡才可以享受其高速通信,而且像A6000等显卡上只有一个NVLink插槽,所以无法将多张卡连接到一起。Nvidia新的产品的NVSwitch就是用来解决这个问题的,具体可以参考Nvidia的官网介绍:NVIDIA NVLink and NVIDIA NVSwitch Supercharge Large Language Model Inference | NVIDIA Technical Blog

NVSwitch

NVSwitch是显卡互联交换机,使用的时候需要配合NVLink,把NVLink一端连到显卡上,另一端连到NVSwitch上。可以让每两张卡间都可以无阻塞全速互联,最新一代的NVSwitch还可以把不同机器间的显卡互联起来,且最高可以连接576张显卡(简直是恐怖,且互联传输速度比InfiniBand还要快)。

NVSwitch发展历程
NVSwitch发展历程

八卡互联方案

如果使用NVLink,每张卡都要和其他卡之间有NVLink相连,传输速度取决于单条NVLink速度上限。

使用NVSwitch按如下图方式互联,任意两卡间都可以享受最高速900GB/s,并且0、1两张卡正在通信,其他卡间也可以全速通信,互不影响。

多卡互联方案
多卡互联方案
NVLink vs NVSwitch传输速度
NVLink vs NVSwitch传输速度

集群互联

最新的NVSwitch可以把576张卡连到一起,这些卡分布在几十台机器上,一般来说机器间是通过网络传输的,最高速的网络协议是InfiniBand。但NVSwitch直接跳过这些,直接把多机器间的卡连起来。以下是使用InfiniBand和NVSwitch互联的性能对比:

NVSwitch相比InfiniBand速度
NVSwitch相比InfiniBand速度

可以看到NVSwitch竟然比InfiniBand还要快4.5倍,InfiniBand只有超算中心才能用的起。Nvidia简直是变态。。。。

参考链接:

AI Infra 基础知识 - NVLink 入门 (qq.com)

深入了解 GPU 互联技术——NVLINK (qq.com)

NV Switch 深度解析与性能剖析 (qq.com)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NVLink
    • NVLink数据包
      • 链接
        • 数据传输方式
          • 使用记录
            • 踩坑记录
          • 缺点
          • NVSwitch
            • 八卡互联方案
              • 集群互联
              相关产品与服务
              GPU 云服务器
              GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档