如何创建包含 NVIDIA GPU 和网络驱动的 OpenStack 云镜像

创建于 2022 年 1 月 21 日。本文档介绍如何使用 Diskimage-builder (DIB) 元素创建包含 NVIDIA GPU 驱动、NVIDIA MLNX_OFED 网络驱动及额外性能基准测试工具的 OpenStack 云镜像。

文档目录

创建于 2022 年 1 月 21 日

范围

本文档介绍如何使用 Diskimage-builder (DIB) 元素创建包含 NVIDIA GPU 驱动、NVIDIA MLNX_OFED 网络驱动及额外性能基准测试工具的 OpenStack 云镜像。

缩写与缩略语

术语 定义
CUDA 计算统一设备架构
DIB 磁盘镜像构建器
GPU 图形处理单元
MLNX_OFED NVIDIA Mellanox OpenFabrics Enterprise Distribution for Linux(网络驱动)
OS 操作系统

参考资料

引言

在 OpenStack 等云环境中工作时,有时需要包含特定预装驱动的云镜像以支持新功能。在其他情况下,准备一个包含自定义软件栈的云镜像可以极大方便使用。

Diskimage-builder (DIB) 是一个用于自动构建定制镜像的工具,适用于云环境及其他场景。

以下简短文章介绍了使用 DIB 元素创建包含预装 NVIDIA MLNX_OFED、CUDA 驱动、GPUDirect 测试工具及若干客户操作系统优化的客户机和部署镜像所需的步骤。

DIB 支持多种操作系统发行版作为“构建主机”(用于构建客户机镜像的服务器)和“客户机目标”(用于云实例的镜像)。本文以 CentOS 8 作为构建主机和客户机目标的参考。

客户机操作系统镜像的构建流程

准备构建主机

  1. 在用作构建主机的服务器上安装操作系统。本文使用的构建主机操作系统为最新的 CentOS 8.5 版本。

  2. 安装 DIB 及其先决条件。

    # dnf install qemu-img epel-release python3-pip
    # pip3 install diskimage-builder
    

    注意:除上述安装外,建议同时在构建主机上安装 qemu-kvm,以便在将生成的镜像迁移到云环境之前,在本地虚拟机上测试。

  3. 创建主元素目录,用于存放自定义元素的子目录。

    # mkdir -p /home/diskimage-builder/elements
    # cd /home/diskimage-builder/elements
    
  4. 为每个自定义元素创建子目录。本文描述的自定义元素创建了以下目录:

    # mkdir mofed
    # mkdir cloud-init-config
    # mkdir cuda
    # mkdir gpudirect-bench
    

创建自定义元素

NVIDIA MLNX_OFED 安装元素

注意:此元素要求构建主机上存在 MLNX_OFED ISO 文件。

“mofed”元素用于构建包含已安装 NVIDIA 网络驱动集(即 MLNX_OFED)的客户机镜像,并针对 RHEL 8.5 操作系统进行了调整。

  1. NVIDIA Networking Linux Drivers 网站 下载相关的 MLNX_OFED ISO 文件。以下示例展示了如何下载 RHEL 8.5 变体,因为本文使用的操作系统是 CentOS 8.5。

    # cd /tmp/
    # wget https://content.mellanox.com/ofed/MLNX_OFED-5.5-1.0.3.2/MLNX_OFED_LINUX-5.5-1.0.3.2-rhel8.5-x86_64.iso
    
  2. 下载 mofed 元素文件 - openstack-dib-elements-main-mofed.zip,并在构建主机上解压。附件包含以下文件:

    文件 描述
    README.rst 元素描述与目标。
    element-deps 元素依赖关系。本例中无其他元素依赖。
    package-installs.yaml 元素安装所需的软件包列表。
    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 的脚本。

构建过程需支持客户机镜像内核版本。

# chmod 755 /home/diskimage-builder/elements/mofed/extra-data.d/70-copy-ofed-file
# chmod 755 /home/diskimage-builder/elements/mofed/install.d/70-mofed-install
# export DIB_MOFED_FILE="/tmp/MLNX_OFED_LINUX-5.0-2.1.8.0-rhel7.8-x86_64.iso"

Cloud-init 配置元素

注意 Cloud-init 是一种跨平台云实例初始化方法。有关 cloud-init 的更多信息,请参阅 Cloud-init 文档

“cloud-init-config”元素用于构建带有自定义 cloud-init 参数的客户机镜像,这些参数将在实例初始化期间使用。在本例中,我们将使用它确保在实例初始化期间创建一个具有所需远程访问方法的系统用户。

由于 cloud-init 已包含在 DIB 生成的 CentOS 基础镜像中,因此没有依赖项或软件包安装要求。但是,需要修改 cloud-init 的默认配置文件。

  1. 下载 cloud-init-config 元素文件 - openstack-dib-elements-main-cloud-init-config.zip,并在构建主机上解压。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    post-install.d/50-cloud-init-config 用于修改 cloud-init 默认配置的脚本,允许创建名为“stack”的管理员用户,并通过密码 SSH 访问使用此客户机镜像创建的实例。

    注意 创建具有密码 SSH 访问权限的用户存在潜在安全风险,仅为方便起见提供。在生产环境中,强烈建议使用 SSH 密钥进行用户认证。

  2. 使用以下命令为所需密码生成新的“加盐”哈希,并将“passwd”值填充到 50-cloud-init-config 文件中以包含新的密码哈希。

    注意

    • 编辑文件时请记得转义特殊字符。
    • 示例元素文件包含密码“stack”的哈希。
    # perl -e 'print crypt("<your secret>","\$6\$<your salt>\$") . "\n"'
    
  3. 将文件放置在 /home/diskimage-builder/elements 目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/cloud-init-config/post-install.d/50-cloud-init-config
    

CUDA 驱动安装元素

注意 此元素要求:

  • 目标客户机内核版本与构建主机内核版本相同(否则安装将失败)。
  • 构建主机上具有支持 CUDA 的 NVIDIA GPU 设备(否则安装将失败)。有关支持 CUDA 的产品列表,请参见此处
  • 构建主机上已安装 CUDA 仓库。
  • 对于 GPUDirect 用例,应在目标镜像上安装 NVIDIA MLNX_OFED 网络驱动。如果计划使用 GPUDirect,请确保在构建命令中始终将此元素与 mofed 元素一起使用。
  • GPUDirect 所需的 nvidia-peermem 内核模块作为 CUDA 安装的一部分进行安装。

“cuda”元素用于 CUDA 库、驱动和工具包。

  1. 下载 cuda 元素文件 - openstack-dib-elements-main-cuda.zip,并在构建主机上解压。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    element-deps 元素依赖项。
    package-installs.yaml 元素安装所需的软件包列表。
    pkg-map 软件包列表到 RedHat OS 发行版软件包的映射。
    post-install.d/05-cuda-install 用于下载 CUDA run 安装程序文件并安装 CUDA 驱动和工具包的脚本。
  2. 将文件放置在 /home/diskimage-builder/elements 目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/cuda/post-install.d/05-cuda-install
    
  3. 在构建主机上安装 RHEL8 CUDA 仓库。

    # dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
    
  4. 设置环境变量,指定构建主机上 CUDA 仓库的位置以及下载所需 CUDA run 文件安装程序的 URL。

    # export DIB_YUM_REPO_CONF="/etc/yum.repos.d/Cent* /etc/yum.repos.d/cuda-rhel8.repo"
    # export DIB_CUDA_URL=https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run
    

GPUDirect 基准测试安装元素

GPUDirect Benchmark 安装元素

注意

此元素要求:

  • 目标客户机内核版本必须与构建主机内核版本一致(否则安装会失败)。
  • 目标镜像上已安装CUDA驱动。请确保始终将此元素与cuda元素一起使用。
  • 按如下说明使用DIB_CUDA_PATH环境变量。

"gpudirect-bench"元素用于安装GPUDirect测试工具和框架,例如支持CUDA的perftest工具套件。

  1. 下载gpudirect-bench元素文件 - openstack-dib-elements-main-gpudirect-bench.zip,并在构建主机上解压。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    element-deps 元素依赖关系。
    package-installs.yaml 元素安装所需的包列表。
    pkg-map 包列表到RedHat OS发行版包的映射。
    post-install.d/06-gdr-bench-install 用于安装支持CUDA/GPUDirect的perftest的脚本。
  2. 将文件放置在/home/diskimage-builder/elements目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/gpudirect-bench/post-install.d/06-gdr-bench-install
    
  3. 设置环境变量,指向目标构建镜像上的CUDA文件位置。CUDA版本应与之前步骤中由"cuda"元素安装的版本一致。

    # export DIB_CUDA_PATH=/usr/local/cuda-11.6
    

设置DIB预构建环境变量

在应用DIB镜像创建命令之前,设置以下环境变量。

变量 描述
ELEMENTS_PATH 构建命令中使用的自定义元素的位置。
DIB_MOFED_FILE MLNX_OFED ISO文件的位置,mofed元素需要。
DIB_YUM_REPO_CONF 构建主机上自定义仓库的位置,构建过程中使用。cuda元素需要CUDA仓库。
DIB_CUDA_URL CUDA安装程序run文件下载路径,cuda元素需要。
DIB_CUDA_PATH 目标镜像上CUDA二进制文件的位置,GPUDirect Benchmark元素需要。
DIB_MODPROBE_BLACKLIST 构建过程中要加入黑名单的内核模块。
DIB_CLOUD_INIT_DATASOURCES cloud-init-datasources元素的cloud-init数据源类型。
DIB_DHCP_TIMEOUT DHCP超时值,用于dhcp-all-interfaces元素。
# export ELEMENTS_PATH=/home/diskimage-builder/elements
# export DIB_MOFED_FILE="/tmp/MLNX_OFED_LINUX-5.5-1.0.3.2-rhel8.5-x86_64.iso"
# export DIB_YUM_REPO_CONF="/etc/yum.repos.d/Cent* /etc/yum.repos.d/cuda-rhel8.repo"
# export DIB_CUDA_URL=https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run
# export DIB_CUDA_PATH=/usr/local/cuda-11.6
# export DIB_MODPROBE_BLACKLIST="nouveau"
# export DIB_CLOUD_INIT_DATASOURCES="OpenStack"
# export DIB_DHCP_TIMEOUT=30

使用自定义元素运行镜像构建命令

注意

  • 可以仅使用mofed元素或cloud-init-config元素构建目标镜像,而不使用cuda或gpudirect-bench元素。
  • mofed元素是cuda元素的前提条件。
  • cuda元素是gpudirect-bench元素的前提条件,并且构建主机上需要支持CUDA的GPU设备。
  • cuda和gpudirect-bench元素要求目标客户机内核版本与构建主机内核版本一致。

通常,镜像创建命令包括强制性和可选的DIB原生元素以及用户自定义元素,根据所需的用例或构建目的进行选择。

对于本文描述的特定用例,构建命令中包含以下元素。

  • DIB元素:

    • vm
    • dhcp-all-interfaces
    • cloud-init-datasources
    • dracut-regenerate
    • growroot
    • epel
    • centos
    • block-device-efi

    有关更多详细信息和完整的DIB元素列表,请参考此链接

  • 自定义元素:

    • mofed:上述NVIDIA网络驱动安装元素。
    • cloud-init-config:上述Cloud-init配置元素。
    • cuda:上述CUDA驱动安装元素。
    • gpudirect-bench:上述GPUDirect Benchmark安装元素。

如何创建包含 NVIDIA GPU 和网卡驱动的 OpenStack 云镜像

镜像构建流程

前提条件

  • 安装 diskimage-builder 包:
# pip3 install --user diskimage-builder
  • 设置自定义元素目录:
# export ELEMENTS_PATH=$HOME/diskimage-builder/elements
# cd $ELEMENTS_PATH
# cd mofed
# chmod 755 extra-data.d/70-copy-ofed-file
# chmod 755 install.d/70-ofed-install
  • 下载相关的 MLNX_OFED ISO 文件,并导出变量指向其位置:
# export DIB_MOFED_FILE="/tmp/MLNX_OFED_LINUX-5.5-1.0.3.2-rhel8.5-x86_64.iso"
  • 下载 NVIDIA GPU 驱动安装程序,并导出变量指向其位置:
# export DIB_CUDA_FILE="/tmp/NVIDIA-Linux-x86_64-510.39.01.run"
# cd $ELEMENTS_PATH
# cd gpudirect-bench
# chmod 755 install.d/70-gpudirect-bench-install

构建命令

运行构建命令:

# disk-image-create vm dhcp-all-interfaces cloud-init-datasources cloud-init-config dracut-regenerate growroot epel centos block-device-efi mofed cuda gpudirect-bench -o /home/diskimage-builder/centos8-nvidia

构建成功后,将在 /home/diskimage-builder/ 目录下生成 centos8-nvidia.qcow2 镜像文件。

上传镜像到 OpenStack 云并启动实例

  1. centos8-nvidia.qcow2 镜像文件复制到 Undercloud 节点,并执行以下命令上传到 Overcloud 镜像存储:
# source overcloudrc
# openstack image create centos8-nvidia --public --disk-format qcow2 --container-format bare --file centos8-nvidia.qcow2
  1. 使用构建的客户镜像创建云实例:
# openstack server create --image centos8-nvidia --flavor <my_flavor> --network <my_network> my_instance1
  1. 由于使用了自定义 cloud-init 元素创建用户并允许基于密码的 SSH,现在可以使用 "stack" 用户和 cloud-init 元素中配置的密码登录新实例:
# ssh stack@my_instance1

注意:本文不涉及实例网络连接配置方法。

  1. 登录实例后,验证自定义组件是否已安装:
my_instance1# ofed_info -s
MLNX_OFED_LINUX-5.5-1.0.3.2:

my_instance1# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  510.39.01  Fri Dec 31 11:03:22 UTC 2021
GCC version:  gcc version 8.5.0 20210514 (Red Hat 8.5.0-7) (GCC)

my_instance1# ib_write_bw --help | grep cuda
      --use_cuda=<cuda device id> Use CUDA specific device for GPUDirect RDMA testing
      --use_cuda_bus_id=<cuda full BUS id> Use CUDA specific device, based on its full PCIe address, for GPUDirect RDMA testing

针对 OpenStack BareMetal 云服务 (Ironic) 的镜像构建流程(含 MLNX_OFED)

注意:本节仅描述使用 NVIDIA MLNX_OFED 元素创建自定义云部署镜像。

BareMetal 部署需要 "deploy images",由 BareMetal Ironic 服务用于准备 BareMetal 服务器以部署客户 OS 镜像,如此处所述。

在某些情况下,需要构建自定义 Ironic 部署镜像以支持新功能。

按照以下说明构建包含 NVIDIA MLNX_OFED 网卡驱动的自定义 Ironic 部署镜像

  1. 除了前面章节描述的 DIB 包外,在构建主机上安装 DIB ironic-python-agent-builder:
# pip3 install --user diskimage-builder ironic-python-agent-builder
  1. 将自定义元素目录设置为包含 ironic 相关元素的目录:
# export ELEMENTS_PATH=$HOME/.local/share/ironic-python-agent-builder/dib
  1. 将自定义 NVIDIA 网卡驱动安装元素文件 openstack-dib-elements-main-mofed.zip 放置到新元素目录下,并设置安装脚本权限:
# cd $ELEMENTS_PATH
# cd mofed
# chmod 755 extra-data.d/70-copy-ofed-file
# chmod 755 install.d/70-ofed-install
  1. 如前所述,下载相关的 MLNX_OFED ISO 文件,并导出变量指向其在构建主机上的位置:
# export DIB_MOFED_FILE="/tmp/MLNX_OFED_LINUX-5.5-1.0.3.2-rhel8.5-x86_64.iso"
  1. 使用 ironic-python-agent-ramdisk 和 mofed 元素运行构建命令:
# disk-image-create ironic-python-agent-ramdisk centos mofed -o ironic-deploy-mofed

构建成功后,将生成两个部署镜像文件:ironic-deploy-mofed.kernelironic-deploy-mofed.initramfs

  1. 将部署镜像复制到 OpenStack Undercloud 节点,并上传到镜像存储供 BareMetal Ironic 服务使用:
# source overcloudrc
# openstack image create oc-bm-deploy-kernel-mofed --public --disk-format aki --container-format aki --file ironic-deploy-mofed.kernel
# openstack image create oc-bm-deploy-ram-mofed --public --disk-format ari --container-format ari --file ironic-deploy-mofed.initramfs

注意:本文不涉及创建 BareMetal 云实例的完整流程。

附录

基本 DIB 镜像构建故障排除

  1. 可以在镜像构建过程中进入 shell,在已知钩子点之前或之后进行调试和故障排除。通过在运行构建命令前设置 "break" 环境变量为所需的断点来实现。

    要在构建错误后中断,运行:

    # export break=after-error
    

    要在构建预安装阶段前中断,运行:

    # export break=before-pre-install
    
  2. 为了调试本文中演示的使用 bash 脚本的自定义元素:

    • 在脚本中包含以下代码段:

      #!/bin/bash
      
      if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
          set -x
      fi
      set -o errexit
      set -o nounset
      set -o pipefail
      
    • 在运行构建命令前设置 DIB_DEBUG_TRACE 环境变量,以启用脚本 bash 打印:

      # export DIB_DEBUG_TRACE=1
      

附加元素

性能工具安装元素

GPUDirect Benchmark 安装元素(如上所述)。

"perf-tools"元素包含一组用于IP/DPDK/RDMA性能测试的库和工具。

注意 此元素已调整为CentOS 8.2操作系统

  1. 下载perf-tools元素文件 - openstack-dib-elements-main-perf-tools.zip。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    element-deps 元素依赖关系。
    package-installs.yaml 元素安装所需的软件包列表。
    pkg-map 软件包列表到RedHat OS发行版软件包的映射。
    post-install.d/09-perf-tools-install 用于安装Trex流量生成器、DPDK 20.11、perftest工具、iperf3的脚本。此外,该脚本将设置DPDK所需的大页。
  2. 将文件放置在/home/diskimage-builder/elements目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/perf-tools/post-install.d/09-perf-tools-install
    
  3. 执行镜像构建命令:

    # disk-image-create vm dhcp-all-interfaces cloud-init-datasources cloud-init-config dracut-regenerate growroot epel centos perf-tools -o /home/diskimage-builder/centos8-2-perf
    

DHClient IPoIB配置元素(CentOS 7)

"dhclient-hw"元素用于调整CentOS 7操作系统镜像上的dhclient.conf文件,以支持IPoIB OpenStack部署。

注意

  • 此元素已调整为CentOS 7.9操作系统。
  • CentOS 8客户机镜像的IPoIB OpenStack部署不需要此元素。
  • 此元素对于客户机和ironic部署镜像都是必需的。
  • 目标镜像上也应安装NVIDIA MLNX_OFED网卡驱动,以支持CentOS 7镜像的IPoIB OpenStack部署。
    • 下载适用于CentOS 7的相关MLNX_OFED,并在运行构建命令前使用DIB_MOFED_FILE环境变量指向该文件。
  1. 下载dhclient-hw元素文件 - openstack-dib-elements-main-dhclient-hw.zip。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    post-install.d/60-dhclient-config 用于在CentOS 7操作系统镜像上设置dhclient.conf以支持IPoIB OpenStack部署的脚本。
  2. 将文件放置在/home/diskimage-builder/elements目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/dhclient-hw/post-install.d/60-dhclient-config
    
  3. 在CentOS 7构建主机上执行镜像构建命令以生成客户机和部署镜像:

    # disk-image-create vm dhcp-all-interfaces cloud-init-datasources cloud-init-config dracut-regenerate growroot epel centos mofed dhclient-hw -o centos7-ipoib
    
    # disk-image-create ironic-python-agent-ramdisk centos mofed dhclient-hw -o centos7-ipoib-ironic-deploy-mofed
    

RDMA-Core元素(CentOS 8上的IPoIB支持)

设置ipoib支持的rdma-service在最近的CentOS发行版中已被弃用,并由rdma-core软件包取代。 "rdma-core"元素是安装rdma-core软件包的基本元素,提供IPoIB OpenStack部署所需的原生ipoib操作系统支持。

注意

  • 使用NVIDIA MLNX_OFED网卡驱动构建镜像时不需要此元素。
  1. 下载rdma-core元素文件 - openstack-dib-elements-main-rdma-core.zip。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    element-deps 元素依赖关系。
    package-installs.yaml 元素安装所需的软件包列表。
    pkg-map 软件包列表到RedHat和Ubuntu OS发行版软件包的映射。
  2. 将文件放置在/home/diskimage-builder/elements目录下。

  3. 执行镜像构建命令:

    # disk-image-create vm dhcp-all-interfaces cloud-init-datasources cloud-init-config dracut-regenerate growroot epel centos rdma-core -o centos8-rdma
    

Cloud-init禁用网络配置元素(CentOS 8)

(内容缺失,但根据标题,应包含相关说明)

注意 Cloud-init 是一种跨平台云实例初始化方法。有关 cloud-init 的更多信息,请参阅 Cloud-init 文档

“cloud-init-net-conf-disabled”元素用于构建带有自定义 cloud-init 参数的客户机镜像,这些参数将在实例初始化期间使用。在本例中,我们将使用它确保在我们创建的镜像上禁用 cloud-init 的网络配置。这在将能够自动配置接口的网络管理器用作默认网络服务的系统中可能是必需的。

注意 此元素是支持 CentOS 8 OpenStack IPoIB 部署所必需的,以便允许网络管理器正确配置和启动 IPoIB 接口。

  1. 下载 cloud-init-net-conf-disabled 元素文件 - openstack-dib-elements-main-cloud-init-net-conf-disabled.zip 并将其解压到构建主机上。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    post-install.d/51-cloud-init-no-net 用于修改 cloud-init 默认配置以禁用 cloud-init 网络配置并将其留给网络管理器(在使用它的系统中)的脚本。
  2. 将文件放置在 /home/diskimage-builder/elements 目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/cloud-init-net-conf-disabled/post-install.d/51-cloud-init-no-net
    
  3. 执行镜像构建命令:

    # disk-image-create vm dhcp-all-interfaces cloud-init-datasources cloud-init-config cloud-init-net-conf-disabled dracut-regenerate growroot epel centos rdma-core -o centos8-rdma-networkmanager
    

Ubuntu OS 元素

以下元素针对基于 Ubuntu 的虚拟机镜像进行了调整,并应在安装了 python3-diskimage-builder 包的基于 Ubuntu 的构建主机上使用。

适用于 Ubuntu 的 NVIDIA MLNX_OFED 元素

注意 此元素需要:

  • 构建主机上的 MLNX_OFED ISO 文件

“mofed-ubuntu”元素用于构建安装了 NVIDIA 网卡驱动集(也称为 MLNX_OFED)的客户机镜像,并针对 Ubuntu 22.04 操作系统进行了调整。

  1. 从 NVIDIA Networking Linux Drivers 网站 下载相关的 MLNX_OFED ISO 文件。以下是下载适用于 Ubuntu 操作系统的 Debian 变体的示例。

    # cd /tmp/
    # wget https://content.mellanox.com/ofed/MLNX_OFED-5.7-1.0.2.0/MLNX_OFED_LINUX-5.7-1.0.2.0-ubuntu22.04-x86_64.iso
    
  2. 下载 mofed 元素文件 - openstack-dib-elements-main-mofed-ubuntu.zip,并将其解压到构建主机上。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    extra-data.d/70-copy-mofed-file 用于在构建过程中将 MLNX_OFED ISO 镜像复制到 DIB 环境中的脚本。需要 DIB_OFED_FILE 环境变量来指向构建主机操作系统中 MLNX_OFED ISO 文件的位置。
    install.d/70-ofed-install 用于在构建过程中在 DIB 环境中安装 MLNX_OFED 并支持客户机镜像内核版本的脚本。
  3. 将文件放置在 /home/diskimage-builder/elements 目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/mofed-ubuntu/extra-data.d/70-copy-mofed-file
    # chmod 755 /home/diskimage-builder/elements/mofed-ubuntu/install.d/70-mofed-install
    
  4. 设置环境变量,指向构建主机上 MLNX_OFED ISO 文件的位置。

    # export DIB_MOFED_FILE="/tmp/MLNX_OFED_LINUX-5.7-1.0.2.0-ubuntu22.04-x86_64.iso"
    
适用于 Ubuntu 的 CUDA 驱动元素

注意 此元素需要:

  • 目标客户机内核版本与构建主机内核版本相同(否则安装将失败)。
  • 构建主机上具有支持 CUDA 的 NVIDIA GPU 设备(否则安装将失败)。有关支持 CUDA 的产品列表,请参见此处
  • 对于 GPUDirect 用例,应在目标镜像上安装 NVIDIA MLNX_OFED 网卡驱动。如果您计划使用 GPUDirect,请确保在构建命令中始终将此元素与 mofed 元素一起使用。

“cuda-ubuntu”元素用于 CUDA 库、驱动和工具包。

  1. 下载 cuda 元素文件 - openstack-dib-elements-main-cuda-ubuntu.zip,并将其解压到构建主机上。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    post-install.d/05-cuda-install 用于在构建过程中在 DIB 环境中安装 CUDA 驱动和库的脚本。
  2. 将文件放置在 /home/diskimage-builder/elements 目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/cuda-ubuntu/post-install.d/05-cuda-install
    
  3. 执行镜像构建命令:

    # disk-image-create vm dhcp-all-interfaces cloud-init-datasources cloud-init-config cloud-init-net-conf-disabled dracut-regenerate growroot epel ubuntu mofed-ubuntu cuda-ubuntu -o ubuntu22-cuda-mofed
    

CUDA Ubuntu元素

注意

此元素要求:

  • 构建主机上存在支持CUDA的GPU设备。
  • 使用如下所述的DIB_CUDA_URL环境变量。

"cuda-ubuntu"元素用于安装NVIDIA CUDA驱动和工具包。

  1. 下载cuda-ubuntu元素文件 - openstack-dib-elements-main-cuda-ubuntu.zip,并在构建主机上解压。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    element-deps 元素依赖关系。
    package-installs.yaml 元素安装所需的软件包列表。
    pkg-map 软件包列表到RedHat OS发行版软件包的映射。
    post-install.d/05-cuda-install 用于下载CUDA运行安装程序文件并安装CUDA驱动和工具包的脚本。
  2. 将文件放置在/home/diskimage-builder/elements目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/cuda-ubuntu/post-install.d/05-cuda-install
    
  3. 设置环境变量,指定下载所需CUDA keyring deb包的URL。

    # export DIB_CUDA_URL=https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
    

GPUDirect基准测试Ubuntu元素

注意

此元素要求:

  • 目标客户机内核版本与构建主机内核版本相同(否则安装会失败)。
  • 目标镜像上已安装CUDA驱动。确保始终将此元素与cuda元素一起使用。
  • 按如下说明使用DIB_CUDA_PATH环境变量。

"gpudirect-bench"元素用于安装GPUDirect测试工具和框架,例如支持CUDA的perftest工具套件。

  1. 下载gpudirect-bench元素文件 - openstack-dib-elements-main-gpudirect-bench-ubuntu.zip,并在构建主机上解压。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    element-deps 元素依赖关系。
    package-installs.yaml 元素安装所需的软件包列表。
    pkg-map 软件包列表到RedHat OS发行版软件包的映射。
    post-install.d/06-gdr-bench-install 用于安装支持CUDA/GPUDirect的perftest的脚本。
  2. 将文件放置在/home/diskimage-builder/elements目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/gpudirect-bench-ubuntu/post-install.d/06-gdr-bench-install
    
  3. 设置环境变量,指定目标构建镜像上CUDA文件的位置。CUDA版本应与之前步骤中"cuda"元素安装的版本匹配。

    # export DIB_CUDA_PATH=/usr/local/cuda-11.7
    

性能工具Ubuntu元素

注意

此元素要求:

  • MLNX_OFED Ubuntu元素
  • 按如下说明使用DIB_DPDK_VERDIB_TREX_VER环境变量。

"perf-tools"元素包含一组用于IP/DPDK性能测试的库和工具。

  1. 下载perf-tools元素文件 - openstack-dib-elements-main-perf-tools-ubuntu.zip。附件包含以下文件:

    文件 描述
    README.rst 元素描述和目标。
    package-installs.yaml 元素安装所需的软件包列表。
    post-install.d/09-perf-tools-install 用于安装Trex流量生成器、DPDK及DPDK应用(如testpmd、iperf3)的脚本。此外,该脚本还会设置DPDK所需的大页。
  2. 将文件放置在/home/diskimage-builder/elements目录下,并确保脚本具有可执行权限。

    # chmod 755 /home/diskimage-builder/elements/perf-tools-ubuntu/post-install.d/09-perf-tools-install
    
  3. 设置环境变量,指定所需的DPDK和TREX版本。

    # export DIB_DPDK_VER=dpdk-21.11
    # export DIB_TREX_VER=v2.99
    

使用Ubuntu元素运行镜像构建命令

注意

  • 可以仅使用mofed-ubuntu元素构建目标镜像。
  • mofed-ubuntu和cuda-ubuntu元素是gpudirect-bench-ubuntu元素的前提条件。
  • cuda元素要求构建主机上存在支持CUDA的GPU设备。

以下过程描述如何创建包含以下元素的22.04 Ubuntu虚拟机镜像:

  • mofed-ubuntu
  • cuda-ubuntu
  • gpudirect-bench-ubuntu

在应用DIB镜像创建命令之前,设置以下环境变量。

# export ELEMENTS_PATH=/home/diskimage-builder/elements
# export DIB_RELEASE=jammy
# export ELEMENTS_PATH=/home/ubuntu/openstack-dib-elements
# export DIB_MOFED_FILE="/tmp/MLNX_OFED_LINUX-5.7-1.0.2.0-ubuntu22.04-x86_64.iso"
# export DIB_CUDA_URL=https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
# export DIB_CUDA_PATH=/usr/local/cuda-11.7

运行构建命令:

# disk-image-create --no-tmpfs vm dhcp-all-interfaces cloud-init-datasources mofed-ubuntu cuda-ubuntu gpudirect-bench-ubuntu ubuntu -o ubuntu-gdr

构建过程成功完成后,

ubuntu-gdr.qcow2 镜像文件将生成在 /home/diskimage-builder/ 目录下。

作者

image-2025-9-15_10-4-30.png Itai Levy过去几年,Itai Levy 担任 NVIDIA 网络“解决方案实验室”团队的解决方案架构师。他围绕云计算、软件定义网络、存储和安全设计和执行前沿解决方案。他的主要专业领域包括 NVIDIA BlueField 数据处理单元 (DPU) 解决方案和加速的 K8s/OpenStack 平台。

相关文档