Nvidia-Industries
介绍
OpenStack 包括对 HDR(200 Gigabit)InfiniBand 网络上的裸机云服务的原生上游支持,使客户能够在具有安全功能的多租户裸机云上轻松部署和运行具有 RDMA/IPoIB 支持的 HPC 和 AI 工作负载以及 InfiniBand低延迟、高数据吞吐量、网内计算等。
下面Reference Deployment GUIDE(RDG)显示开栈裸机云为HPC / AI多用户负载的完整部署加速由NVIDIA GPU和NVIDIA的InfiniBand HDR 200GB / s的织物。RDG 涵盖单机架参考部署,可轻松扩展为多机架解决方案。
此 RDG 包括解决方案设计、规模注意事项、硬件 BoM(物料清单)以及在 InfiniBand 结构上的 Bare Metal 租户实例之间部署、提供服务和执行基于 GPUDirect 的基准测试的步骤。
以下解决方案基于 OpenStack RDO(“Ussuri”版本)作为云平台,使用 TripleO 软件部署集成的 InfiniBand 支持。
可下载的内容
本文中用到的所有配置文件都可以在这里下载: OPSTK_IB_BM_RDG.zip
解决方案架构
关键部件和技术
NVIDIA Tesla V100 GPU是有史以来先进的数据中心 GPU,用于加速人工智能、高性能计算 (HPC)、数据科学和图形。它采用 NVIDIA Volta 架构,提供 16GB 和 32GB 配置,并在单个 GPU 中提供高达 32 个 CPU 的性能。
NVIDIA Mellanox ConnectX-6 VPI HDR/200GbE 智能适配器 ,支持网络计算、可扩展分层聚合和减少协议 (SHARP)™ 的附加组件以及增强的拥塞控制,最大限度地加速高性能计算、机器学习、云、数据分析和存储平台。
NVIDIA Mellanox Quantum HDR 200Gb/s InfiniBand 智能交换机是世界上智能的交换机,通过协同设计可扩展分层聚合和缩减协议 (SHARP)™ 技术实现网络内计算。QM8700 系列拥有市场上最高的结构性能,高达 16Tb/s 的无阻塞带宽和低于 130ns 的端口到端口延迟。
NVIDIA Mellanox LinkX 电缆和收发器系列为云、HPC、Web 2.0、企业、电信和存储数据中心应用程序提供业界最完整的10、25、40、50、100、200 和 400G 互连产品系列。
GPUDirect RDMA 支持外围 PCIe 设备直接访问 GPU 内存。GPUDirect RDMA 专为满足 GPU 加速需求而设计,提供远程系统中 NVIDIA GPU 之间的直接通信。这消除了系统 CPU 和通过系统内存所需的数据缓冲区副本,从而提高了性能。 本文演示的带宽测试中使用了 GPUDirect RDMA 技术。
逻辑设计
下面是解决方案逻辑设计的说明。
图片备注
单个 HDR 200Gb/s IB 结构用于租户和 OpenStack 控制网络。Fabric 向后兼容 EDR 100Gb/s 适配器和电缆
Neutron 组件 (api/dhcp/l3) 包括在控制器节点上支持 InfiniBand 所需的代码
Fabric 管理节点负责将 OpenStack 操作转换为基于 IB 的安全高速网络层的配置
面料设计
结构拓扑
下面是解决方案的结构拓扑图。
参考架构规模
单一交换机解决方案的初始设置:
单机架
1 x QM8700 HDR 200Gbps IB 交换机
3 个控制器节点
2 个裸机租户节点
1 个交换矩阵管理节点
两层胖树拓扑的扩展设置:
此部署方案最多 可扩展至 20 台 Spine 交换机和 40 台 Leaf 交换机,并支持多达800 台服务器。
主机设计
租户隔离
下面是解决方案主机设计的说明。
图片备注
PKey 用于隔离其所属租户网络上的 Bare Metal 实例流量。
租户命名空间包括具有 IPoIB 支持的 DHCP 服务器/vRouter(L3 代理),并配置了 PKey 以隔离它们所属租户网络上的流量。
应用逻辑设计
软件堆栈组件
物料清单 (BoM)
笔记
上面的 BoM 是指基于 1xRack 的参考 架构。
部署和 配置
物理布线
笔记
使用双端口 InfiniBand 适配器时,只应将第一个端口连接到结构。
从操作系统的角度来看,网络设备 ib0 将用于 IPoIB 流量。Provisioning 网络用于 Undercloud 的 Overcloud Nodes 部署,OcProvisioning 网络用于 Overcloud Controller Nodes 的 Bare Metal Tenant Nodes 部署。
将所有节点连接到 IPMI 网络。
连接 IB 交换机管理。端口连接到 OpenStack Provisioning 网络并分配 Overcloud 节点范围之外的 IP 地址。
将 Fabric 管理节点连接到 OpenStack Provisioning 网络并分配 Overcloud 节点范围之外的 IP 地址。
将 Fabric 管理节点、Overcloud 节点(控制器节点)和裸机租户节点连接到 IB Fabric。
将 OpenStack Undercloud 和 Overcloud 节点(控制器节点)连接到 OpenStack Provisioning 网络。
将 Undercloud 节点和 Controller 节点连接到外部(公共)网络。
IPoIB 结构配置
网络名称 | 网络详情 | 密钥标识 |
---|---|---|
贮存 | 172.16.0.0 / 24 | 800b |
存储管理 | 172.17.0.0 / 24 | 8015 |
内部API | 172.18.0.0 / 24 | 801f |
OcProvisioning | 172.70.0.0/24 | 8046 |
租户 VLAN | 由租户创建 | 80 |
笔记
在以太网、OpenStack 部署中,VLAN 可用于租户隔离。在 InfiniBand 中,分区键 (PKey) 用于获得租户隔离。
租户网络 VLAN ID“N”映射到租户 PKey“80
解决方案配置和部署
主机配置
先决条件
确保具有相同角色(控制器节点/裸机节点等)的服务器的硬件规格相同
服务器 BIOS
控制器节点
确保在连接到 PXE 网络的接口上设置了网络引导(在我们的例子中是第一个 1GbE 端口),并且这个接口在引导顺序中列在前面。
裸机租户节点
验证是否在连接到 IB 交换机(在我们的示例中为端口 1)PXE 网络的 ConnectX IB 适配器端口上设置了网络引导,并且该接口在引导顺序中列在首位。
对于 GPUDirect 使用 - 验证虚拟化和 SR-IOV 在 BIOS 中已禁用
Post-BIOS IB Adapter FlexBoot界面(使用 ctrl+B 输入)- 验证是否启用了 PXE 并将 PKey 设置为匹配 OcProvisioning 网络 VLAN ID(在我们的示例中为 70)
IB转接卡
确保所有 ConnectX-6 适配器端口的固件链接类型用于 控制器/裸机/结构管理 节点,并且它们连接到 IB 结构并设置为 InfiniBand,如下所示。
为您的适配器的 ib0 接口获取 MST 设备。使用以下命令识别 MST 设备:
查询固件参数:
如果您需要更改任何参数,请参阅使用 mlxconfig指南。
结构管理节点安装
在本文中,单个 Fabric Management 节点与多个应用程序容器一起部署。 是否建议在生产中使用高可用性进行部署 - 请参阅 UFM/ NEO 用户手册了解更多详细信息。
UFM 用户手册可在My Mellanox 门户中找到。有关更多详细信息,请联系 NVIDIA-Mellanox 支持。
结构管理节点操作系统
在 Fabric Mgmt 节点上安装操作系统。(在这个解决方案中,我们使用了 CentOS 7.x 操作系统)。
安装并启用 Docker。
使用 “ibstat”命令确保Fabric管理节点已连接到IB Fabric,并且链路已开启且速率为200。
确保 Fabric 管理节点连接到 OpenStack 供应网络,并分配 Overcloud 节点范围之外的 IP 地址。
在我们的示例中,我们已将 IP 192.168.24.225 分配给该节点。
UFM 应用程序容器
此处提供有关 UFM 容器的其他信息。
创建一个本地目录来存储共享的 UFM 配置。
确保可以访问 Internet 并从存储库中提取 NEO 应用程序映像。
使用映射的本地目录启动 UFM 容器,并验证它已启动。
将容器中的配置文件复制到本地共享配置目录中。
将您的 UFM 许可证复制到容器中。
联系 NVIDIA-Mellanox 支持以获得 UFM 评估许可证
在容器上启动交互式 bash shell。
在容器内编辑以下配置文件。
重启UFM服务并退出容器。
NEO 应用容器
有关 NEO 容器的其他信息可在此处获得
确保可以访问 Internet 并从存储库中提取 NEO 应用程序映像。
启动 NEO 容器并验证它已启动。
在容器上启动交互式 bash shell。
编辑以下配置文件以允许 NEO 与运行在同一主机上的 UFM 应用程序进行通信。
重启NEO服务并退出容器。
应用程序 Web 用户界面
使用以下 URL 从 Provisioning 网络上的客户端连接到 UFM WebUI。
默认登录凭据:admin/123456
使用以下 URL 从 Provisioning 网络上的客户端连接到 NEO WebUI。
默认登录凭据:admin/123456
OpenStack Undercloud 节点准备和安装
在下面的解决方案中,我们使用 使用 TripleO 的 RDO OpenStack 部署。
CentOS 8 操作系统,100GB 根分区
“Ussuri”OpenStack 发布 TripleIO 存储库
undercloud 配置文件“ undercloud.conf ”。
在 Undercloud 节点上创建以下目录和 Dockerfile,用于构建具有 IB 支持的自定义 Neutron 组件。
创建如下容器镜像准备配置文件“undercloud.conf”中引用的“containers-prepare-parameter.yaml”, 放在
/home/stack/
目录下 。以堆栈用户身份完成 Undercloud安装。
基于 CentOS 8 和 Ussuri 发布组件构建 Overcloud 镜像。此处描述了完整过程 。
自定义 Overcloud 映像以包含 NVIDIA MLNX_OFED 网络驱动程序:
以堆栈用户身份将 Overcloud 图像上传到图像存储中。
使用节点 IPMI 信息准备 overcloud 裸机节点清单文件 “instackenv.json”。在我们的例子中,清单包括 3 个控制器节点。确保使用 IPMI 服务器地址和凭据更新文件。
导入 overcloud 裸机节点清单并等待所有节点都列在“可管理”状态。
OpenStack Overcloud 自省和 IB 基础设施 配置
控制密钥配置
登录 UFM WebUI。
在 Undercloud 节点上,启动 Overcloud 节点自省过程。
笔记
在自省阶段,Overcloud IB 设备将出现在 UFM Web UI 中。 使用发现设置设备的时间完成控制 PKey 的创建,如下一步所述。如果自省在您能够完成 PKey 配置之前完成并且 IB 设备不再出现在 UFM 中,请重复自省以完成 PKey 配置步骤。
本节中描述的“裸机”节点是指将作为 Overcloud 节点部署的节点,而不是稍后创建的租户裸机实例。
在发现设置设备时,在 UFM UI 中创建内部 API、存储、Storage_Mgmt 网络的控制 PKey(ID 在上面的 IPoIB 网络配置表中进行了描述)。无需为 OcProvisioning 网络提前创建 PKey。
该过程包括以下步骤:
验证已发现所有设置设备。
创建带有十六进制 ID 的 PKey。
添加 Overcloud 节点(控制器节点)GUID 作为控制 PKey 中的成员。
对除 OcProvisioning PKey 之外的每个 Control PKey 重复这些步骤。
笔记
只有在定义了所有控制 PKey 之后,才能继续执行下面的 Overcloud 部署步骤。
OpenStack Overcloud 部署
作为 Undercloud 上的堆栈用户,将 overcloud裸机节点配置文件映射到每个节点的相关角色:
准备好以下云部署配置文件,放在
/home/stack/templates/
目录下。完整文件附在本文后,可以在此处下载:控制器.yaml
network_data_ib_bm.yaml
roles_data_ib_bm.yaml
节点信息-ib-bm.yaml
中子-ml2-mlnx-sdn-bm.yaml
此配置文件包含托管 NEO 的 Fabric 管理节点的连接详细信息。
网络环境-ib-bm.yaml
ib-env-bm.yaml
在此配置文件中,“数据中心”物理网络映射到 Open vSwitch 驱动程序(以太网结构),而“ibnet”物理网络映射到 IPoIB 驱动程序(InfiniBand 结构)。
为了将 Mellanox SDN 控制仅限于 InfiniBand 物理网络,请在部署云后在 Controller 上的 ml2_conf.ini 文件中的 [sdn] 部分下明确指定 InfiniBand 物理网络名称(例如“physical_networks=ibnet”) , 并重启 neutron_api 服务容器和 NEO 应用程序。
发出 deploy 命令以使用准备好的配置文件启动 Overcloud 部署。
OpenStack 裸机云镜像创建
笔记
我们强烈建议为云镜像使用 CentOS 7 发行版,因为它在 OpenStack 环境中通过 IB 结构的 DHCP/PXE 启动测试成功
使用 NVIDIA MLNX_OFED 网络驱动程序部署裸机映像
Bare Metal 配置需要“部署镜像”,Bare Metal Ironic 服务使用这些镜像来准备 Bare Metal 服务器以进行来宾操作系统镜像部署。
构建自定义 ironic-deploy-mofed.kernel 和 ironic -deploy-mofed.initramfs 使用 NVIDIA MLNX_OFED 网络驱动程序部署映像 ,使用磁盘映像生成器 (DIB) 工具,如下文所述: 操作方法:创建 OpenStack 云带有 NVIDIA GPU 和 Mellanox OFED 组件的图像。
带有 GPUDirect 堆栈的裸机客户机操作系统映像
使用 disk-image-builder (DIB) 工具构建自定义CentOS 7客户操作系统云镜像,如下文所述: 操作方法:使用 NVIDIA GPU 和 Mellanox OFED 组件创建 OpenStack 云镜像。
使用以下元素构建带有 GPUDirect 就绪软件堆栈的 Bare Metal 访客 qcow2 映像:
“mofed”元素:用于 NVIDIA MLNX_OFED 网络驱动程序安装 - 请参阅下面的说明
“cloud-init-config”元素:用于使用基于密码的 SSH 访问创建用户 - 请参阅下面的说明
“cuda”元素:用于 CUDA 驱动程序和 NV_PEER_MEMORY 安装 - 请参阅下面的说明
“gpudirect-tools”元素:用于安装 GPUDirect 测试工具 - 请参阅下面的说明
“singularity”元素:对于 Singularity Container Runtime 安装 - 请参阅下面的说明
NVIDIA Mellanox OFED 安装元件
笔记
该元素要求:
构建主机上的 MLNX_OFED ISO 文件
“mofed”元素用于构建安装了 NVIDIA 网络驱动程序集的访客映像,也称为 MLNX_OFED。
从 NVIDIA 网络 Linux 驱动程序站点下载相关的 MLNX_OFED ISO 文件 。由于本文使用的是 CentOS 7.8,因此我们将下载 RHEL 7.8 变体,例如:
下载 mofed 元素文件 mofed.zip。附件包括以下文件:
README.rst : 元素描述和目标
element-deps : 元素依赖,在我们的例子中不依赖其他元素
package-installs.yaml:MLNX_OFED 安装所需的软件包列表
pkg-map:包列表到 RedHat OS 分发包的映射
extra-data.d/70-copy-ofed-file:用于在构建过程中将 MLNX_OFED ISO 复制到 DIB 环境的脚本,需要 DIB_OFED_FILE 环境变量来指向 MLNX_OFED ISO 文件在构建主机操作系统中的位置。
install.d/70-ofed-install:用于在构建过程中在 DIB 环境中安装 MLNX_OFED 的脚本,支持来宾映像内核版本。
将文件放在 /home/diskimage-builder/elements/mofed 目录下,并确保脚本具有可执行权限:
使用 构建主机上的MLNX_OFED ISO 文件位置设置环境变量 :
Cloud-init 配置元素
笔记
Cloud-init 是一种跨平台的云实例初始化方法。有关 cloud-init 的更多信息,请参阅 Cloud-init 文档
“cloud-init-config”元素用于构建带有自定义 cloud-init 参数的来宾映像,以在实例初始化期间使用。在我们的例子中,我们将使用它来确保在实例初始化期间使用所需的远程访问方法创建系统用户。
由于 Cloud-init 已经包含在 DIB 生成的 CentOS 7 基础镜像中,因此不需要任何依赖项或软件包安装,只需修改 cloud-init 默认配置文件。
下载 cloud-init-config 元素文件cloud-init-config.zip。附件包括以下文件:
README.rst : 元素描述和目标
post-install.d/50-cloud-init-config:用于修改 cloud-init 默认配置的脚本,以允许创建名为“stack”的管理员用户,该用户具有对使用此访客映像创建的实例的基于密码的 SSH 访问权限。
笔记
创建对实例具有基于密码的 SSH 访问权限的用户存在潜在的安全风险,仅为方便起见而提供。在生产环境中,强烈建议使用 SSH 密钥进行用户身份验证
使用以下命令为所需密码生成新的“salted”哈希,并填充 50-cloud-init-config 文件中的“passwd”值以包含新密码哈希。
笔记
请记住在编辑文件时转义特殊字符
我们的示例元素文件包含密码密钥的哈希值:“stack”
将文件放在 /home/diskimage-builder/elements/cloud-init-config 目录下,并确保脚本具有可执行权限:
CUDA 驱动程序和 NV_PEER_MEMORY 安装元素
按照 此处的说明使用 DIB 安装构建主机
笔记
该元素要求:
该目标来宾内核版本与构建主机内核版本相匹配,如果它们不相同,则会失败。使用最新的 CentOS 7 (7.8) 作为构建主机操作系统,并在发出构建命令之前将内核升级到最新版本。
构建主机上的 NVIDIA GPU 设备,没有它就会失败
安装在构建主机上的 CUDA 存储库
安装在目标图像上的 NVIDIA MLNX_OFED 网络驱动程序 - 确保始终将此元素与“mofed”元素一起使用
下载 cuda 元素文件 ( cuda.zip )。附件包括以下文件:
README.rst : 元素描述和目标
element-deps : 元素依赖
package-installs.yaml:CUDA 安装所需的软件包列表
pkg-map:包列表到 RedHat OS 分发包的映射
post-install.d/05-cuda-install:用于下载 CUDA 运行安装程序文件和安装 CUDA 驱动程序和 NV_PEER_MEMORY 模块的脚本,用于访客映像内核版本。GPUDirect 操作需要 NV_PEER_MEMORY。
将文件放在 /home/diskimage-builder/elements/cuda 目录下,并确保脚本具有可执行权限:
在构建主机上安装 CUDA 存储库:
使用 构建主机上的 CUDA 存储库位置和用于下载 CUDA 运行文件安装程序的 URL设置环境变量:
GPUDirect 工具安装元素
笔记
该元素要求:
该目标来宾内核版本与构建主机内核版本相匹配,如果它们不相同,则会失败。使用最新的 CentOS 7 (7.8) 作为构建主机操作系统,并在发出构建命令之前将内核升级到最新版本。
安装在目标图像上的 CUDA 驱动程序 - 确保始终将此元素与“cuda”元素一起使用
DIB_CUDA_PATH 环境变量如下所示
下载 gpudirect-tools 元素文件 ( gpudirect-tools.zip )。 附件包括以下文件:
README.rst : 元素描述和目标
element-deps : 元素依赖
package-installs.yaml:GPUDirect 工具安装所需的软件包列表
pkg-map:包列表到 RedHat OS 分发包的映射
post-install.d/06-gdrtools-install:用于安装 perftest、OpenMPI 和 Quda 的脚本,支持 CUDA/GPUDirect。
将文件放在 /home/diskimage-builder/elements/ gpudirect-tools 目录下,并确保脚本具有可执行权限:
使用目标构建映像上的 CUDA 文件位置设置环境变量:
Singularity 容器运行时安装元素
笔记
该元素要求:
该目标来宾内核版本与构建主机内核版本相匹配,如果它们不相同,则会失败。使用最新的 CentOS 7 (7.8) 作为构建主机操作系统,并在发出构建命令之前将内核升级到最新版本。
DIB_GO_URL 和 DIB_SING_URL 环境变量如下所示
下载奇点元素文件(singularity.zip )。 附件包括以下文件:
README.rst : 元素描述和目标
element-deps : 元素依赖
package-installs.yaml:Singularity 安装所需的软件包列表
pkg-map:包列表到 RedHat OS 分发包的映射
post-install.d/07-singularity-install:用于安装 GO 和 Singularity 运行时的脚本
将文件放在 /home/diskimage-builder/elements/ singularity 目录下,并确保脚本具有可执行权限:
使用需要的 GO/Singularity 版本的下载 URL 设置环境变量:
来宾操作系统映像构建
设置 DIB 预构建环境变量
使用相关元素运行构建命令:
成功完成构建过程后,将在 /home/diskimage-builder/ 目录中生成 centos7-bm-hpc.qcow2 映像文件。
裸机租户实例配置
将上一节准备好的 Bare Metal deploy 和 guest 镜像复制到 Undercloud 节点并上传到镜像存储,供 Bare Metal Ironic 服务使用:
创建一个供应网络和 子网,用于Controller Ironic 服务部署Bare Metal 租户 服务器:
笔记
确保 IP 地址池没有与部署配置文件 network_data.yaml 中配置的 Oc_provisioning 池冲突
在云部署配置文件和裸机服务器 PXE 配置中使用与 OcProvisioning 网络 vlan 相同的 VLAN ID(在本例中为 70)
将网络映射到“ibnet”物理网络(InfiniBand 结构)
创建配置网络后,Fabric Mgmt 节点会创建匹配的映射 PKey ID (0x8046),并将控制器节点 GUID 作为成员添加到 PKey。登录到 UFM WebUI 并将Fabric Mgmt 节点 GUID 添加到此配置网络 PKey - 裸机 PXE 部署阶段需要此步骤。
创建租户网络和子网。
在网络创建期间指定的 vlan ID 稍后将转换为唯一的 IB PKey(在本例中为 VLAN ID 101 → PKey ID 0x8065),并将由 Fabric Mgmt 在结构上配置。节点
将网络映射到“ibnet”物理网络(InfiniBand 结构)
使用自定义资源为 Bare Metal 实例创建风格:
笔记
请注意 CUSTOM_BAREMETAL 资源,因为其名称与后续步骤相关
作为使用设置为“0”的物理资源证明 以下,以避免调度基于标准管理程序 裸机实例的属性
收集连接到 IB 结构的裸机服务器 IB 适配器端口的 GUID。有几种方法可以获取 IB 适配器 GUID,通过查看适配器标签或在配置为 PXE 引导时引导服务器并检查其控制台屏幕:
准备一个名为 overcloud -nodes-ib-bm.yaml的裸机节点清单文件,其中包含裸机租户服务器的详细信息
笔记
包括在前面步骤中为每个服务器收集的 IB 适配器 GUID 作为“client-id”参数,前缀为:ff:00:00:00:00:00:02:00:00:02:c9:00:
更新每台服务器的 ipmi 凭据
使用名为“baremetal”的资源类,它对应于前面步骤中使用的 CUSTOM_BAREMETAL 风味资源
使用映射到 IB 结构的物理网络“ibnet”
导入清单文件并验证列出的节点:
找到您之前上传到镜像存储的 Ironic 自定义部署镜像,并将其设置为要在裸机部署期间使用的清单节点的内核/ramdisk 镜像
清理节点并为裸机租户实例创建做好准备
笔记
在此阶段,裸机服务器将使用 ramdisk 映像启动,并且它们的 HD 将被擦除,为来宾操作系统部署阶段做准备。清理阶段可能需要一段时间,您可以在服务器控制台屏幕上按照该过程进行操作。
验证节点对于 Bare Metal 来宾映像部署“可用”,并使用您上传到映像存储的自定义来宾映像生成 Bare Metal 租户实例
笔记
在此阶段,裸机服务器将启动两次,一次使用 ramdisk 映像,第二次使用 HD 来宾操作系统映像。您可以在服务器控制台屏幕上按照该过程进行操作。
确认
健全性和 连通性
验证两个 Bare Metal 租户实例都已启动且处于活动状态:
登录 UFM WebUI 并验证是否已根据创建的租户网络自动配置租户 PKey,并且相关 GUID 已添加为成员。
如下所示,VLAN ID 101 被映射到 PKey ID 0x8065。
控制器节点和裸机租户服务器的 GUID 作为成员添加到 PKey。
连接到租户 Bare Metal 租户实例之一,验证 IB 接口上的 PKey 配置,并检查通过 IB 结构与另一个 Bare Metal 租户实例的连接:
控制器节点上的 DHCP 服务器命名空间可用于使用我们在使用 cloud-init-config 元素构建访客映像时使用的“堆栈”用户名和密码获得对裸机服务器的 SSH 访问
验证我们用于构建访客映像的自定义 DIB 元素(例如 MLNX_OFED 和 CUDA)已安装并加载:
使用 vRouter 对裸机实例进行公共访问
创建一个带有通往公共网络的网关的外部提供商网络。
创建一个 vRouter 并将外部和之前创建的 IPoIB 租户网络附加到它。
连接到 Bare Metal 租户实例之一并检查 Internet 连接:
基础设施 带宽 验证
GPUDirect RDMA
支持 GPUDirect 的带宽测试拓扑
IB_WRITE_BW 测试超过 200 Gbps InfiniBand 结构
登录到两个Bare Metal 实例并加载 NV_PEER_MEMORY 模块:
确定在测试期间要使用的最佳 GPU 设备 - 在这种情况下,它将是 GPU6 或 GPU7,它们与我们的 mlx5_0 IB 适配器位于同一 PCIe 桥上并共享相同的 NUMA 节点:
在使用相关 GPU 设备的实例之一上启动 GPUDirect ib_write_bw 服务器:
笔记
如果作为 gpudirect-tools DIB 元素的一部分安装在来宾映像上的工具之一,则启用 GPU 的 ib_write_bw
通过省略“use_cuda”标志,可以在没有 GPUDirect 的情况下运行基于 RDMA 的测试
使用相关的 GPU 设备在第二个实例上启动 GPUDirect ib_write_bw 客户端并指定远程实例的 IP:
在具有 GPUDirect 支持的 200Gb/s InfiniBand 结构上展示了 114Gbps 带宽结果。限制因素是用于测试的服务器 (PCIe gen3.0) 中的 PCIe 主板接口。
附录
应用基准测试:HPL-NVIDIA
NVIDIA 的 HPL基准测试提供软件包,在配备 NVIDIA GPU 的分布式内存计算机上,基于 用于构建 Top500的 netlib HPL 基准测试,使用 Tensor Cores 以双精度(64 位)算法求解(随机)密集线性系统 列表。
我们在本文中准备和部署的 Bare Metal Guest OS 已准备好运行此基准测试,只需在单个节点或分布式系统上加载和运行 HPL-NVIDIA Singularity Container。
笔记
在下面的示例中,我们使用 mpirun 来执行测试,也可以使用工作负载管理器(例如 slurm)来运行它。Bare Metal 主机镜像上的 OpenMPI 版本应该 与容器上的版本兼容。
执行的测试配置经过定制以适合我们使用的服务器,这些服务器托管 2 个 Intel x86 CPU 插槽和 8 个 NVIDIA V100/16GB GPU
测试调优是基本的,不 包括深入的优化过程
HPL-NVIDIA 测试拓扑
在两个 裸机服务器上:
在 BIOS 中禁用超线程
登录到 Bare Metal 实例并验证 /etc/hosts 文件包含两个节点
在实例之间设置无密码 SSH 通信并验证它:
下载 HPL-NVIDIA 奇点容器:
笔记
拉取镜像需要NGC账号,使用“docker login”命令登录nvcr.io仓库
在同一目录下创建服务器参数配置文件:
笔记
在这个例子中,我们每个 mpi rank 使用 4 个内核,4 个 rank 将使用 CPU 插槽 0,4 个将使用插槽 1。
每个等级将使用一个专用 GPU 设备,所有等级将使用映射到我们测试中使用的 ib0 单个 IB 适配器的 mlx5_0 UCX 设备
此配置与我们案例中使用的服务器硬件规格和拓扑相关,应针对其他所有硬件架构和测试拓扑进行相应调整
导出容器运行命令,该命令将本地 HPL 目录映射到容器中的 my-dat-files 目录:
单节点 HPL-NVIDIA 基准测试
在同一个目录下为匹配测试拓扑的单节点测试创建HPL dat文件
使用相关的服务器配置和 dat 文件运行基准作业
32 TeraFlops HPL 基准测试结果展示了我们上面在单个裸机节点上使用的测试拓扑和配置
超过 200Gbps InfiniBand 结构的多节点 HPL-NVIDIA 基准测试
在同一目录中为与测试拓扑匹配的 2 节点测试创建HPL dat 文件
使用相关的服务器配置和 dat 文件运行基准作业,指定节点主机名:
2 个裸机节点上的 HPL 基准测试展示了 我们上面使用的测试拓扑和配置的 65 TeraFlops的线性缩放结果