用于InfiniBand架构OpenStack云裸机GPU加速HPC和AI工作负载的RDG

2023-07-31 17:52:10 1694

OpenStack云操作系统包括对通过InfiniBand网络使用GPU的裸机云服务的支持。这允许多租户、安全的加速裸机云部署,为 HPC 和 AI 工作负载提供一流的性能。

以下 Reference Deployment Guide (RDG) 演示了 OpenStack 裸机云的完整部署,用于由 NVIDIA® GPU、适配器和 Quantum InfiniBand 架构加速的 HPC/AI 多租户工作负载。RDG 涵盖单机架参考部署,可轻松扩展到多机架解决方案。

此 RDG 包括解决方案设计、规模注意事项、硬件物料清单(物料清单)以及通过 InfiniBand 结构配置裸机租户实例和执行 GPUDirect-RDMA 基础架构带宽测试的完整步骤列表。

以下解决方案基于OpenStack RDO(“Wallaby”版本)作为云平台,使用TripleO软件部署集成了InfiniBand支持。


缩略语和缩略语

术语
定义
术语
定义
.AI人工智能国际知识产权局IP无限频带
唰唰��裸机MLNX_OFEDNVIDIA OpenFabrics Enterprise Distribution for Linux(网络驱动程序)
物料清单物料清单超频云上
库达计算统一设备架构操作系统操作系统
.DIB磁盘映像生成器贝莱私钥
嘟��动态主机配置协议RDG参考部署指南
显卡图形处理单元德玛远程直接内存访问
医 管 局高可用性《种族歧视条例》OpenStack 的 RPM 发行版
高密度显示高数据速率 - 200Gb/sSDN软件定义网络
高性能计算高性能计算三重OpenStack On OpenStack
兴业银行无限乐队UFM统一结构管理器
国际专利信息指数智能平台管理界面虚拟局域网虚拟局域网


UFM统一结构管理器

引用

解决方案架构

关键部件和技术

  • NVIDIA A100 张量核心 GPU 在各种规模上提供前所未有的加速,为世界上性能最高的弹性数据中心提供动力,用于人工智能、数据分析和 HPC。A100 由 NVIDIA Ampere 架构提供支持,是 NVIDIA 数据中心平台的引擎。A100 的性能比上一代产品提高了 20 倍,并且可以划分为 <> 个 GPU 实例,以动态调整以适应不断变化的需求。

  • ConnectX-6 InfiniBand 适配卡是 NVIDIA Quantum InfiniBand 平台中的关键元素。®ConnectX-6 提供多达两个端口的 200Gb/s InfiniBand 连接,具有极低的延迟、高消息速率、智能卸载和 NVIDIA 网络内计算加速,可提高性能和可扩展性。

  • NVIDIA Quantum InfiniBand 交换机提供高带宽性能、低功耗和可扩展性。NVIDIA 昆腾交换机通过高级路由和拥塞避免功能优化数据中心连接。

  • LinkX®电缆和收发器产品系列为InfiniBand数据中心基础设施提供了完整的连接矩阵。

  • NVIDIA® UFM®(统一结构管理器)平台通过将增强的实时网络遥测与人工智能驱动的网络智能和分析相结合,支持横向扩展的 InfiniBand 数据中心,彻底改变了数据中心网络管理。

  • OpenStack是世界上部署最广泛的开源云软件。作为云操作系统,它控制整个数据中心的大型计算、存储和网络资源池,所有这些资源都通过具有通用身份验证机制的 API 进行管理和预配。除了标准的基础架构即服务 (Iaas) 功能之外,其他组件还提供编排、故障管理和服务管理以及其他服务,以确保用户应用程序的高可用性。

  • RDO(OpenStack的RPM发行版)是由Red Hat发起的免费社区支持的OpenStack发行版。RDO运行在CentOS,Red Hat Enterprise Linux(RHEL)和Fedora上,并提供最新的OpenStack开发版本。

逻辑设计

下面是解决方案逻辑设计的图示。

Sinoinfo_Pic

图像注释

  • 单个 200Gb/s InfiniBand 结构用于租户和 OpenStack 控制网络。

  • Neutron 组件 (api/dhcp/l3) 包括支持控制器节点上的 InfiniBand 所需的代码

网络设计

网络拓扑

下面是解决方案的结构拓扑的图示。

Sinoinfo_Pic

参考架构规模

  1. 单交换机解决方案的初始设置:

    • 单机架

    • 1 x 英伟达量子 QM8700 200G 无限频段交换机

    • 3 x 控制器节点

    • 2 x 裸机租户节点

    • 1 x 结构管理节点

    • 1 个 1GbE 交换机(用于与 VLAN 隔离的多个 1GbE 网络)

  2. 两层胖树拓扑的扩展设置:
    此部署方案最多可扩展到 20 台主干交换机40 台枝叶交换机,并支持多达 800 台服务器

    注意

    扩展注意事项仅涉及高速 InfiniBand 交换矩阵,不包括配置、IPMI 和外部网络。


Sinoinfo_Pic

主机设计

租户隔离

下面是解决方案主机设计的图示。

Sinoinfo_Pic

图像注释

  • PKey 用于隔离裸机实例流量在其所属的租户网络上。

  • 租户命名空间包括支持 IPoIB 的 DHCP 服务器/路由器(L3 代理),并配置了 PKey 以隔离它们所属租户网络上的流量。

应用逻辑设计

Sinoinfo_Pic

软件堆栈组件

Sinoinfo_Pic

物料清单 (物料清单)

Sinoinfo_Pic

注意

上面的 BoM 指的是基于 1xRack 的参考架构。

解决方案配置和部署

物理布线

Sinoinfo_Pic


注意

  • 使用双端口 InfiniBand 主机通道适配器 (HCA) 时,仅应将第一个端口连接到结构。
    从操作系统的角度来看,网络设备 ib0 将用于 IPoIB 流量。

  • 资源调配网络用于云下节点部署,OcProvisioning 网络用于云上控制器节点部署裸机租户节点。

  • 在这种情况下,单个 1GbE 交换机用于多个与 VLAN 隔离的 1GbE 网络。

  • UFM 节点连接到外部网络,以便从互联网中提取 UFM 应用程序容器。也可以在没有互联网连接的情况下使用本地图像。


  1. 将所有节点连接到 IPMI 网络。

  2. 将 IB 交换机管理端口连接到 OpenStack 配置网络,并在 Overcloud 节点范围之外分配一个 IP 地址。

  3. 将 UFM 节点连接到 OpenStack Provisioning 网络,并在 Overcloud 节点范围之外分配一个 IP 地址。

  4. 将 UFM 节点、云上节点(控制器节点)和裸机节点连接到 IB 结构。

  5. 将 OpenStack Undercloud 和 Overcloud 节点(控制器节点)连接到 OpenStack Provisioning 网络。

  6. 将云下、控制器和 UFM 节点连接到外部(公共)网络。

IPoIB 结构配置

Sinoinfo_Pic

网络名称

网络详细信息

贝伊身份证

存储

172.16.0.0 / 24

800乙

Storage_Mgmt

172.17.0.0 / 24

8015

内部接口

172.18.0.0 / 24

801楼

OcProvisioning172.70.0.0/248046

租户 VLAN

由租户创建

80

注意

在以太网 OpenStack 部署中,VLAN 可用于租户隔离。在 InfiniBand中,分区键 (PKeys) 用于获取租户隔离。

租户网络 VLAN ID “N” 映射到租户 PKey “80”。在此 RDG 中,我们使用租户 VLAN ID 101,该 ID 0 转换为 PKey 8065x<>。

主机配置

先决条件

  • 具有相同角色的服务器(控制器节点/裸机节点等)的硬件规格相同

  • 控制器、裸机和结构管理节点中使用的所有 ConnectX-6 适配器端口都应设置为在 InfiniBand 模式下运行(默认)。

  • 裸机节点 BIOS 应配置以下内容:

    • UEFI 模式

    • 对于 GPU 直接使用 - 应禁用虚拟化和 SR-IOV

    • PXE 引导按服务器引导顺序设置

    • 适配器 PXE 已启用,并且 PKey 与 OpenStack 配置网络 VLAN ID 匹配(本文中使用的示例中为“70”)Sinoinfo_PicSinoinfo_Pic

结构管理节点 (UFM) 安装

“结构管理”是一个运行 UFM 企业应用程序容器的基于 Linux 的主机。

在本文中,将部署单个结构管理节点。高可用性部署是可能的,但不包括在内。

  • 有关 UFM 企业用户手册,请参阅此链接

  • 有关 UFM Enterprise Docker 容器安装指南,请参阅此链接

  • 使用 NVIDIA UFM 企業軟體需要授權 - 請聯絡 NVIDIA 網路支援

Sinoinfo_Pic

Fabric Management Node OS

  1. Install the OS on the Fabric Mgmt Node. (In this solution we have used Ubuntu 18.04 OS).

  2. Install NVIDIA MLNX_OFED network drivers. For further information refer to this link.

  3. Install and enable Docker service—Ubuntu Docker Installation.

  4. Use the "ibstat" command to make sure the Fabric Management Node is connected to the InfiniBand Fabric, and the link is up.

  5. Make sure the Fabric Management Node is connected to the OpenStack provisioning network and allocate an IP Address outside of the Overcloud nodes range. In our example we have assigned IP 192.168.24.200 to this node.

  6. Set a dummy IP address on the InfiniBand ib0 interface and make sure it is in "up" state. This step is a prerequisite for UFM application installation.

    Note

    ib0 is the default fabric interface used by UFM installer. If you connected ib1 to the InfiniBand fabric, make sure to specify the interface during UFM installer execution.

  7. Make sure External access is available as it will be used to pull the UFM application container from the internet. It is also possible to use local images without internet connectivity.

UFM Enterprise Application Container

Additional information about UFM Container installation is available here.

  1. Create a host directory to store the UFM application configuration.

    # mkdir -p /var/ufm_files/
  2. Create a host directory to store the UFM application license, and place the license there.

    # mkdir -p /home/ubuntu/UFM_lic/
  3. Make sure internet access is available and pull the UFM Enterprise Installer image from the Docker hub repository.

    # docker pull mellanox/ufm-enterprise-installer:latest
  4. Run the Installer application container with the local directory mapped, and verify it is up.

    Note

    # docker run -it --name=ufm_installer --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /var/ufm_files/:/installation/ufm_files/ \
    -v /home/ubuntu/UFM_lic/:/installation/ufm_licenses/ \
    mellanox/ufm-enterprise-installer:latest 
    Deployment Mode [install/upgrade]:  install
    UFM Mode [SA/HA]:                    SA
    UFM Enterprise Image:                mellanox/ufm-enterprise:latest
    UFM Files Path:                      /var/ufm_files/
    UFM License Path:                    /home/ubuntu/UFM_lic/
    Fabric Interface:                    ib0
    Management Interface:                eth0
    Loading UFM Enterprise Image...
    latest: Pulling from mellanox/ufm-enterprise
    2d473b07cdd5: Pull complete
    239fbdbd6064: Pull complete
    a25becc1a642: Pull complete
    Digest: sha256:05e5341c9edaff55450841852e1657fa4f032d0f29898f5b978663d404ab9470
    Status: Downloaded newer image for mellanox/ufm-enterprise:latest
    docker.io/mellanox/ufm-enterprise:latest
    Creating UFM Enterprise Container...
    6efbfd1142b7088533474449e66afb1ca55d5c4838cfd0776213f00f2ad6ba46
    UFM Container Created
    Copying UFM Configuration Files...
    Copying License File...
    ufm
    [*] Starting UFM Container
    ufm
    UFM Container started. You can check UFM status by running:
    docker exec -it ufm /etc/init.d/ufmd status
    ============================================================================================
      UFM container installation finished successfully
    ============================================================================================ 
    • For all installer options and default values issue the following command: "docker run --rm mellanox/ufm-enterprise-installer:latest -h"

    • The Installer container will bring up a UFM Enterprise application container named "ufm" and will terminate.

  5. Verify the UFM Enterprise application container is up and the UFM service is running.

    # docker ps -a
    CONTAINER ID  IMAGE                            COMMAND                  CREATED        STATUS        PORTS    NAMES
    6efbfd1142b7  mellanox/ufm-enterprise:latest  "sh /usr/sbin/docker…"  7 minutes ago  Up 7 minutes            ufm
    # docker exec -it ufm /etc/init.d/ufmd status
    ufmd status
    ufmd (pid 622) is running...
  6. Connect from a client on the External or the Provisioning networks to the UFM WebUI using the following URL.

    Default Login Credentials: admin/123456

    Sinoinfo_Pic

  7. Generate UFM API Access Token and copy it for later usage.

    Note

    The token will be used in OpenStack Overcloud deployment file neutron-ml2-mlnx-sdn-bm.yaml

    Sinoinfo_Pic

OpenStack Undercloud Node Preparation and Installation

在下面的解决方案中,我们使用 RDO OpenStack 部署 TripleO

  1. 按照此处描述的云下安装过程操作,直至“准备配置文件”部分。使用了以下组件

    • CentOS Stream 版本 8 操作系统,具有 100GB 根分区

    • “Wallaby” OpenStack Release TripleIO 存储库

      $ sudo -E tripleo-repos -b wallaby current
    • Undercloud 配置文件 “undercloud.conf”

      云下会议 展开源码
  2. 创建“undercloud.conf”中引用的以下容器映像准备配置文件“containers-prepare-parameter-ib.yaml”,并将其放在 /home/stack/IB 目录下。

    containers-prepare-parameter.yaml 展开源码
  3. 以堆栈用户身份完成云下安装。

    # sudo chown stack -R /home/stack
    # su - stack
    $ openstack undercloud install
  4. 基于 CentOS 8 和 Wallaby 版本组件构建云上映像。此处介绍了完整过程。

    $ su - stack
    $ mkdir /home/stack/images
    $ cd /home/stack/images
    $ export DIB_RELEASE=8-stream
    $ export DIB_YUM_REPO_CONF="/etc/yum.repos.d/*"
    $ export STABLE_RELEASE="wallaby"
    $ openstack overcloud image build
  5. 以堆栈用户身份将云上映像上传到映像存储中。

    # su - stack
    $ source ~/stackrc
    $ cd /home/stack/images/
    $ openstack overcloud image upload
  6. 准备包含节点 IPMI 信息的云裸机节点清单文件“instackenv.json”。我们的库存包括 3 个控制器节点。确保使用 IPMI 服务器地址和凭据更新文件。

    instackenv.json 展开源码


  7. 导入云上裸机节点清单,并等待所有节点都以“可管理”状态列出。

    $ openstack overcloud node import /home/stack/instackenv.json
    $ openstack baremetal node list
    +--------------------------------------+--------------+---------------+-------------+--------------------+-------------+
    | UUID                                | Name        | Instance UUID | Power State | Provisioning State | Maintenance |
    +--------------------------------------+--------------+---------------+-------------+--------------------+-------------+
    | 61916fc7-8fc1-419c-97f5-ab021e5b0614 | controller-1 | None          | power off  | manageable        | False      |
    | 85b907a3-fd0a-41f4-ad56-d117bcc5e88c | controller-2 | None          | power off  | manageable        | False      |
    | 7df4e999-09f8-43b5-8117-499ad1fa535e | controller-3 | None          | power off  | manageable        | False      |
    +--------------------------------------+--------------+---------------+-------------+--------------------+-------------+

OpenStack Overcloud Introspection 和 IB 基础架构配置

  1. 在云下节点上,启动云上节点侦测过程。

    $ openstack overcloud node introspect --all-manageable
    $ openstack overcloud node configure --all-manageable --instance-boot-option local --root-device largest --boot-mode bios
    $ openstack overcloud node provide --all-manageable
    $ openstack baremetal node list

    注意

    • 在自省阶段,Overcloud InfiniBand设备将出现在UFM Web UI中。使用发现设置设备的时间完成控制 PKeys 的创建,如下一步中所述。如果在能够设置 PKey 配置之前完成侦测,并且 UFM 中不再显示 InfiniBand 设备,请重复侦测以完成 PKey 配置步骤。

    • 本节中描述的“裸机”节点是指将部署为 Overcloud 节点的节点,而不是稍后将创建的租户裸机实例。

    • “--引导模式 BIOS”用于部署具有传统 BIOS 模式的云上服务器。如果节点配置了 UEFI BIOS,则可以省略此标志

  2. 发现设置设备时,登录到 UFM Web UI 并配置控件 PKeys:

    网络名称

    贝伊身份证

    存储

    800乙

    Storage_Mgmt

    8015

    内部接口

    801楼

    OcProvisioning8046

    该过程包括以下步骤:

    1. 验证是否已发现所有设置设备。

      Sinoinfo_Pic

    2. 使用十六进制 ID 创建 PKey。

      Sinoinfo_Pic

    3. Add the Overcloud nodes (Controller nodes) GUIDs as a member in the control PKey.

      Sinoinfo_Pic

    4. Repeat the steps for every Control PKey.

      Sinoinfo_Pic


Note

Proceed to the Overcloud Deployment steps below only after all Control PKeys are defined with Controller nodes ports GUID as members.

OpenStack Overcloud Deployment

  1. 下载到云下节点,解压本文参考解决方案使用的云部署配置文件:doc-68323870-RDG-配置文件.zip

  2. 根据您的需求和配置修改部署文件,并将其放在 /home/stack/templates/IB 目录下。以下文件用于部署本文中所述的云

    • 在此配置文件中,“数据中心”物理网络映射到 Open vSwitch 驱动程序(以太网结构),而“ibnet”物理网络映射到 IPoIB 驱动程序(InfiniBand 结构)。

    • 为了将 IB-SDN 控制限制为仅 InfiniBand 物理网络,请在部署云并重新启动neutron_api服务容器和 UFM 应用程序后,在控制器节点上ml2_conf.ini文件的 [sdn] 部分下显式指定 InfiniBand 物理网络名称(例如“physical_networks=ibnet”)。

    • 将前面步骤中收集的 UFM API 令牌用于 MlnxSDNToken 参数。

    • 将 OpenStack Provisioning 网络上的 UFM 节点 IP 用于 MlnxSDNUrl 参数 (192.168.24.200)

    • MlnxSDNUsername 和 MlnxSDNPassword 应包含在空值中

    • network_data_ib_bm.yaml

    • vip-data-ib-bm.yaml

    • roles_data_ib_bm.yaml

    • containers-prepare-parameter-ib.yaml

    • node-info-ib-bm.yaml

    • controller-ib-bm-nics.j2 (在node-info-ib-bm.yaml中引用)

    • Neutron-ML2-mlnx-sdn-bm.yaml

      此配置文件包含结构管理节点的连接详细信息。

    • ib-env-bm.yaml

  3. 作为“堆栈”用户,发出 deploy 命令以使用准备好的配置文件启动 Overcloud 部署。

    部署命令
    $ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates \
      --networks-file /home/stack/templates/IB/network_data_ib_bm.yaml \
      --vip-file /home/stack/templates/IB/vip-data-ib-bm.yaml \
      --baremetal-deployment /home/stack/templates/IB/node-info-ib-bm.yaml \
      --network-config \
      -r /home/stack/templates/IB/roles_data_ib_bm.yaml \
      -e /home/stack/templates/IB/containers-prepare-parameter-ib.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/podman.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-overcloud.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/services/neutron-ovs.yaml \
      -e /home/stack/templates/IB/neutron-ml2-mlnx-sdn-bm.yaml \
      -e /home/stack/templates/IB/ib-env-bm.yaml \
      --validation-warnings-fatal \
      -e /usr/share/openstack-tripleo-heat-templates/environments/disable-telemetry.yaml

OpenStack 裸机云映像创建

  1. 在 CentOS Stream 8 磁盘映像生成器机器上运行以下构建命令,以创建 CentOS 8 Stream 来宾操作系统映像:

    # export DIB_RELEASE=8-stream
    # disk-image-create vm dhcp-all-interfaces cloud-init-datasources cloud-init-config cloud-init-net-conf-disabled rdma-core dracut-regenerate growroot epel centos block-device-efi -o /home/stack/images/centos8-stream

    笔记

    • 该命令可能需要设置正确的环境变量。有关映像创建和自定义过程的详细信息,请参阅:操作方法:使用 NVIDIA GPU 和网络驱动程序创建 OpenStack 云映像

    • 该命令的结果将是一个位于 /home/stack/images/ 目录下的 centos8-stream.qcow 图像文件。

    • 在本文档中描述的示例中,来宾操作系统映像使用用于访问凭据的“cloud-init”元素、用于 NetworkManager 接口自动配置的“cloud-init-net-conf-disabled”元素和用于 rdma-core 软件包安装的“rdma-core”元素进行自定义。有关元素的更多信息,请参阅上面的文章。

    • 使用指定命令生成的映像适用于 EFI 引导。确保使用 UEFI BIOS 模式配置裸机服务器。

    • 云下节点可用作磁盘映像生成器 (DIB) 计算机。

    • 对于支持 IPoIB 部署的 CentOS 7 访客操作系统映像,请使用 “mofed” 和 “dhclient-hw” DIB 元素,如文章中所述:操作方法:使用 NVIDIA GPU 和网络驱动程序创建 OpenStack 云映像

  2. 将上一节中准备的来宾操作系统映像复制到云下节点,并将其与讽刺部署映像一起上传到 Overcloud 映像存储:

    $ source overcloudrc
    $ openstack image create centos8-stream-bm-guest --public --disk-format qcow2 --container-format bare --file /home/stack/images/centos8-stream.qcow2
    $ openstack image create oc-bm-deploy-kernel --public --disk-format aki --container-format aki --file /home/stack/images/ironic-python-agent.kernel
    $ openstack image create oc-bm-deploy-ram --public --disk-format ari --container-format ari --file /home/stack/images/ironic-python-agent.initramfs
    $ openstack image list

    注意

裸机节点注册和预配

  1. 在OpenStack Overcloud上,创建一个配置网络和子网,该网络和子网将用于Overcloud Controller Ironic服务的裸机租户服务器部署:

    注意

    $ openstack network create provisioning --provider-physical-network ibnet --provider-network-type vlan --provider-segment 70 --share
    $ openstack subnet create --network provisioning --subnet-range 172.70.0.0/24 --gateway 172.70.0.1  --allocation-pool start=172.70.0.60,end=172.70.0.99 provisioning-subnet
    • 确保 IP 地址池未与部署配置文件 network_data.yaml 中配置的Oc_provisioning池冲突

    • 对于置备网络 VLAN,请使用您为控制器 OcProvisioning 网络(云部署配置文件)和 NDO 在之前的 DPU 准备步骤中执行的裸机主机 PXE PKey ID 配置指定的相同 ID(ID “70”)。

    • 将网络映射到“ibnet”物理网络(InfiniBand 结构)

  2. 创建置备网络后,控制器节点端口 GUID 将作为成员由结构管理节点添加到 PKey 中。登录到 UFM WebUI,并手动将结构管理节点 GUID 添加到此预配网络 PKey。

    注意

    此步骤对于基于无限频段的裸机 PXE 部署阶段是必需的

    Sinoinfo_Pic


  3. 使用裸机实例的自定义资源创建风格:

    注意

    $ openstack flavor create --ram 1024 --disk 20 --vcpus 1 baremetal
    $ openstack flavor set baremetal --property resources:CUSTOM_BAREMETAL=1
    $ openstack flavor set baremetal --property resources:VCPU=0
    $ openstack flavor set baremetal --property resources:MEMORY_MB=0
    $ openstack flavor set baremetal --property resources:DISK_GB=0
    • 请注意CUSTOM_BAREMETAL资源,因为它的名称与后续步骤相关

    • 使用设置为“0”的物理资源(如下所示)避免根据 VM 实例的标准属性进行计划

  4. 收集连接到 IB 结构的裸机服务器 IB 适配器端口的 GUID。有几种方法可以获取 InfiniBand 适配器 GUID,方法是查看适配器标签,或者在配置为 PXE 启动时启动服务器并检查其控制台屏幕

  5. 准备一个名为 overcloud-nodes-ib-bm-centos8.yaml 的裸机节点清单文件,其中包含裸机租户服务器的详细信息

    注意

    Overcloud-nodes-ib-bm-centos8.yaml
    nodes:
        - name: node-1
          driver: ipmi
          network_interface: neutron
          driver_info:
            ipmi_address: "172.16.1.10"
            ipmi_username: "rcon"
            ipmi_password: "******"
          resource_class: baremetal
          properties:
            cpu_arch: x86_64
            local_gb: 400
            memory_mb: '262144'
            cpus: 36
          ports:
            - address: "04:3f:72:9e:0b:a0"
              pxe_enabled: true
              extra:
                client-id: "20:04:3f:72:03:00:9e:0b:a0"
              physical_network: "ibnet"
        - name: node-2
          driver: ipmi
          network_interface: neutron
          driver_info:
            ipmi_address: "172.16.1.20"
            ipmi_username: "rcon"
            ipmi_password: "******"
          resource_class: baremetal
          properties:
            cpu_arch: x86_64
            local_gb: 400
            memory_mb: '262144'
            cpus: 36
          ports:
            - address: "04:3f:72:9e:0b:d0"
              pxe_enabled: true
              extra:
                client-id: "20:04:3f:72:03:00:9e:0b:d0"
              physical_network: "ibnet"         
    • 包括在前面的步骤中为每个服务器收集的主机 InfiniBand 适配器 GUID 作为前缀为“20:”的“客户端 id”参数

    • 端口“地址”参数应与不带“03:00”的 GUID 匹配

    • 更新每个服务器的 ipmi 凭据。

    • 使用名为“裸机”的资源类,该资源类对应于前面步骤中使用的CUSTOM_BAREMETAL特定资源。

    • 使用映射到InfiniBand结构的物理网络“ibnet”。

    • 此部署 yaml 应用于基于 RHEL/CentOS 8 的部署。对于基于 CentOS 7 的部署,请使用前缀:ff:00:00:00:00:00:02:00:00:02:9:c00:<>:作为“客户端 ID”。

  6. 导入清单文件并验证节点是否已列出:

    $ openstack baremetal create overcloud-nodes-ib-bm-centos8.yaml
    $ openstack baremetal node list
  7. 识别您之前上传到映像存储的 Ironic 自定义部署映像,并将其设置为要在裸机部署期间使用的清单节点的内核/虚拟硬盘映像

    $ DEPLOY_KERNEL=$(openstack image show oc-bm-deploy-kernel -f value -c id)
    $ DEPLOY_RAMDISK=$(openstack image show oc-bm-deploy-ram -f value -c id)
    $ openstack baremetal node set node-1 --driver-info deploy_kernel=$DEPLOY_KERNEL --driver-info deploy_ramdisk=$DEPLOY_RAMDISK
    $ openstack baremetal node set node-2 --driver-info deploy_kernel=$DEPLOY_KERNEL --driver-info deploy_ramdisk=$DEPLOY_RAMDISK
  8. 清理节点并为裸机租户实例创建做好准备

    注意

    在此阶段,裸机服务器将使用虚拟硬盘/内核映像引导,其本地驱动器将被擦除,为来宾操作系统部署阶段做准备。清理阶段可能需要一段时间,您可以通过服务器控制台屏幕执行该过程。

    $ openstack baremetal node manage node-1 --wait
    $ openstack baremetal node manage node-2 --wait
    $ openstack baremetal node provide node-1
    $ openstack baremetal node provide node-2

裸机租户实例预配

  1. 使用租户来宾映像验证节点是否“可用于”裸机租户实例部署:


    $ openstack baremetal node list
    +--------------------------------------+--------+--------------------------------------+-------------+--------------------+-------------+
    | UUID                                | Name  | Instance UUID                        | Power State | Provisioning State | Maintenance |
    +--------------------------------------+--------+--------------------------------------+-------------+--------------------+-------------+
    | e5991e0d-78e5-463b-9bf1-e1eb6db2a174 | node-1 | 8891dfec-b7a9-4ddf-82a4-a66f5b05fe9a | power off  | available          | False      |
    | 7344efce-d1d1-4736-916d-5c7c30a30f68 | node-2 | 42cc7461-397a-47e4-a849-7c3076cf6eac | power off  | available          | False      |
    +--------------------------------------+--------+--------------------------------------+-------------+--------------------+-------------+
  2. 创建租户网络和子网

    注意

    $ openstack network create ib_tenant_net --provider-physical-network ibnet --provider-network-type vlan --provider-segment 101 --share
    $ openstack subnet create ib_subnet --dhcp --network ib_tenant_net --subnet-range 11.11.11.0/24 --dns-nameserver 8.8.8.8 
    • 创建租户网络后,Neutron 将调用 UFM 以创建与指定 Vlan ID 匹配的租户 PKey,并将控制器节点端口 GUID 添加到其中。

    • VLAN ID 将转换为唯一的 IB PKey(在本例中为 VLAN ID 101 → PKey ID 0x8065),并由结构管理节点 (UFM) 在结构上进行配置,以提供租户隔离。

    • 将网络映射到“ibnet”物理网络(InfiniBand fabric)。

  3. 使用之前上传到映像存储的来宾映像通过租户网络生成裸机租户实例

    注意

    $ openstack server create --image centos8-stream-bm-guest --flavor baremetal --network ib_tenant_net  centos8_guest1
    $ openstack server create --image centos8-stream-bm-guest --flavor baremetal --network ib_tenant_net  centos8_guest2
    • 在此阶段,裸机服务器将引导两次,一次使用虚拟硬盘映像,第二次使用服务器本地驱动器上的来宾操作系统映像。您可以通过服务器控制台屏幕跟踪该过程。

    • 在来宾操作系统部署阶段,Neutron 将调用 UFM 将裸机服务器端口 GUID 添加到新创建的租户 Pkey 中,以允许租户服务器使用 DHCP 通过 InfiniBand 从控制器获取 IP。

  4. 验证裸机租户实例是否已启动且处于活动状态:

    $ openstack baremetal node list
    +--------------------------------------+--------+--------------------------------------+-------------+--------------------+-------------+
    | UUID                                | Name  | Instance UUID                        | Power State | Provisioning State | Maintenance |
    +--------------------------------------+--------+--------------------------------------+-------------+--------------------+-------------+
    | e5991e0d-78e5-463b-9bf1-e1eb6db2a174 | node-1 | 8891dfec-b7a9-4ddf-82a4-a66f5b05fe9a | power on    | active            | False      |
    | 7344efce-d1d1-4736-916d-5c7c30a30f68 | node-2 | 42cc7461-397a-47e4-a849-7c3076cf6eac | power on    | active            | False      |
    +--------------------------------------+--------+--------------------------------------+-------------+--------------------+-------------+
    $ openstack server list
    +--------------------------------------+----------------+--------+----------------------------+-------------------------+--------+
    | ID                                  | Name          | Status | Networks                  | Image                  | Flavor |
    +--------------------------------------+----------------+--------+----------------------------+-------------------------+--------+
    | 8891dfec-b7a9-4ddf-82a4-a66f5b05fe9a | centos8_guest1 | ACTIVE | ib_tenant_net=11.11.11.13  | centos8-stream-bm-guest |        |
    | 42cc7461-397a-47e4-a849-7c3076cf6eac | centos8_guest2 | ACTIVE | ib_tenant_net=11.11.11.80  | centos8-stream-bm-guest |        |
    +--------------------------------------+----------------+--------+----------------------------+-------------------------+--------+
  5. 登录到 UFM WebUI,并验证租户 PKey 是否已根据创建的租户网络自动预配,以及是否已将相关 GUID 添加为成员。

    如下所示,VLAN ID 101 映射到 PKey ID 0x8065,裸机租户服务器端口 GUID 作为成员添加到 PKey 中。

    Sinoinfo_Pic


使用 vRouter 和浮动 IP 对裸机实例进行外部访问

Sinoinfo_Pic


  1. 创建具有通向公共网络的网关的外部以太网提供商网络。

    $ openstack network create public --provider-physical-network datacentre --provider-network-type flat --external
    $ openstack subnet create public_subnet --no-dhcp --network public --subnet-range 10.7.208.0/24 --allocation-pool start=10.7.208.65,end=10.7.208.94 --gateway 10.7.208.1
  2. 创建路由器并将外部和以前创建的 IPoIB 租户网络连接到该路由器,以允许租户网络上的裸机实例外部连接

    $ openstack router create public_router --no-ha
    $ openstack router set public_router --external-gateway public
    $ openstack router add subnet public_router ib_subnet
  3. 在外部网络上创建一个浮动 IP,并将其附加到裸机实例,以允许外部访问它

    $ openstack floating ip create --floating-ip-address 10.7.208.99 public
    $ openstack server add floating ip centos8_guest1 10.7.208.99
  4. 从位于外部网络上的计算机连接到裸机租户实例浮动 IP:

    [root@external-node]# ssh stack@10.7.208.99
  5. 验证实例的互联网连接:

    [stack@host-11-11-11-13 ~]$ sudo su
    [root@host-11-11-11-13 stack]# ping google.com
    PING google.com (216.58.207.78) 56(84) bytes of data.
    64 bytes from fra16s25-in-f14.1e100.net (216.58.207.78): icmp_seq=1 ttl=114 time=57.9 ms
    64 bytes from fra16s25-in-f14.1e100.net (216.58.207.78): icmp_seq=2 ttl=114 time=57.8 ms
    64 bytes from fra16s25-in-f14.1e100.net (216.58.207.78): icmp_seq=3 ttl=114 time=57.6 ms
    ^C
    --- google.com ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2007ms
    rtt min/avg/max/mdev = 57.689/57.845/57.966/0.228 ms

基础架构带宽验证

GPU 直立 RDMA

GPU irect RDMA 提供远程系统中 NVIDIA GPU 之间的直接通信。

它消除了系统 CPU 和通过系统内存所需的缓冲区数据副本,从而显著提高了性能。

Sinoinfo_Pic

支持 GPU 的带宽测试拓扑

Sinoinfo_Pic

IB_WRITE_BW测试 200Gb/s 的无限频段结构


注意

  • 本节中应用的某些配置不是永久性的,必须在服务器重新启动后重新应用


  1. 使用 NVIDIA GPU CUDA 驅動程式、NVIDIA 網路驅動程序和 GPU irect benchmark 工具自訂 CentOS 8 Stream Guest OS 雲端映像,如本文所述 操作方法:使用 NVIDIA GPU 和網路驅動程式創建 OpenStack 雲端映像 以下 DIB 元素用于构建用于此测试的映像:

    1. “莫菲德”

    2. “库达”

    3. “GPU直接长凳”

  2. 上传自定义来宾映像,并按照前面部分中的说明创建两个裸机租户实例。

  3. 登录到两个裸机实例并加载 nvidia-peermem 模块:

    # modprobe nvidia-peermem
    # lsmod | grep -i peermem
    nvidia_peermem        16384  0
    nvidia              39047168  3 nvidia_uvm,nvidia_peermem,nvidia_modeset
    ib_core              438272  9 rdma_cm,ib_ipoib,nvidia_peermem,iw_cm,ib_umad,rdma_ucm,ib_uverbs,mlx5_ib,ib_cm
  4. 确定要在测试期间使用的相关网络/RDMA 设备,并注意其 NUMA 节点。对于我们的测试,它将是连接到InfiniBand结构并位于NUMA节点6上的ConnectX2设备ib5 / mlx4_1。

    # mst start
    Starting MST (Mellanox Software Tools) driver set
    Loading MST PCI module - Success
    [warn] mst_pciconf is already loaded, skipping
    Create devices
    -W- Missing "lsusb" command, skipping MTUSB devices detection
    Unloading MST PCI module (unused) - Success
    # ip link show | grep "state UP"
    2: eth0:mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    10: ib2:mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 256
    # mst status -v
    MST modules:
    ------------
        MST PCI module is not loaded
        MST PCI configuration module loaded
    PCI devices:
    ------------
    DEVICE_TYPE            MST                          PCI      RDMA            NET                      NUMA
    ConnectX6DX(rev:0)      /dev/mst/mt4125_pciconf0.1    39:00.1  mlx5_1          net-enp57s0f1            0   
    ConnectX6DX(rev:0)      /dev/mst/mt4125_pciconf0      39:00.0  mlx5_0          net-enp57s0f0            0   
    ConnectX6(rev:0)        /dev/mst/mt4123_pciconf1.1    c5:00.1  mlx5_5          net-ib3                  1   
    ConnectX6(rev:0)        /dev/mst/mt4123_pciconf1      c5:00.0  mlx5_4          net-ib2                  1   
    ConnectX6(rev:0)        /dev/mst/mt4123_pciconf0.1    3f:00.1  mlx5_3          net-ib1                  0   
    ConnectX6(rev:0)        /dev/mst/mt4123_pciconf0      3f:00.0  mlx5_2          net-ib0                  0   
    ConnectX5(rev:0)        /dev/mst/mt4119_pciconf0.1    cb:00.1  mlx5_7          net-enp203s0f1            1   
    ConnectX5(rev:0)        /dev/mst/mt4119_pciconf0      cb:00.0  mlx5_6          net-enp203s0f0            1
  5. 增加适配器最大累积读取请求数并重新启动服务器:

    注意

    # mlxconfig -d /dev/mst/mt4123_pciconf1 s  ADVANCED_PCI_SETTINGS=1
    Device #1:
    ----------
    Device type:    ConnectX6     
    Name:          MCX653106A-HDA_Ax
    Description:    ConnectX-6 VPI adapter card; HDR IB (200Gb/s) and 200GbE; dual-port QSFP56; PCIe4.0 x16; tall bracket; ROHS R6
    Device:        /dev/mst/mt4123_pciconf1
    Configurations:                              Next Boot      New
            ADVANCED_PCI_SETTINGS              False(0)        True(1)       
    Apply new Configuration? (y/n) [n] : y
    Applying... Done!
    -I- Please reboot machine to load new configurations.
    # mlxconfig -d /dev/mst/mt4123_pciconf1 s  MAX_ACC_OUT_READ=44
    Device #1:
    ----------
    Device type:    ConnectX6     
    Name:          MCX653106A-HDA_Ax
    Description:    ConnectX-6 VPI adapter card; HDR IB (200Gb/s) and 200GbE; dual-port QSFP56; PCIe4.0 x16; tall bracket; ROHS R6
    Device:        /dev/mst/mt4123_pciconf1
    Configurations:                              Next Boot      New
            MAX_ACC_OUT_READ                    0              44           
    Apply new Configuration? (y/n) [n] : y
    Applying... Done!
    -I- Please reboot machine to load new configurations.
    #reboot
    • 使用上一步中标识的相关 MST 设备 ID

    • 我们使用的最大请求数为 44 个,这是在采用 PCIe Gen200 CPU 的服务器上进行 4Gb/s 测试的最佳实践值。

    • 在某些情况下,建议使用 setpci 命令将网络设备的 PCIe MaxReadReq 大小增加到 4KB,以进一步优化带宽测试结果

  6. 确定要在测试期间使用的相关 GPU 设备并验证它是否 - 在本例中为 A100 GPU 设备。使用以下命令验证测试设备拓扑,允许优化性能带宽测试:

    注意

    # nvidia-smi
    Mon Jan 31 06:55:57 2022     
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 510.39.01    Driver Version: 510.39.01    CUDA Version: 11.6    |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|        Memory-Usage | GPU-Util  Compute M. |
    |                              |                      |              MIG M. |
    |===============================+======================+======================|
    |  0  Tesla T4            Off  | 00000000:3C:00.0 Off |                    0 |
    | N/A  42C    P0    27W /  70W |      0MiB / 15360MiB |      0%      Default |
    |                              |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    |  1  NVIDIA A100-PCI...  Off  | 00000000:CC:00.0 Off |                    0 |
    | N/A  40C    P0    40W / 250W |      0MiB / 40960MiB |      4%      Default |
    |                              |                      |            Disabled |
    +-------------------------------+----------------------+----------------------+
                                                                                 
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU  GI  CI        PID  Type  Process name                  GPU Memory |
    |        ID  ID                                                  Usage      |
    |=============================================================================|
    |  No running processes found                                                |
    +-----------------------------------------------------------------------------+
    # nvidia-smi topo -m
            GPU0    GPU1    mlx5_0  mlx5_1  mlx5_2  mlx5_3  mlx5_4  mlx5_5  mlx5_6  mlx5_7  CPU Affinity    NUMA Affinity
    GPU0    X      SYS    PXB    PXB    PXB    PXB    SYS    SYS    SYS    SYS    0-23    0
    GPU1    SYS      X      SYS    SYS    SYS    SYS    PXB    PXB    PIX    PIX    24-47  1
    mlx5_0  PXB    SYS      X      PIX    PXB    PXB    SYS    SYS    SYS    SYS
    mlx5_1  PXB    SYS    PIX      X      PXB    PXB    SYS    SYS    SYS    SYS
    mlx5_2  PXB    SYS    PXB    PXB      X      PIX    SYS    SYS    SYS    SYS
    mlx5_3  PXB    SYS    PXB    PXB    PIX      X      SYS    SYS    SYS    SYS
    mlx5_4  SYS    PXB    SYS    SYS    SYS    SYS      X      PIX    PXB    PXB
    mlx5_5  SYS    PXB    SYS    SYS    SYS    SYS    PIX      X      PXB    PXB
    mlx5_6  SYS    PIX    SYS    SYS    SYS    SYS    PXB    PXB      X      PIX
    mlx5_7  SYS    PIX    SYS    SYS    SYS    SYS    PXB    PXB    PIX      X
    Legend:
      X    = Self
      SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
      NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
      PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
      PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
      PIX  = Connection traversing at most a single PCIe bridge
      NV#  = Connection traversing a bonded set of # NVLinks
    • 位于同一 NUMA 节点上

    • 通过 PCIe 网桥连接,无需遍历 PCIe 主机网桥和不同的 NUMA 节点(PIX / PXB 拓扑)

    • 要进行优化的性能测试,请验证网络/RDMA 和 GPU 设备:

    • 在我们用于此测试的服务器中,Network-RDMA 设备 (mlx5_4) 和 GPU 设备 (GPU1 - A100) 共享 NUMA1 并通过 PXB PCIe 拓扑进行连接

  7. 启用 GPU 设备持久性模式并将 GPU 时钟锁定为最大允许速度

    注意

    # nvidia-smi -i 1 -pm 1
    Enabled persistence mode for GPU 00000000:CC:00.0.
    All done.
    # nvidia-smi -i 1 -lgc 1410
    GPU clocks set to "(gpuClkMin 1410, gpuClkMax 1410)" for GPU 00000000:CC:00.0
    All done.
    • “nvidia-smi -i <设备 id=""> -q -d 时钟”命令可用于识别设备的最大允许时钟

    • 对于我们在此测试中使用的 A100 设备,最大允许时钟为 1410 MHz

    • 仅当带宽测试结果不满意时,才应用以下设置

    • 不要设置高于每个特定 GPU 设备允许的值

    • 使用上一步中标识的相关 GPU 设备 ID(-i <设备 id="">)在所需设备上运行以下命令

  8. 使用相关的网络/RDMA 和 GPU 设备在其中一个实例上启动 GPU 直立ib_write_bw服务器:

    注意

    # ib_write_bw -a --report_gbits -d mlx5_4 -F --use_cuda=0
    ************************************
    * Waiting for client to connect... *
    ************************************
    • 启用 GPU 的 ib_write_bw 是作为 GPU 直接工作台 DIB 元素的一部分安装在来宾映像上的工具之一

    • 可以通过省略“use_cuda”标志在没有 GPU 的情况下运行基于 RDMA 的测试

    • 在某些硬件拓扑中,nvidia-smi GPU 设备 ID 与 perftest 工具使用的 ID 不相关,就像我们的情况一样。ib_write_bw输出指定选取的 GPU 设备 - 确定它是必需的设备。

  9. 使用相关的网络和 GPU 设备在第二个实例上启动 GPU ib_write_bw客户端,并指定远程实例的 IP:

    # ib_write_bw -a --report_gbits -d mlx5_4 11.11.11.133 -F --use_cuda=0
    initializing CUDA
    Listing all CUDA devices in system:
    CUDA device 0: PCIe address is CC:00
    CUDA device 1: PCIe address is 3C:00
    Picking device No. 0
    [pid = 8136, dev = 0] device name = [NVIDIA A100-PCIE-40GB]
    creating CUDA Ctx
    making it the current CUDA Ctx
    cuMemAlloc() of a 16777216 bytes GPU buffer
    allocated GPU buffer address at 00007f80fe000000 pointer=0x7f80fe000000
    ---------------------------------------------------------------------------------------
                        RDMA_Write BW Test
    Dual-port      : OFF          Device        : mlx5_4
    Number of qps  : 1            Transport type : IB
    Connection type : RC          Using SRQ      : OFF
    PCIe relax order: ON
    ibv_wr* API    : ON
    TX depth        : 128
    CQ Moderation  : 100
    Mtu            : 4096[B]
    Link type      : IB
    Max inline data : 0[B]
    rdma_cm QPs    : OFF
    Data ex. method : Ethernet
    ---------------------------------------------------------------------------------------
    local address: LID 0x09 QPN 0x0068 PSN 0xabf70a RKey 0x1fcfcd VAddr 0x007f80fe800000
    remote address: LID 0x0a QPN 0x0069 PSN 0xd96335 RKey 0x1fcfcd VAddr 0x007ffab6800000
    ---------------------------------------------------------------------------------------
    #bytes    #iterations    BW peak[Gb/sec]    BW average[Gb/sec]  MsgRate[Mpps]
    2          5000          0.042454            0.039305            2.456568
    4          5000          0.089589            0.089424            2.794498
    8          5000            0.18              0.18              2.797156
    16        5000            0.36              0.36              2.773971
    32        5000            0.72              0.72              2.795107
    64        5000            1.44              1.43              2.790116
    128        5000            2.88              2.87              2.799646
    256        5000            5.76              5.74              2.805018
    512        5000            11.44              11.44              2.792157
    1024      5000            22.93              22.88              2.793000
    2048      5000            45.83              45.75              2.792391
    4096      5000            92.22              91.94              2.805647
    8192      5000            183.80            183.45            2.799270
    16384      5000            191.43            191.42            1.460421
    32768      5000            195.22            190.73            0.727566
    65536      5000            195.58            195.56            0.373005
    131072    5000            195.48            192.16            0.183256
    262144    5000            195.54            194.38            0.092686
    524288    5000            195.40            193.49            0.046132
    1048576    5000            195.49            193.65            0.023085
    2097152    5000            193.66            193.52            0.011535
    4194304    5000            194.25            193.63            0.005771
    8388608    5000            193.73            193.60            0.002885
    ---------------------------------------------------------------------------------------
    deallocating RX GPU buffer 00007f80fe000000
    destroying current CUDA Ctx

    这一令人印象深刻的带宽测试结果使用支持 GPU 的 200Gb/s InfiniBand 结构进行了演示。用于此测试的服务器支持 PCIe gen4,并针对 GPU 进行了优化。

与 NVIDIA 产品相关的图片或视频(完整或部分)的版权均归 NVIDIA Corporation 所有。

微信公众号