Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

AMD 配置

作为 JVD 一部分涵盖的 AI 服务器包括 2 台 Supermicro AS-8125GS-TNMR2 双 AMD EPYC 8U GPU 和 2 台 Dell PowerEdge XE9680。

本节提供一些基于 AI JVD 实验室测试的接口和其他相关参数的安装和配置指南。进行更改时,请务必参考制造商的官方文档并了解更多详细信息。

AMD MI300X 设置 BIOS 参数

根据其 UI 和 GPU 映射以及服务器内部架构的差异,每个供应商都有不同的 BIOS 设置。

SuperMicro AS-8125GS-TNMR2

将服务器启动到设置模式(启动到 supermicro splash 将需要几分钟时间才能显示):

UEFI/BIOS 区域
高级 -> NB 配置 ACS 启用 = 禁用
高级 -> NB 配置 -> xGMI xGMI 链路宽度控制 = 手动
xGMI 力链路宽度控制 = 力
xGMI 力链路宽度 = 2
xGMI 最大链路宽度控制 = 手动
xGMI 链路最大速度 = 自动
高级> PCIe/PCI/PnP 配置 4G 以上编码:启用
调整大小 BAR 支持:已启用
SR-IOV 支持:已启用
工作负载 = 未配置

戴尔 XE9680

戴尔建议为其 XE9680 AI/ML 服务器使用以下 BIOS 设置。BIOS 设置也会禁用主机上的 IOMMU 和 ACS。

UEFI/BIOS 区域
BIOS -> 处理器设置 逻辑处理器 = 禁用
虚拟化技术 = 禁用
SubNumaCluster = 禁用
MADt 核心群集 = 线性
1 BIOS >集成设备 全局 SRIOV = 禁用 1
BIOS -> 系统配置文件设置 服务器系统配置文件 = 性能
工作负载 = 未配置
BIOS ->系统安全性 交流恢复延迟 = 随机(强烈推荐)

1 戴尔建议“启用”全局 SR-IOV,但在此实验室设置中的戴尔 DUT 上,此设置与存储和前端交换矩阵的 Thor2 NIC 端口模式 0 不兼容(2x200Gb 与 1x400Gb),导致 DUT 在启动时出现故障。请咨询您的戴尔客户团队,以获取有关设置中此设置的建议。

请按照 AMD Instinct 加速器的单节点网络配置 — GPU 群集网络文档中所述的配置步骤进行作。请注意,在重新启动服务器后,还必须在步骤 6 中使用的 禁用 ACS 脚本 在任何工作负载之前运行。

适用于 AI 数据中心的以太网网络适配器 (NIC)

AI/ML 工作负载的复杂性和规模都有所增加;网络对于缩短工作完成时间至关重要。网络适配器 (NIC) 是将 GPU 连接到数据中心交换矩阵的连接点,因此这些 NIC 应该能够处理大量数据,并且应该能够支持 GPU 服务器之间的高速、低延迟通信。因此,NIC 至少应该能够支持某些关键的 AI/ML 功能,如下所示:

  • 聚合以太网 RDMA (RoCE) 和拥塞控制。
  • 能够以低延迟的方式处理 400G 双向数据。
  • 先进的拥塞控制机制,灵敏地应对网络拥塞并优化流量。
  • 支持 GPU 可扩展性,即使 GPU 不断增加,也能确保稳健的性能。

对于服务器 NIC,我们有两个选项:

  • Broadcom Thor2 — Broadcom Thor2 网络适配器已通过 AI/机器学习工作负载和作业完成时间验证。
  • AMD Pollara - AMD Pollara 400 以太网网络适配器

有关 AMD Pensando Pollara 400(以太网适配器)的更多信息,请参阅此 链接

识别 NIC 和 GPU 映射

除了交换矩阵和 GPU 服务器设置外,此 JVD 还涵盖了以太网网络适配器(或 NIC)的配置和设置,如下所示。Broadcom BCM957608 (Thor2) 以太网网络适配器在第 1 阶段通过了验证。在第 2 阶段,AMD Pollara 400 NIC 卡将经过验证。

所有 4 台服务器都配备了:

以及以下任一 NIC

或者

注意:大多数设置命令将适用于 Thor2 和 AMD Pollara 400 NIC。但是,如果步骤有任何差异,将在文档中的适当位置指出。

戴尔设备:

AMD MI300x GPU 服务器和 NIC 固件和 RCCL 库

出于 Broadcom Thor 2 NIC 验证的目的,以下是 MI300x GPU 服务器上配置的主要作系统和固件版本:

Broadcom Thor 2 以太网适配器

以下是安装的作系统 (OS)、固件和 AMD 库的详细信息:

作系统/固件 版本
Ubuntu 的 Ubuntu 24.04.2 LTS
Broadcom Thor2 NIC 固件版本 231.2.63.0

以下是为 Thor2 网络适配器的 RCCL 测试安装的库:

版本
RCCL 测试库 命令
ROCM/贵族 6.4.0.60400-47~24.04 AMD64 APT 列表 ROCM
RCCL 1 2.22.3.60400-47~24.04 AMD64 apt 列表 rccl
MPI(开放式 MPI) 5.0.8a1 mpirun –版本

UCX

https://github.com/openucx/ucx.git

1.15.0 /opt/ucx/bin/ucx_info -v
注意:有关 AMD 驱动程序和主机实用程序,请联系您所在地区的 AMD 代表。

AMD Pensando Pollara 400 以太网适配器

出于 AMD Pollara 400 NIC 验证的目的,以下是 MI300x GPU 服务器上配置的主要作系统和固件版本:

作系统/固件 版本
Ubuntu 的 Ubuntu 22.04.5 LTS
AMD Pollara NIC 固件版本 1.110.0-A-79

安装在 MI22.04 服务器上的 ubuntu 版本 300 的输出。

AMD Pollara 400 NIC 卡的输出固件版本

以下是为 AMD Pollara 400 NIC 适配器的 RCCL 测试安装的库:

版本
RCCL 测试库 命令
ROCM/Jammy 6.3.3.60303-74~22.04 AMD64 APT 列表 ROCM
RCCL 1 7961624  
MPI(开放式 MPI) 5.1.0a1 /opt/ompi/bin/mpirun –version

UCX

https://github.com/openucx/ucx.git

1.20.0 /opt/ucx/bin/ucx_info -v
RCCL 测试 修订版 6704FC6 Git 分支 https://github.com/ROCm/rccl-tests.git
ANP 插件2    
注意:有关 AMD 驱动程序和主机实用程序,请联系您所在地区的 AMD 代表。
1. RCCL 库是 AMD 提供的私有构建版本。
2. ANP 插件版本是 AMD 提供的私有版本。

有关安装这些软件和依赖库的更多信息,稍后在 AMD Pollara 固件和依赖库一节中提供了高级步骤,因为只有在映射 NIC 和 GPU 后才能执行这些步骤,如以下部分所述。

在本节中,我们将探讨一些选项来查找和配置有关 NIC 和 GPU 的信息。

ROCm 通信集体图书馆 (RCCL)

在 AMD 服务器中, ROCm 提供了针对 AMD GPU 优化的多 GPU 和多节点集体通信原语。这些集合跨一个或多个 GPU 服务器中的多个 GPU 实现发送和接收作,例如 all-reduce、all-gather、reduce、广播、all-to-all 等。

单个服务器上 GPU 之间的通信是使用 xGMI(芯片间全局内存互连)实现的,这是 AMD Infinity 交换矩阵技术的一部分。Infinity 交换矩阵是一种高带宽、低延迟的互连,用于系统内的各个组件,包括 CPU、GPU、内存、NIC 和其他设备。xGMI 提供插槽到插槽的通信,允许直接的 CPU 到 CPU 或 GPU 到 GPU 的通信。

不同服务器之间的通信由支持 RDMA 的 NIC(例如,通过以太网的 RoCEv2)处理,并穿过 GPU 后端交换矩阵进行路由。这些 NIC 可随时由任何 GPU 使用,因为没有硬编码的 1 对 1 GPU 到 NIC 映射。但是,在 GPU 和 NIC 之间使用首选通信路径会产生 1:1 对应的外观。

RCCL 将始终选择 GPU 之间以及 GPU 和 NIC 之间连接最佳的路径,旨在优化带宽和延迟。在节点间转发之前,将采用优化的节点内路径。

rocm-smi (Radeon 开放计算平台系统管理接口)cli 提供了用于配置和监控 AMD GPU 的工具。它可用于通过以下选项识别 GPU、硬件详细信息以及拓扑信息:

--showproductname: 显示产品详情

--showtopo显示硬件拓扑信息

--showtopoaccess :显示了 GPU 之间的链路可访问性

--showtopohops :显示 GPU 之间的跃点数

--showtopotype :显示 GPU 之间的链路类型

--showtoponuma :显示 NUMA 节点

--shownodesbw:显示 NUMA 节点带宽

--showhw:显示硬件详细信息

AMD Instinct MI300X OAM 示例:

其中 --showproductname 显示了 GPU 系列、型号和供应商以及其他详细信息。示例输出显示服务器中安装了 AMD Instinct™ MI300X 平台 GPU。

这些 --showhw 选项显示有关系统中 GPU 的信息,包括 ID

字段定义如下:

GPU 系统上 GPU 的索引,从 0 开始。
节点 与 GPU 关联的 NUMA(非均匀内存访问)节点 ID。帮助识别内存位置。最佳 GPU/NIC 映射通常依赖于 NUMA 邻近性
做了

GPU 的设备 ID。这是特定 GPU 型号的唯一标识符。

对于验证确切的 GPU 模型很有用。例如,0x74a1对应的是 MI300X 系列 GPU。

GUID

GPU 唯一标识符。此值特定于每个 GPU,可能与其 PCIe 设备相关。

对于区分多 GPU 环境中的 GPU 很有用。

GFX 虚拟

GPU 架构的版本(例如,gfx942 属于 AMD 的 RDNA2 系列)。

在 AMD GPU 中,GFX 前缀是 AMD 其 GPU 微架构系列内部命名约定的一部分。

GPU 架构硬件规格 — ROCm 文档

GFX RAS GPU RAS(可靠性、可用性、可维护性)功能状态。指示错误处理。
SDMA RAS SDMA(系统直接内存访问)RAS 功能的状态。
UMC RAS 统一内存控制器 (UMC) RAS 功能的状态。
VBIOS

VBIOS(视频 BIOS)版本。指示 GPU 上运行的固件版本。

所有 GPU 的固件版本 (113-M3000100-102) 相同则表示配置统一。

公共汽车

GPU 的 PCIe 总线地址。帮助将 GPU 映射到其物理插槽。

例如,0000:05:00.0 是 PCIe 地址。它允许您将 GPU 与物理插槽或 NUMA 节点相关联。

分区 ID GPU 分区或实例 ID。对于多实例 GPU(如 MI300X),这将识别实例。所有值均为 0,表示未为这些 GPU 启用多实例分区。

这些 --showbus 选项显示 PCI 总线相关信息,包括 GPU ID 和 PCI 总线 ID 之间的对应关系。

--showmetrics 选项提供有关 GPU 状态和性能的全面信息,包括温度、时钟频率、功耗和 PCIe 带宽等指标。

这些 --showtopo 选项显示系统中的 GPU 如何通过 XGMI(链路类型)相互通信,该 XGMI(链路类型)表示任意两个 GPU 之间的一个跃点。权重 15 表示此直接通信是首选路径。

链路类型、跃点数和权重也可使用特定选项 --showtopoweight --showtopotype–showtopoweight

显示 --shownodesbw 了内部可用于 GPU 到 GPU 内部通信的带宽:

有关其他选项和详细信息,请查看:

有关 ROCm-SMI 以及较新的 AMD-SMI CLI 的更多信息,请查看: ROCm 文档AMD SMI 文档ROCm 和 AMD SMI

NIC 和 GPU 映射

接下来是执行 NIC 到 GPU 的映射,如以下步骤所示。Thor2 和 AMD Pollara 400 NIC 的这些都是相同的。

其他 命令中的信息可以与上述一些选项相结合,以按照以下步骤查找 GPU 和 NIC 之间的相关性:

  1. 识别 NUMA 节点和 GPU

    使用输出 或仅rocm-smi --showtopo查找 rocm-smi --showtoponuma GPU 和 NUMA 节点之间的映射。

    在输出中查找每个 GPU 的 NUMA 关联 性。本节稍后将介绍此属性的含义。

    请注意哪些 GPU 与哪些 NUMA 节点相关联。

    示例

    GPU 0–3 → NUMA 节点 0

    GPU 4–7 → NUMA 节点 1

  2. 识别 NIC 的 NUMA 节点

    导航到 /sys/class/net/ 目录并检查每个网络接口(不包括 lo 或 docker 接口)的 NUMA 节点关联 性:

    请注意每个 NIC 接口的 NUMA 节点关联性。

    示例

  3. 基于 NUMA 关联性将 GPU 与 NIC 关联

使用步骤 1 (GPU) 和步骤 2 (NIC) 中的 NUMA 节点关联,将每个 GPU 映射到同一 NUMA 节点内的 NIC:

示例

注意:您还可以使用以下脚本自动执行上述步骤:

示例

您会注意到,GPU 与 NIC 之间没有 1:1 的关联。相反,多个 NIC 接口与 GPU 相关联。这是因为它们属于相同的非统一内存访问 (NUMA) 节点关联。

采用 NUMA 架构的系统包含硬件资源的集合,包括 CPU、GPU、内存和 PCIe 设备(包括 NIC),这些资源组合在一起,称为“NUMA 节点”。这些资源被视为彼此的“本地”资源。从 GPU 的角度来看,同一 NUMA 节点中的设备与该 GPU 的关联最密切。NUMA 节点由 NUMA 关联标识。

多个 NIC 和 GPU 可以连接到同一个 PCIe 复合体或 NUMA 节点内的交换机。这使得共享该综合体的所有 GPU 都可以访问 NIC。但是,虽然同一节点中的任何 GPU 都可以访问 NUMA 节点中的所有 NIC,但 NIC 会根据可用性、流量类型、延迟等动态分配给给定 GPU 使用。

同一 NUMA 节点上的 GPU(例如 GPU1 ↔、GPU2)之间的通信:

同一 NUMA 节点上的 GPU(例如 GPU1 和 GPU2)直接通过高带宽、低延迟互连进行通信,例如 Infinity 交换矩阵 (在 AMD 系统中)。

这些互连完全避开了 CPU 和主内存,与跨 NUMA 通信相比,通信速度要快得多。由于两个 GPU 都位于同一内存控制器和 CPU 的“本地”,因此通信路径得到了高度优化。

不同 NUMA 节点上的 GPU 之间的通信(例如 GPU1 ↔、GPU4):

不同 NUMA 节点上的 GPU 之间的通信(例如,NUMA 0 上的 GPU1 和 NUMA 1 上的 GPU4)必须遍历系统架构的其他层,这会带来更高的延迟。路径通常如下:

  • GPU1 → CPU (NUMA 0):数据从 GPU1 发送到 NUMA 0 上的 CPU。
  • NUMA 间链路:NUMA 0 和 NUMA 1 中的 CPU 通过互连连接,例如 Infinity 交换矩阵或 UPI(超路径互连)。
  • CPU (NUMA 1) → GPU4:数据从 NUMA 1 上的 CPU 转发到 GPU4。

更改 NIC 属性

本节介绍如何添加或更改 NIC 的 接口名称MTUDNSIP 地址路由表条目

编辑和重新应用网络配置 (netplan) 文件

网络配置在以下 netplan *.yaml 文件中进行了描述: /etc/netplan/

请注意,实际文件名可能会有所不同。示例:

/etc/netplan/01-netcfg.yaml

/etc/netplan/00-installer-config.yaml

更改任何接口属性都需要编辑此文件并重新应用网络计划,如下所示:

  1. 查找逻辑接口的默认名称。

    您可以使用以下步骤来实现此目的:

    Thor2 NIC 输出:

    接口 ens31np0

    地点

    • zh:以太网网络接口。
    • S31:表示系统总线上网络接口的物理位置。总线上的插槽编号 31。
    • NP0:
    • n:网络(表示是网络端口)。
    • p0:端口 0(表示它是此网络接口的第一个端口)。

    AMD Pollara 400 NIC 输出

    您可以使用该脚本 gpunic.py 查找每个 pcie 总线的 GPU 和 NIC 之间的映射,以确定需要如何重命名 NIC 以保持一致性。

    示例

    要进一步识别接口,可以使用命令

    您需要确保连接到 GPU 后端交换矩阵、存储后端交换矩阵和前端交换矩阵的 NIC 分别为 400GE 接口、200GE 接口和 100GE 接口。

    默认接口名称 新名称 速度
    enp6s0np0 gpu0_eth 400GE
    ENP35S0NP0 gpu1_eth 400GE
    ENP67S0NP0 gpu2_eth 400GE
    ENP102S0NP0 gpu3_eth 400GE
    ENP134S0NP0 gpu4_eth 400GE
    ENP163S0NP0 gpu5_eth 400GE
    ENP195S0NP0 gpu6_eth 400GE
    ENP230S0NP0 gpu7_eth 400GE
    ENP47S0F0NP0 stor0_eth 200GE
    ENP47S0f0NP1 stor1_eth 200GE
    ENP208S0F0NP0 mgmt_eth 100GE
  2. 查找接口的 MAC 地址:

    您可以使用该ip linkshow <device>命令。

    示例

    、MAC 地址
    默认接口名称、 新名称
    enp6s0np0 gpu0_eth 7c:c2:55:bd:75:d0
    ENP35S0NP0 gpu1_eth 7c:c2:55:bd:79:20
    ENP67S0NP0 gpu2_eth 7c:c2:55:bd:7d:f0
    ENP102S0NP0 gpu3_eth 7c:c2:55:bd:7e:20
    ENP134S0NP0 gpu4_eth 7c:c2:55:bd:75:10
    ENP163S0NP0 gpu5_eth 7c:c2:55:bd:7d:c0
    ENP195S0NP0 gpu6_eth 7c:c2:55:bd:84:90
    ENP230S0NP0 gpu7_eth 7c:c2:55:bd:83:10
    ENP47S0F0NP0 stor0_eth 5c:25:73:66:bc:5e
    ENP47S0f0NP1 stor1_eth 5c:25:73:66:bc:5f
    ENP208S0F0NP0 mgmt_eth 5c:25:73:66:c3:ee
  3. 使用在前面步骤中确定的新名称和 MAC 地址修改网络计划配置文件。

    示例

    编辑文件时,请确保保持适当的缩进和连字符(例如在 IP 地址、路由等之前)。对于 IP 地址,请确保包含子网掩码。

    以下是实验室中一台 MI300X 服务器的 netplan 配置文件示例:

  4. 保存文件并使用 netplan apply 命令应用更改。

    jnpr@MI300X-01:/etc/netplan$ sudo netplan apply

    jnpr@MI300X-01:/etc/netplan$

  5. 验证更改是否已正确应用。

检查新接口名称是否正确:

Thor2 NIC 输出:

请注意,gpu#_eth (#=0-7) 接口是 Broadcom BCM957608 接口,而 mgmt_eth 和 stor#_eth 接口是 Mellanox MT2910 (ConnectX-7) 接口。这将在下一节中变得很重要,我们将介绍接口 CoS 配置。

同一命令的 AMD Pollara NIC 输出:

请注意,gpu#_eth (#=0-7) 接口是 AMD Pollara 400 NIC 接口,而 mgmt_eth 和 stor#_eth 接口是 Mellanox MT2910 (ConnectX-7) 接口。这将在下一节中变得很重要,我们将介绍接口 CoS 配置。eth3 接口是 Supermicro IPMI 接口。

验证 IP 地址配置是否正确:

检查路由是否已正确添加到路由表中:

检查地址解析:

AMD Pollara 固件和依赖库

注意:有关 AMD 驱动程序和主机实用程序,请联系您所在地区的 AMD 代表。

为简洁起见,此处描述的步骤仅涉及为 AMD Pollara 400 NIC 启用 RCCL 测试,因此需要安装所有必要的依赖软件和库才能运行 RCCL 测试。所涉及的步骤与 AMD 服务器和 NIC 固件以及 RCCL 支持库 表中列出的库有关。

  1. 确保 ubuntu OS 版本为 22.04,如 AMD 服务器和 NIC 固件以及 RCCL 支持库一节中的建议
  2. 按照以下步骤中的建议安装 RCCL 库。请注意,RCCL 和 ANP 是 AMD 提供的私有库。
  3. 安装统一通信框架 (UCX)。统一通信框架 (UCX) 是一个开源的跨平台框架,旨在为各种网络编程模型和接口提供一组通用的通信接口,有关更多信息,请参阅 AMD 文档
  4. 接下来,安装 OpenMPI。请注意,OpenMPI 是 GitHub 链接,因此可能需要 GitHub 凭据。开放 MPI 项目是一个开源消息传递接口实现,由学术、研究和行业合作伙伴组成的联盟开发和维护。因此,Open MPI 能够结合整个高性能计算社区的专业知识、技术和资源,以构建可用的最佳 MPI 库,请参阅 OpenMPI 了解更多信息。
  5. 安装 Pollara 驱动程序和固件。这是 AMD 提供的固件包。该固件还将安装“nicctl”命令行实用程序以与 Pollara NIC 交互并运行命令以重置卡或配置 QOS 等。

    固件版本的输出:

  6. 固件安装完成后,运行重置卡以显示固件版本。

    Pollara 固件更新的 NIC 输出

  7. 安装ANP插件。ANP 是一个插件库,旨在通过扩展的网络传输支持来增强 RCCL 集体通信库。ANP 插件库是一个私有 AMD 库。
  8. 最后,构建 RCCL 测试

Broadcom BCM957608用于 RDMA 流量的 Thor2 DCQCN 配置

AMD 服务器中的默认 DCQN-ECN/PFC 属性。

网络接口适配器配置了以下用于 RoCE 流量的服务等级(包括 DCQCN-ECN)参数:

对于 Thor2 NIC 适配器:

  • 启用 RoCEv2 (RDMA over IPv4)
  • 启用拥塞控制 (ECN) 和 PFC
  • 在优先级 3 上用 DSCP 26 标记的 RoCE 流量
  • 使用 DSCP 48 和 PRIORITY 7 标记的 RoCE CNP 流量

映射 Broadcom 和逻辑接口名称,以配置 AMD 服务器中 RDMA 的 DCQN-ECN/PFC 和 TOS/DSCP 流量属性

需要在连接到GPU后端的接口上配置DCQCN、ECN、PFC和流量标记;仅在 GPU#_eth (#=0-7) 接口上。

在本文档的“ 更改NIC属性 ”部分中,我们确定服务器中的 gpu#_eth 接口是 Broadcom BCM957608(如下所示)NIC。

本节中配置服务等级的所有步骤都将重点介绍这些 Broadcom 接口。

我们将结合使用 Linux 系统命令和 Broadcom 工具来启用、调整和监控 DCQCN ECN/PFC作和 RoCE 流量标记。对于其中一些命令,我们需要找到与每个 GPU 接口关联的 Broadcom 接口名称。请按照以下步骤查找这些映射:

  1. 使用以下逻辑查找每个 gpu#_eth 接口的 PCI 地址:

    示例:

  2. 使用以下逻辑查找与每个 PCI 地址对应的 bnxt_re# (#=0-7) 设备:

    示例:

  3. 映射 GPU 接口 bnxt_re# 或 mlx5_# 接口名称。

组合步骤 1 和 2 的输出以创建从 gpu#_eth 到 bnxt_re# 或 mlx5_# 的完整映射。例如,您可以从输出中看到,gpu0_eth对应于 bnxt_re3 (0000:66:00.0)

您可以使用以下逻辑来简化该过程:

示例

为 AMD 服务器(Broadcom 接口)中的 RDMA 配置 DCQN-ECN/PFC 和 TOS/DSCP 流量属性

下表列出了与 DCQN-ECN/PFC 和 TOS/DSCP 相关的一些参数:

表 25.服务器 DCQCN 配置参数

默认
参数说明
cc_mode

0 表示 确定性标记 (DCQCN-D

1 用于 概率标记 (DCQCN-P)

1
cnp_ecn 启用/禁用 ECN 0x1(启用)
cnp_dscp RoCE 拥塞通知数据包的 DSCP 值 48
cnp_prio RoCE 拥塞通知包的优先级 7
cnp_ratio_th 定义生成 CNP 的阈值比率。它决定了响应拥塞而发送的 CNP 速率,从而有助于控制反馈机制的积极性。 0x0
ecn_enable 启用拥塞控制。 0x1(启用)
ecn_marking 支持将数据包标记为支持 ECN。ECN = 01 0x1(启用)
default_roce_mode 设置 RDMA 的默认 RoCE 模式 RoCE v2
default_roce_tos 设置 RDMA 流量的默认 ToS 值 104
roce_dscp RoCE 数据包的 DSCP 值。 26
roce_prio RoCE 数据包的优先级。 3
RTT cnp 和传输数据包计数累积的时间段 (μs)。在 rtt 结束时,计算 CNP 和 TxPkts 之间的比率,并更新 CP。 40 微秒。

BCM95741X以太网网络适配器支持每个以太网端口的三个传输和接收队列:0、4 和 5。

BCM95750X以太网网络适配器支持每个以太网端口的八个传输和接收队列:0 到 7。

默认情况下,所有队列均配置为加权公平队列 (WFQ),优先级 0 的流量映射到队列 4。

加载 RoCE bnxt_re 驱动程序后,CoSQ 0 配置为无损流量,CoSQ 5 从 WFQ 更改为 CNP 处理的严格优先级 (SP)。

RoCE 和 CNP 流量可以使用不同的 DSCP 值进行标记,也可以改用 VLAN 标记。

默认情况下,ToS 字段设置为 104,这意味着 DSCP 设置为 48,ECN 位设置为 10(启用 ECN)。

这些参数可以使用三种不同的方法进行调整:

  • 直接配置 DCQCN/RDMA 标记值
  • 使用 Broadcom 工具(例如 niccli,lldptool 直接)配置 DCQCN/RDMA 标记值
  • 使用实用程序配置 the bnxt_setupcc.sh DCQCN/RDMA 标记值,该实用程序在后台使用或 niccli lldptool (默认)。

以下部分介绍使用这些不同选项进行更改的步骤。

注意:请确保所有更改都与交换矩阵内的交换机配置一致。示例:

直接为 RDMA 配置 DCQN-ECN/PFC 和 TOS/DSCP 流量属性

您可以通过直接编辑包含每个参数值的文件来更改 DCQCN 和流量标记。此方法是最简单的,不需要安装任何额外的工具。但是,它不是 PFC 相关参数的选项,也不是所有类型的网络适配器都支持它。

要为特定接口完成这些更改,您必须在相应的接口目录中,按照以下步骤作:

  1. 为 QoS 相关值创建接口目录

    我们确定了 gpu#_eth 接口与相应的 Broadcom 接口名称之间的映射

    GPU 到 NIC 映射:

    gpu0_eth => 0000:06:00.0 => bnxt_re0

    gpu1_eth => 0000:23:00.0 => bnxt_re1

    gpu2_eth => 0000:43:00.0 => bnxt_re2

    gpu3_eth => 0000:66:00.0 => bnxt_re3

    gpu4_eth => 0000:86:00.0 => bnxt_re4

    gpu5_eth => 0000:a3:00.0 => bnxt_re5

    gpu6_eth => 0000:c3:00.0 => bnxt_re6

    gpu7_eth => 0000:e6:00.0 => bnxt_re7

    我们将使用 Broadcom 接口名称创建目录(rdma_cm 和 bnxt_re),其中 DCQCN 属性以及每个接口的其他参数和统计信息将在这里。

    接口特定目录在使用以下命令创建之前不存在:

    请注意,这两个目录必须存在。

    例如,如果缺少rdma_cm目录,请尝试以下作:

    示例

    对所有 GPU 接口重复这些步骤。

    注意:您必须是 root 用户才能进行这些更改。

    新目录将包含与 ECN、ROCE 流量和其他函数相关的值:

    您可以在目录中找到/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc#其中一些参数的描述,以及它们的当前值cat to apply

    示例

  2. 启用 RoCEv2作。

    即使 RoCEv2 应为默认模式,此处显示了启用 RoCEv2 的命令。

    注意:此更改是在 rdma_cm 目录下进行的
    注意:输入完全如图所示的值,包括空格:“RoCE v2”(区分大小写)。

    设置参数后,应用新值,如下所示:

    验证更改:

  3. 启用 ECN 响应和通知功能。

    尽管默认情况下应启用 ECN,但此处显示了启用 ECN 的命令。
注意:此更改是在 bnxt_re0 目录下进行的。
如果需要,您可以通过输入 来禁用 ECN。

在 Broadcom 接口上启用 ECN 后,它们将响应 CNP 数据包 (RP),并在收到带有 ECN 标记的接口 (NP) 时生成 CNP 数据包。

要禁用它,请输入 echo -n 0x0 > cnp_ecn

设置参数后,应用新值:

验证更改:

您还可以将 CNP 和 ROCE 数据包标记为 ECN 合格(这意味着,当发生拥塞时,这些数据包可以通过网络进行标记)。

总结这些属性:

ecn_enable 启用/禁用 ECN 的 RP(响应点)端。它使设备能够响应 CNP 数据包。默认值 = 1(启用)
cnp_ecn 将标记为 CNP 数据包符合 ECN 条件。ECT 字段的值为 01 或 10。
ecn_marking 将 ROCE 数据包标记为 ECN 合格。ECT 字段的值为 01 或 10。
  1. 为 CNP 和 RoCEv2 数据包配置 DSCP 和 PRIO 值。
    注意:并非所有类型的 Broadcom 接口卡都可以通过手动配置这些值(如下所示)。例如,对于 BCM95741X 设备,您可以使用此方法配置 ECN 和 RoCE 优先级值,但在 BCM95750X/BCM957608 设备上,您可以配置

    请参阅 Broadcom 以太网网络适配器拥塞控制参数

    注意:这些更改是在 bnxt_re0 目录下进行的。
    注意:以下错误表示不支持直接更改此参数的值。如果是BCM957608 roce_prio,并且需要使用(后文所述)进行 bnxt_setupcc.sh 配置cnp_prio。

    设置参数后,应用新值:

    验证更改:

  2. 配置 DCQCN 算法(在 bnxt_re 目录下)。

    Broadcom 以太网网络适配器中的默认 DCQCN 拥塞控制(cc 模式)算法是 DCQCN-P。可以使用以下命令更改模式:

    注意:此更改是在 bnxt_re0 目录下进行的。

    要使用 DCQCN-P ,请配置:

    要使用 DCQCN-D ,请配置:

  3. 检查已配置的所有属性。

以下命令显示所有接口参数:

有关 Broadcom 以太网网络适配器中 DCQCN 算法的详细信息,请查看以下文档: 更改拥塞控制模式设置RoCE 拥塞控制

示例

我们强调了一些 ECN/CNP 相关参数:

使用 niccli 为 RDMA 配置 DCQN-ECN/PFC 和 TOS/DSCP 流量属性

您可以使用 NICCLI 配置实用程序对 DCQCN 和流量标记进行更改。

niccli是 Broadcom 以太网网络适配器的管理工具,可提供详细信息,包括类型、状态、序列号和固件版本。此外,它支持配置接口属性,如 DCQCN-ECN、PFC 和 TOS/DSCP,以优化 RDMA 流量。

注意:niccli 工具需要安装在您的系统中。

安装 NICCLI 配置实用程序

您可以使用以下示例所示获取可通过服务器 niccli listdev, or list-eth 上的 niccli 进行管理的接口适配器和以太网端口的摘要。

您可以在单行模式交互模式批处理模式下使用niccli。提供了niccli -h help这些模式的高级说明。在本节中,我们将展示一些示例,说明如何使用单线交互模式进行 DCQCN-ECN、PFC 和 TOS/DSCP 配置。

在没有选项的情况下进入允许您 niccli 在交互模式下工作,您可以在其中选择适配器/接口(按索引),然后选择适当的 <command> 适配器/接口(例如,显示、get_qos、set_map)以获取信息或对所选接口进行更改。

您可以使用将 Broadcom 接口名称与逻辑接口名称进行映射 一节中所述的方法来识别与每个接口对应的接口索引。这将为您提供接口和 pcie 地址之间的映射,然后您可以将其与下面的输出 niccli 相关联。

确定后,输入接口索引(输出中的第一列),如以下示例所示。

示例

输入后 ,您可以发出相同的命令,但包括目标接口,然后是命令,所有这些都在一行中。该 niccli -list 命令可用于确定接口索引。

示例

提供了 sudo niccli help 可用于交互式和单行模式的命令和选项的广泛列表。

注意:对于以下所有示例,我们将使用单行模式来获取信息并进行配置更改。

以下示例说明如何使用 niccli 来获取有关特定接口的信息。

  1. 检查接口状态。

    提供 niccli -i <interface> show 有关接口的详细信息,例如类型、MAC 地址、固件、序列号、设备运行状况、温度等。

    示例

  2. 检查 QoS 设置
命令 显示 DSCP 和优先级值之间以及优先级值、流量类 (TC) 和输出队列之间的映射。

示例中的输出显示以下默认设置:

  • 队列状态。仅启用队列 0、1 和 2。
  • 优先级到 DSCP 的映射:优先级 7 = > DSCP 48 和优先级 3 => DSCP 26。
  • TC(流量类)和队列映射的优先级:优先级 7 => TC2(队列 0)=> DSCP 48 和优先级 3 => TC1(队列 5)=> DSCP 26。
注意:输出可能会令人困惑;显示的队列 ID 是内部 CoS 队列号。这实际上意味着流量类别 0、1 和 2 的队列已启用,所有其他流量类别将被禁用。

sudo niccli -i <interface-index> get_qos 命令提供接口上 QoS 配置的摘要。

示例

IEEE 802.1Qaz ETS 配置 TLV:显示增强型传输选择 (ETS) 配置
PRIO_MAP:0:0 1:0 2:0 3:1 4:0 5:0 6:0 7:2

将优先级映射到流量类 (TC)

优先级 0、1、2、4、5、6 → TC 0

优先级 3 → TC 1

优先级 7 → TC 2

TC 带宽:50% 50% 0%

为流量类别分配带宽百分比。

TC 0:占总带宽的 50%。

TC 1:50%。

TC 2:0%。

TSA_MAP:0:ets 1:ets 2:严格

TSA_MAP 与 TC Bandwidth 一起为每个 TC 分配资源并定义服务优先级。相当于 Junos 中的调度器和调度器映射。

指定用于每个 TC 的传输选择算法 (TSA):

TC 0 和 TC 1 使用 ETS(增强型传输选择) 并按 50/50 共享可用带宽

TC 2 使用严格优先级,这意味着 TC 2 流量将始终首先发送

IEEE 802.1Qaz PFC TLV:使用 APP TLV(类型-长度-值)格式定义流量分类
启用 PFC:3

指示在优先级 3 上启用 PFC。

其他优先级未启用 PFC。

PFC 可确保具有此优先级的流量可以暂停,而不是在拥塞期间被丢弃。

IEEE 802.1Qaz APP TLV

应用#0:

优先级:7

选:5

DSCP:48

应用#1:

优先级:3

选:5

DSCP:26

应用#2:

优先级:3

选:3

UDP 或 DCCP:4791

将流量映射到流量类。等效于 Junos 中的多域分类器。

APP#0:标有 DSCP = 48 的流量映射到优先级 7

APP#1:标记为 DSCP = 48 的流量映射到优先级 3

APP#2:端口 = 4791 (RoCEv2) 的 UDP 或 DCCP 流量映射到优先级 3

TC 速率限制:100% 100% 100% 0% 0% 0% 0% 0%

TC 0、TC 1 和 TC 2 最多可使用 100% 的带宽。

TC 3 到 TC 7 设置为 0%,表示当前未将其配置为传输流量。

如果需要,将优先级更改为流量类别映射或将应用更改为流量类别映射。

我们建议保留默认设置,并确保它们与 GPU 后端交换矩阵中叶节点上的服务等级配置一致。

如果需要更改流量类映射的优先级或流量类映射的应用程序,可以使用以下命令:

优先级到流量类映射

示例

应用到流量类别的映射

示例

如果需要,请更改 ETS 配置属性。

我们建议保留默认设置,并确保它们与 GPU 后端交换矩阵中叶节点上的服务等级配置一致。

示例

如果需要,配置 PFC

示例

以下命令尝试在优先级 5 和 6 上启用 PFC,并演示只能将一个队列(一个优先级)配置为无损队列(支持 PFC)。

使用 bnxt_setupcc.sh 配置 DCQCN 和 RoCE 流量标记值

使用 bnxt_setupcc.sh 可以简化流程的实用程序。

bnxt_setupcc.sh 实用程序可以简化启用或禁用 ECN 和 PFC,以及更改给定接口的 ROCE 和 CNP 数据包的 DSCP 和 PRIO 值。

在幕后,它使用 niccli (默认)或 lldptool 可以作为命令的一部分选择。

您需要按照 bnxt_setupcc.sh 帮助菜单中的说明输入,然后输入您选择的选项:

示例

接口 gpu0 (bnxt_re0) 的 CNP 数据包的默认 DSCP 标记为 0,如下输出所示:

bnxt_setupcc.sh可用于将其更改为交换矩阵 (48) 的预期值,如下所示:

地点:

  • -u 3:使用 Broadcom niccli 实用程序
  • -p 48:将 CNP 数据包的 DSCP 值设置为 48 (0x30)
  • -c:将 CNP 数据包的优先级配置为 6
  • -s:将常规 RoCE 数据包的 DSCP 值定义为 26 (0x1a)
  • -r:将常规 RoCE 数据包的优先级设置为 5
  • -m 3:配置 PFC 和拥塞控制 (ECN)。
注意:需要设备 (-i) 才能完成脚本。此外,您不能只配置一个 DSCP/PRIO 值。您需要配置 CNP-DSCP 值 (-p)、CNP-PRI 值 (-c)、RoCE-DSCP (-s) 和 RoCE-PRIO (-r),命令才能正常工作。

通过以下方法验证结果:

注意:您不仅 bnxt_setupcc.sh需要确保已安装和可执行,还需要确保至少安装了一个工具( niccli lldptool或 )。

以下示例显示了 和 nicclibnxt_setupcc.sh安装,但lldptool未安装。它还显示了安装和使用 lldptool.

用于 lldptool 检查或修改 LLDP(链路层发现协议)设置。要启用 LLDP,您需要安装 lldpad, 它也会自动安装 lldptool

要安装 lldpadlldptool 执行以下步骤:

  1. 安装所需的依赖项。

    在安装 lldpad 之前,请确保通过运行以下命令安装必要的库:

    • libconfig9 – 配置文件处理库。
    • libnl-3-200 – 用于与 Linux Netlink 接互的库。
  1. 安装 lldpad。

    通过运行以下命令安装 lldpad:

    此软件包可在系统上启用 LLDP,使其能够与其他设备交换网络拓扑信息。

  2. 启用 lldpad。

    使用 systemctl 启用 lldp:

    这将创建一个系统服务,确保 lldpad 在重新启动后始终运行。

  3. 启动 lldpad 服务

    使用 systemctl 激活 lldp:

    这会立即激活 lldpad,使其能够处理 LLDP 数据包。

    注意:
    要手动重新启动 lldpad,请使用:
    要禁用 lldpad 在启动时启动,请使用: sudo systemctl disable lldpad
  4. 验证安装

使用 systemctl 检查服务状态

这可确保工具已安装并可供使用。如果一切正常,您应该会看到“活动(正在运行)”状态。

您可以使用 lldptool 在接口上启用或禁用 LLDP,并检查 LLDP 状态和在该接口上发现的邻接方。lldptool -h 向您显示所有不同的选项:

有关更多详细信息,请查看 Broadcom 以太网网络适配器用户指南手动安装和配置软件部分或安装 NICCLI 配置实用程序

监控接口和 ECN/PFC作:

获得特定 GPU 的 Broadcom 名称后(如本部分开头所述),您就可以找到接口作状态以及 RoCE 流量和拥塞控制统计信息所在的目录。

  1. 导航到相应的目录

/sys/class/infiniband/<Broadcom-interface-name>

示例

对于gpu0_eth:

在这里,您可以检查作状态、地址、mtu、速度和接口统计信息等属性(包括传输和接收的数据包、丢弃的数据包,以及 ECN 标记的数据包、接收的 CNP 数据包和传输的 CNP 数据包):

要检查 ECN 统计信息,请检查特定接口的相关计数器:

要检查 PFC 统计信息,请使用:

示例

将服务器配置为使用 RCCL 控制流量的管理接口:

ROCm 通信集体库 (RCCL) 创建 TCP 会话来协调进程并交换 RoCE 的队列对信息、GID(全局 ID)、本地和远程缓冲区地址、RDMA 密钥(用于内存访问权限的 RKEY)

注意:此流量与 RoCEv2 流量(端口 4791)分开,用于同步模型参数、部分运算结果等。

这些 TCP 会话将在作业启动时创建,默认情况下使用其中一个 GPU 接口(用于 RoCEv2 流量的接口相同)。

示例:

建议使用连接到(前端交换矩阵)的管理接口。为此,请在启动作业时包括以下内容: export NCCL_SOCKET_IFNAME=“mgmt_eth”。 相同的环境变量同时适用于 NCCL 和 RCCL。

示例:

注意:默认情况下,这些会话启用 ECN; net.ipv4.tcp_ecn = 1 ,但可以使用以下方式禁用: sudo sysctl -w net.ipv4.tcp_ecn=0

用于 RDMA 流量的 AMD Pollara DCQCN 配置

对于 AMD Pollara 验证,需要启用 DCQCN,并且必须在 AMD NIC 卡上应用 QOS。

  1. 使用脚本在 NIC 上配置 QOS。DSCP参数等同于表25中建议的值。服务器 DCQCN 配置参数。
  2. 使用 AMD nicctl 命令行实用程序,以下是配置的 QOS 参数:
  3. rdma link 命令可用于检查是否存在与 AMD Pollara NIC 卡的 roce-devices 关联。

    roce-devices 在加载 ionic_rdma 内核模块时创建,应为每个 NIC 卡创建以下 roce-device 文件。

  4. 要在 AMD Pollara NIC 上配置 DCQCN,请使用适当的参数运行以下脚本。
  5. 使用 nicctl 命令,检查每个 roce-device 的 DCQCN 配置文件。
  6. 最后,运行rccl_test.sh脚本,如下所示。下面的示例显示了为“全部减少”运行的测试。