10.2. 在 Compute 节点上配置 vGPU
要让您的云用户创建使用虚拟 GPU (vGPU)的实例,您必须配置具有物理 GPU 的 Compute 节点:
- 为 vGPU 指定 Compute 节点。
- 为 vGPU 配置 Compute 节点。
- 部署 overcloud。
- 可选:为 vGPU 类型创建自定义特征。
- 可选:创建自定义 GPU 实例镜像。
- 创建一个 vGPU 类别来启动具有 vGPU 的实例。
如果 GPU 硬件有限,您还可以配置主机聚合来优化 vGPU Compute 节点上的调度。要只在 vGPU Compute 节点上调度请求 vGPU 的实例,请创建一个 vGPU Compute 节点的主机聚合,并将计算调度程序配置为仅将 vGPU 实例放在主机聚合中。如需更多信息,请参阅 Creating and managing host aggregates 和 Filtering by isolating host aggregates。
要使用 NVIDIA GRID vGPU,您必须符合 NVIDIA GRID 许可要求,您必须具有自托管许可证服务器的 URL。如需更多信息,请参阅 NVIDIA License Server 发行注记 网页。
10.2.1. 先决条件
- 您已从 NVIDIA 网站下载了与 GPU 设备对应的 NVIDIA GRID 主机驱动程序 RPM 软件包。要确定您需要的驱动程序,请参阅 NVIDIA Driver Downloads Portal。您必须是一个注册的 NVIDIA 客户才能从门户下载驱动程序。
- 您已构建了一个自定义 overcloud 镜像,该镜像安装了 NVIDIA GRID 主机驱动程序。
10.2.2. 为 vGPU 设计 Compute 节点
要为 vGPU 工作负载指定 Compute 节点,您必须创建一个新的角色文件来配置 vGPU 角色,并使用 GPU 资源类配置裸机节点,以标记启用了 GPU 的 Compute 节点。
以下流程适用于尚未调配的新 overcloud 节点。要将资源类分配给已调配的现有 overcloud 节点,您必须使用缩减流程取消置备节点,然后使用扩展步骤使用新资源类分配重新置备节点。有关更多信息,请参阅 扩展 overcloud 节点。
流程
-
以
stack
用户的身份登录 undercloud。 Source
stackrc
文件:[stack@director ~]$ source ~/stackrc
生成一个名为
roles_data_gpu.yaml
的新角色数据文件,其中包含Controller
、Compute
和ComputeGpu
角色,以及 overcloud 所需的任何其他角色:(undercloud)$ openstack overcloud roles \ generate -o /home/stack/templates/roles_data_gpu.yaml \ Compute:ComputeGpu Compute Controller
打开
roles_data_gpu.yaml
并编辑或添加以下参数和部分:section/Parameter 当前值 新值 role 注释
Role: Compute
Role: ComputeGpu
角色名称
Name: Compute
name: ComputeGpu
description
基本 Compute 节点角色
GPU Compute 节点角色
HostnameFormatDefault
-compute-
-computegpu-
deprecated_nic_config_name
compute.yaml
compute-gpu.yaml
-
通过将 overcloud 添加到节点定义模板
node.json
或node.yaml
中,为 overcloud 注册启用了 GPU 的 Compute 节点。有关更多信息,请参阅 安装和管理 Red Hat OpenStack Platform 指南中的 为 overcloud 注册节点。 检查节点硬件:
(undercloud)$ openstack overcloud node introspect --all-manageable \ --provide
如需更多信息,请参阅 安装和管理 Red Hat OpenStack Platform 指南中的创建 裸机节点硬件清单。
使用自定义 GPU 资源类标记您要为 GPU 工作负载指定的每个裸机节点:
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.GPU <node>
将
<node
> 替换为 baremetal 节点的 ID。将
ComputeGpu
角色添加到节点定义文件overcloud-baremetal-deploy.yaml
中,并定义您要分配给节点的任何预先节点放置、资源类、网络拓扑或其他属性:- name: Controller count: 3 - name: Compute count: 3 - name: ComputeGpu count: 1 defaults: resource_class: baremetal.GPU network_config: template: /home/stack/templates/nic-config/myRoleTopology.j2 1
有关您可以在节点定义文件中配置节点属性的属性的更多信息,请参阅 裸机节点置备属性。有关节点定义文件的示例,请参阅 节点定义文件 示例。
运行 provisioning 命令为您的角色置备新节点:
(undercloud)$ openstack overcloud node provision \ --stack <stack> \ [--network-config \] --output /home/stack/templates/overcloud-baremetal-deployed.yaml \ /home/stack/templates/overcloud-baremetal-deploy.yaml
-
将
&
lt;stack> 替换为置备裸机节点的堆栈名称。如果未指定,则默认为overcloud
。 -
包含
--network-config
可选参数,为cli-overcloud-node-network-config.yaml
Ansible playbook 提供网络定义。如果您没有使用network_config
属性定义网络定义,则使用默认网络定义。
-
将
在一个单独的终端中监控置备进度。当置备成功时,节点状态将从
available
变为active
:(undercloud)$ watch openstack baremetal node list
如果您没有使用
--network-config
选项运行 provisioning 命令,请在network-environment.yaml
文件中配置 <Role>NetworkConfigTemplate
参数以指向 NIC 模板文件:parameter_defaults: ComputeNetworkConfigTemplate: /home/stack/templates/nic-configs/compute.j2 ComputeGpuNetworkConfigTemplate: /home/stack/templates/nic-configs/<gpu_net_top>.j2 ControllerNetworkConfigTemplate: /home/stack/templates/nic-configs/controller.j2
将
<gpu_net_top>
替换为包含ComputeGpu
角色的网络拓扑的文件名称,如compute.yaml
以使用默认网络拓扑。
10.2.3. 为 vGPU 配置 Compute 节点并部署 overcloud
您需要检索并分配与环境中物理 GPU 设备对应的 vGPU 类型,并准备环境文件来为 vGPU 配置 Compute 节点。
流程
- 在临时 Compute 节点上安装 Red Hat Enterprise Linux 和 NVIDIA GRID 驱动程序并启动该节点。
虚拟 GPU 是介质设备或
mdev
类型设备。检索每个 Compute 节点上的每个mdev
设备的 PCI 地址:$ ls /sys/class/mdev_bus/
PCI 地址用作设备驱动程序目录名称,如
0000:84:00.0
。查看每个 Compute 节点上每个可用 pGPU 设备支持的
mdev
类型,以发现可用的 vGPU 类型:$ ls /sys/class/mdev_bus/<mdev_device>/mdev_supported_types
将
<mdev_device
> 替换为mdev
设备的 PCI 地址,例如0000:84:00.0
。例如,以下 Compute 节点有 4 个 pGPU,每个 pGPU 都支持相同的 11 vGPU 类型:
[root@overcloud-computegpu-0 ~]# ls /sys/class/mdev_bus/0000:84:00.0/mdev_supported_types: nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45 [root@overcloud-computegpu-0 ~]# ls /sys/class/mdev_bus/0000:85:00.0/mdev_supported_types: nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45 [root@overcloud-computegpu-0 ~]# ls /sys/class/mdev_bus/0000:86:00.0/mdev_supported_types: nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45 [root@overcloud-computegpu-0 ~]# ls /sys/class/mdev_bus/0000:87:00.0/mdev_supported_types: nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45
创建一个
gpu.yaml
文件来指定每个 GPU 设备支持的 vGPU 类型:parameter_defaults: ComputeGpuExtraConfig: nova::compute::vgpu::enabled_vgpu_types: - nvidia-35 - nvidia-36
可选: 要配置多个 vGPU 类型,请将支持的 vGPU 类型映射到 pGPU:
parameter_defaults: ComputeGpuExtraConfig: nova::compute::vgpu::enabled_vgpu_types: - nvidia-35 - nvidia-36 NovaVGPUTypesDeviceAddressesMapping: {'vgpu_<vgpu_type>': ['<pci_address>', '<pci_address>'],'vgpu_<vgpu_type>': ['<pci_address>', '<pci_address>']}
-
将
<vgpu_type
> 替换为 vGPU 类型的名称,以便为 vGPU 组创建一个标签,如vgpu_nvidia-35
。使用以逗号分隔的 vgpu_<vgpu_type>
定义列表来映射额外的 vGPU 类型。 将
<pci_address
> 替换为支持 vGPU 类型的 pGPU 设备的 PCI 地址,如0000:84:00.0
。使用以逗号分隔的 <pci_address>
定义列表将 vGPU 组映射到额外的 pGPU。Example:
NovaVGPUTypesDeviceAddressesMapping: {'vgpu_nvidia-35': ['0000:84:00.0', '0000:85:00.0'],'vgpu_nvidia-36': ['0000:86:00.0']}
-
在 PCI 地址
0000:84:00.0
和0000:85:00.0
中的 pGPU 支持nvidia-35
vGPU 类型。 -
nvidia-36
vGPU 类型只支持 PCI 地址0000:86:00.0
中的 pGPU。
-
在 PCI 地址
-
将
- 保存对 Compute 环境文件的更新。
使用其他环境文件将新的角色和环境文件添加到堆栈中,并部署 overcloud:
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -r /home/stack/templates/roles_data_gpu.yaml \ -e /home/stack/templates/network-environment.yaml \ -e /home/stack/templates/gpu.yaml \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml \ -e /home/stack/templates/node-info.yaml