1. NVLink 是什么?
NVLink 是由 NVIDIA 开发的一种高速互连技术,旨在实现 GPU 与 GPU 或 GPU 与 CPU 之间的高带宽、低延迟通信。它通过专用的硬件互连通道,比传统的 PCIe 通信速度更快。
-
关键特点:
- 高带宽:NVLink 的带宽远高于 PCIe。最新的 NVLink 版本(NVLink 4)可以提供高达 900 GB/s 的总带宽。
- 低延迟:通过更高效的通信协议和点对点直连设计,显著减少数据传输的延迟。
- 多 GPU 通信:支持多 GPU 的直接互连,允许 GPU 间的数据共享无需经过主机内存。
- 可扩展性:通过 NVLink,多个 GPU 可以组成一个高性能计算集群,共享内存和计算资源。
-
典型应用场景:
- 深度学习训练:在需要多个 GPU 协作的大规模模型训练中,NVLink 提供快速的数据交换能力。
- 科学计算和仿真:需要高吞吐量的计算任务,例如气候模拟、分子动力学等。
- 数据中心和超算:在 GPU 加速的 HPC(高性能计算)任务中实现更高效率。
2. NVSwitch 是什么?
NVSwitch 是基于 NVLink 的一种硬件交换机(Switch),用于支持多个 GPU 之间的全互连通信。它被设计用于数据中心和高性能计算系统,可以有效地连接 8 个或更多 GPU,形成一个全连接拓扑。
-
关键特点:
- 支持大规模 GPU 互连:NVSwitch 可以支持 16 个或更多 GPU 的高带宽通信,实现“每个 GPU 到其他所有 GPU”之间的直接数据传输。
- 极高带宽:NVSwitch 的交换能力可达到数 TB/s,远超单 NVLink 通道。
- 低延迟:通过专用的硬件设计,NVSwitch 减少了 GPU 之间的通信瓶颈。
- 支持 NVIDIA DGX 系统:如 NVIDIA DGX A100 和 DGX H100,这些系统都依赖 NVSwitch 提供的大规模 GPU 互连。
-
典型应用场景:
- AI 超算:在需要多 GPU 高效协作的场景(如 GPT 大模型训练)中,NVSwitch 提供支持。
- 数据中心基础设施:提高 GPU 集群的互连性能。
- HPC 工作负载:如复杂的物理模拟和建模任务。
3. NVLink 和 NVSwitch 的区别
NVLink | NVSwitch | |
类型 | 点对点通信链路 | 多 GPU 交换机 |
功能 | 连接两个设备(GPU-GPU 或 GPU-CPU) | 实现多个 GPU 的全互连 |
适用场景 | 小规模 GPU 系统 | 大规模 GPU 集群 |
带宽 | 单链路带宽较高(如 50 GB/s) | 总体带宽更高(如数 TB/s) |
硬件支持 | 如 NVIDIA A100、H100 GPU | 如 DGX A100、H100 系统中的交换模块 |
简单来说,NVLink 是用于设备间通信的点对点连接技术,而 NVSwitch 是支持大规模 GPU 集群互连的核心交换设备。两者结合可以构建强大的 GPU 加速计算系统。
4. 查看系统中的 NVLink 和 NVSwitch 配置或状态
1. 使用 nvidia-smi
工具
nvidia-smi
是 NVIDIA 提供的 GPU 管理工具,可以查看 NVLink 和 NVSwitch 的基本信息。
查看 NVLink 拓扑信息
运行以下命令:nvidia-smi topo -m
输出示例:
GPU0 GPU1 GPU2 GPU3 CPU Affinity
GPU0 X NV1 NV1 NV1 0-11
GPU1 NV1 X NV1 NV1 0-11
GPU2 NV1 NV1 X NV1 12-23
GPU3 NV1 NV1 NV1 X 12-23
NV1
表示 GPU 之间有 1 条 NVLink- 如果没有 NVLink,则会显示
PHB
(PCI Host Bridge)
查看 NVLink 带宽
运行以下命令:nvidia-smi nvlink --status
这将显示 NVLink 的状态和带宽信息,包括每个通道的带宽是否已启用。
输出示例:
GPU 0: Tesla V100-SXM2-16GB
Link 0: Enabled Speed: 25 GB/s
Link 1: Enabled Speed: 25 GB/s
GPU 1: Tesla V100-SXM2-16GB
Link 0: Enabled Speed: 25 GB/s
Link 1: Enabled Speed: 25 GB/s
查看 NVSwitch 拓扑
nvidia-smi nvlink -t
输出示例(有 NVSwitch 的系统):
GPU0 GPU1 GPU2 GPU3 NVSwitch
GPU0 X NV1 NV1 NV1 NVSwitch1
GPU1 NV1 X NV1 NV1 NVSwitch1
GPU2 NV1 NV1 X NV1 NVSwitch1
GPU3 NV1 NV1 NV1 X NVSwitch1
2. 使用 NVIDIA SDK 工具
NVIDIA 提供了更详细的诊断工具(如 dcgm
和 Nsight
),可以监控和测试 NVLink 和 NVSwitch 的性能。
安装 DCGM 后可以运行以下命令:dcgmi diag -r 5
这将运行 NVLink 诊断测试,并报告其状态。
3. 检查系统日志
通过查看内核日志可以获取 NVLink 和 NVSwitch 的初始化信息:
dmesg | grep -i nvlink
或查看设备是否被正确加载:
lsmod | grep nvidia
5. 分布式训练相关显存问题
1. 大模型大概有多大,模型文件有多大?
大模型也分为不同的规格,一般模型的规格会体现在模型的名称上,例如 LLaMA2-13b,13b 就是其模型参数量的大小,意思是 130亿的参数量。大模型的文件大小与其参数量有关,通常大模型是以半精度存储的, Xb 的模型文件大概是 2X GB多一些,例如 13b 的模型文件大小大约是 27GB 左右。
2. 能否用 4 * v100 32G 训练 vicuna 65b?
一般来说推理模型需要的显存约等于模型文件大小,全参训练需要的显存约为推理所需显存的三倍到四倍,正常来说,在不量化的情况下4张 v100 显卡推理 65b 的模型都会有一些吃力,无法进行训练,需要通过 LoRA 或者QLoRA 采用低秩分解的方式才可以训练。
3. 如何评估显卡利用率?
- flops比值法:
gpu利用率 = 实测的flops/显卡理论上的峰值flops
。deepspeed 实测flops 100t flops,而用的是A100卡理论峰值312t flops,可以得到GPU利用率只有 32.05%。 - throughout估计法:
吞吐量 = example数量/秒/GPU * max_length
;gpu利用率 = 实际吞吐量 / 论文中的吞吐量(假设利用率100%)
,实测训练时处理样本速度为 3 example/s,一共有4卡,max length 2048,则吞吐量为 1536 token/s/gpu,根据llama论文可以得知,他们训练7B模型的吞吐量约为 3300 token/s/gpu,那么GPU利用率只有46.54% - torch profiler分析法:利用torch profiler记录各个函数的时间,将结果在tensorboard上展示,在gpu kenel视图下,可以看到tensor core的利用率,比如30%。
4. 如何查看多机训练时的网速?
iftop -i eth2 -n -P
iftop
是外置的命令,可以监控发送流量,接收流量,总流量,运行 iftop
到目前时间的总流量,流量峰值,过去 2s 10s 40s 的平均流量。