目录
前言
建议阅读官网说明或官方博客文章:
NVLink & NVSwitch: https://www.nvidia.com/en-us/data-center/nvlink/
什么是 NVLink? | NVIDIA 英伟达博客 https://blogs.nvidia.cn/blog/what-is-nvidia-nvlink/
NVLink说明
简介
NVLink就是英伟达(NVIDIA)开发并推出的一种总线及其通信协议,主要用于GPU之间或GPU与CPU、网络接口卡(NIC)等其他外设的连接,提供更高效的传输性能(高带宽,低延迟)。
技术特点
- 点对点结构与串列传输:NVLink采用点对点结构,即直接在两个设备之间建立链路,这种设计极大地提高了数据传输的效率。同时,它使用串列传输方式,进一步提升了数据传输的速度。
- 高带宽与低延迟:相较于传统的PCIe接口,NVLink提供了更高的带宽和更低的数据传输延迟。这使得NVLink在需要大规模数据交互的高性能计算场景中表现出色。
- 数据缓存一致性:从NVLink 2.0版本开始,引入了数据缓存一致性功能。这意味着CPU和GPU之间可以在硬件层面实现数据一致性,大大提升了CPU和GPU之间的数据交互效率。
- 支持多种设备连接:NVLink不仅支持GPU之间的连接,还支持GPU与CPU、网络接口卡(NIC)等其他外设的连接,提供了灵活的设备连接方案。
应用领域
NVLink主要应用于需要大规模并行计算的高性能场景中,如深度学习、AI推理、科学模拟和金融分析等。特别是在深度学习领域,NVLink允许多个GPU之间实现高速数据传输,从而大幅加速了模型训练的速度。
技术优势
NVLink4.0 VS PCIe5.0 带宽是5倍,能效是5倍
四代 NVLink 连接主机和加速处理器的速度高达每秒 900GB/s,是传统 x86 服务器的互连通道PCIe 5.0 带宽的 7 倍多。每传输 1 字节数据仅消耗 1.3 皮焦,因此 NVLink 的能效是 PCIe 5.0 的 5 倍。
通常通过印在计算机板上的多对导线实现,可以让处理器以闪电般的速度收发共享内存池中的数据。
如何使用nvlink
一 环境准备
1. 确认硬件支持
-
GPU 支持:确保 GPU 支持 NVLink,如 NVIDIA Tesla V100、A100 或 GeForce RTX 3090 等。
-
主板支持:主板需具备 NVLink 接口,通常为高端工作站或服务器主板。
-
NVLink 桥接器:根据 GPU 数量和布局选择合适的桥接器。
2. 安装硬件
-
安装 GPU:将 GPU 插入主板 PCIe 插槽。
-
连接 NVLink 桥接器:将桥接器安装在 GPU 的 NVLink 接口上,确保连接稳固。
3. 安装驱动和软件
-
安装 NVIDIA 驱动:从 NVIDIA 官网下载并安装最新驱动。
-
安装 CUDA 工具包:如需使用 CUDA 应用,安装相应版本的 CUDA 工具包。安装与GPU驱动版本兼容的CUDA Toolkit,以便在GPU上进行编程和计算。
4. 配置系统
-
启用 NVLink:在 BIOS/UEFI 中启用 NVLink 支持(如有选项)。
-
检查连接状态:使用
nvidia-smi
命令查看 GPU 状态,确认 NVLink 已启用。
二 NVLink使用
5. 使用 NVLink
-
多 GPU 应用:在支持多 GPU 的应用中启用 NVLink 加速。
-
深度学习框架:如 TensorFlow 或 PyTorch,可通过设置启用 NVLink 优化。
- 如果你打算使用NVLink进行深度学习,需要配置深度学习框架(如TensorFlow、PyTorch等)以利用NVLink。
- 对于TensorFlow,可以使用以下代码片段配置:
import tensorflow as tf tf.config.experimental.set_visible_devices(tf.config.experimental.list_physical_devices('GPU')[0:2], 'GPU') logical_gpus = tf.config.experimental.list_logical_devices('GPU') print(len(logical_gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
- 对于PyTorch,可以使用以下代码片段配置:
import torch torch.cuda.set_device(0) print(torch.cuda.device_count())
6. 监控和优化
-
监控性能:使用
nvidia-smi
监控 GPU 使用率和 NVLink 带宽。 -
优化应用:根据应用需求调整配置,最大化 NVLink 性能。
实际应用
- 编写深度学习代码:
- 在配置好深度学习框架后,可以编写深度学习代码并运行。
- 在代码中,确保使用NVLink进行GPU之间的数据传输和同步。
- 运行和评估模型:
- 运行深度学习代码,并监控训练过程中的日志和性能指标。
- 使用测试数据集评估模型的性能,并根据需要进行调整和优化。
- 优化NVLink性能:
- 根据实际应用场景和性能需求,调整NVLink的配置和参数以优化性能。
- 监控NVLink的带宽利用率和延迟情况,并根据需要进行调整。
注意事项
- 在使用NVLink时,务必确保所有连接都正确无误,以避免数据传输错误或系统崩溃。
- 在配置深度学习框架时,需要根据实际情况选择适当的GPU设备和NVLink配置。
- 在运行深度学习代码时,需要确保有足够的内存和计算资源来支持模型的训练和推理。
通过以上步骤,你可以成功使用NVLink进行GPU之间或GPU与其他外设之间的高效数据传输和同步。
常用状态查询
可以使用nvidia-smi
命令来查看和管理NVLink的状态和配置:
-
nvidia-smi
:查看 GPU 和 NVLink 状态。 -
nvidia-smi nvlink --status
:查看 NVLink 连接状态。 -
nvidia-smi topo -m
:查看 GPU 拓扑。 -
nvbandwidth
:测试 NVLink 带宽。 -
nvidia-smi dmon
:实时监控 NVLink 带宽。
以下是一些常用的NVLink命令及其功能:
-
查看NVLink信息:
nvidia-smi nvlink
:显示系统的NVLink信息,包括链接状态、支持的功能等。nvidia-smi nvlink -i <GPU_ID>
:指定GPU的ID来查看该GPU的NVLink信息。nvidia-smi nvlink -l <LINK_ID>
:指定链接的ID来查看特定链接的信息。nvidia-smi nvlink -s
:显示链接的状态(活动/非活动)。nvidia-smi nvlink -c
:显示链接支持的功能列表。
-
查看NVLink拓扑信息:
nvidia-smi topo -m
:显示NVLink的拓扑信息,包括GPU之间的连接关系。
-
查看NVLink带宽:
nvidia-smi nvlink --status
:显示NVLink的状态和带宽信息,包括每个通道的带宽是否已启用。
-
错误计数器相关命令:
nvidia-smi nvlink -e
:显示链接的错误计数器。nvidia-smi nvlink -ec
:显示链路的每通道CRC错误计数器。nvidia-smi nvlink -re
:将所有错误计数器重置为零。
-
吞吐量计数器相关命令:
nvidia-smi nvlink -gt <COUNTER_TYPE>
:显示指定计数器类型的链路吞吐量计数器。<COUNTER_TYPE>
参数由表示计数的流量类型的字符串组成,例如d
表示以KiB显示tx和rx数据有效负载。
-
其他命令:
nvidia-smi nvlink -p
:显示链接的远程节点PCI总线ID。nvidia-smi nvlink -R
:显示链接的远程设备PCI总线ID和NvLink ID。
注意事项:
- 在使用这些命令之前,请确保已经安装了NVIDIA驱动程序,并且具有管理员权限。
- 某些命令可能需要特定的硬件和软件版本支持,请查阅NVIDIA的官方文档以获取更多信息。