openstack GPU

news/2024/11/29 18:41:01/

参考链接

添加虚拟GPU到实例

Nova的虚拟GPU特性可以实现使用能够提供虚拟GPU的物理GPU部署指定类型的GPU到实例。
比如单独的Intel GVT-g或者NVIDIA GRID vGPU物理图形处理器单元都可以被虚拟化成多个虚拟vGPUs,前提是hypervisor支持硬件的驱动以及有足够的容量来创建实例使用这些虚拟硬件。
这个特性是高度依赖hypervisor,以及它的版本和主机上的硬件。除此之外,厂商的vGPU的驱动程序必须在主机节点上进行安装和配置。
关于特定于管理程序的注意事项查看链接。
可按照如下方式启用虚拟GPU。

启用GPU类型(Compute)

指定实例使用的特定GPU类型

[devices]
enabled_vgpu_types = nvidia-35

注:在Queens版本中,Nova仅仅支持单一的类型,如果指定多个类型,只有第一个类型会被使用。
可查看链接了解可使用的GPU类型。

重启nova-compute

警告:更改GPU类型是可以实现的,但是由于现有物理GPU无法处理具有不同类型的多个实例。如果具有原始类型的实例仍然存在,nova则会返回一个NoValidHost。因此,强烈建议将新类型部署到没有工作负载的新计算节点之上,并在需要更改类型的节点重新构建实例。

配置flavor(Controller)

配置flavor请求一个vGPU:

openstack flavor set vgpu_1 --property "resources:VGPU=1"

注:在Queens版本中,所有支持vGPU的hypervisors每个实例只能接受单个vGPU。
计算节点上已启用的vGPU类型不对外开放给API用户。Flavor的GPU配置支持绑定到主机聚合。及意味着适宜的调度这些flavor到支持vGPU的节点上。可参考Host Aggregates了解更多信息。

使用vGPU创建实例

nova-scheduler通过调用由计算节点提供的特定vGPU资源类的Placement API来选择具有可用vGPU设备的目标主机。

openstack server create --flavor vgpu_1 --image cirros-0.3.5-x86_64-uec --wait test-vgpu

注:在Queens版本中,只有FilterScheduler调度驱动使用Placement API。

如何寻找GPU类型

取决于Hypervisor:

  • 对于libvrt,vGPUs被视为mediated devices。支持vGPUs的物理PCI设备(这里的图形卡)建议使用mediated device(mdev)类型。自从mediated devices可以在安装厂商vGPUs驱动之后通过sysfs filelinux kernel支持,你可以看到所需的属性如下:
$ ls /sys/class/mdev_bus/*/mdev_supported_types
/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/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/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/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
  • 对于XenServer来说,依赖于可用的硬件和dom0的配置文件,vGPU类型在XenServer启动时进行创建。可运行命令xe vgpu-type-list从dom0获取可用的vGPU类型。这些值对model-name(RO)字段:作为vGPU类型可用于设置[devices]/enabled_vgpu_types。例如:
[root@trailblazer-2 ~]# xe vgpu-type-list
uuid ( RO)              : 78d2d963-41d6-4130-8842-aedbc559709fvendor-name ( RO): NVIDIA Corporationmodel-name ( RO): GRID M60-8Qmax-heads ( RO): 4max-resolution ( RO): 4096x2160uuid ( RO)              : a1bb1692-8ce3-4577-a611-6b4b8f35a5c9vendor-name ( RO): NVIDIA Corporationmodel-name ( RO): GRID M60-0Qmax-heads ( RO): 2max-resolution ( RO): 2560x1600uuid ( RO)              : 69d03200-49eb-4002-b661-824aec4fd26fvendor-name ( RO): NVIDIA Corporationmodel-name ( RO): GRID M60-2Amax-heads ( RO): 1max-resolution ( RO): 1280x1024uuid ( RO)              : c58b1007-8b47-4336-95aa-981a5634d03dvendor-name ( RO): NVIDIA Corporationmodel-name ( RO): GRID M60-4Qmax-heads ( RO): 4max-resolution ( RO): 4096x2160uuid ( RO)              : 292a2b20-887f-4a13-b310-98a75c53b61fvendor-name ( RO): NVIDIA Corporationmodel-name ( RO): GRID M60-2Qmax-heads ( RO): 4max-resolution ( RO): 4096x2160uuid ( RO)              : d377db6b-a068-4a98-92a8-f94bd8d6cc5dvendor-name ( RO): NVIDIA Corporationmodel-name ( RO): GRID M60-0Bmax-heads ( RO): 2max-resolution ( RO): 2560x1600

检查虚拟GPU的分配和库存

注:以下的信息只适宜Stein版本之后及使用libvirt driver。在此版本发布之前或使用Xen驱动程序时,与VGPU资源类相关的库存和分配仍然在与计算节点相关的根资源提供程序上。如果从Rocky进行更新并使用libvirt driver,VGPU库存和分配被移动到代表实际物理gpu的子资源提供程序。
例子中,对于openstack client使用osc-placement plugin,对于更详细的信息参考其文档。

获取resource provider 列表

$ openstack resource provider list
+--------------------------------------+---------------------------------------------------------+------------+
| uuid                                 | name                                                    | generation |
+--------------------------------------+---------------------------------------------------------+------------+
| 5958a366-3cad-416a-a2c9-cfbb5a472287 | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx                  |          7 |
| fc9b9287-ef5e-4408-aced-d5577560160c | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx_pci_0000_86_00_0 |          2 |
| e2f8607b-0683-4141-a8af-f5e20682e28c | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx_pci_0000_85_00_0 |          3 |
| 85dd4837-76f9-41f2-9f19-df386017d8a0 | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx_pci_0000_87_00_0 |          2 |
| 7033d860-8d8a-4963-8555-0aa902a08653 | virtlab606.xxxxxxxxxxxxxxxxxxxxxxxxxxx_pci_0000_84_00_0 |          2 |
+--------------------------------------+---------------------------------------------------------+------------+

上述例子中可以看到root resource provider是5958a366-3cad-416a-a2c9-cfbb5a472287且拥有4个其他资源provider作为其子资源,且每一个资源回应一个单独的物理GPU。

检查每一个resource provider查看resource classes

openstack resource provider inventory list 5958a366-3cad-416a-a2c9-cfbb5a472287
+----------------+------------------+----------+----------+-----------+----------+-------+
| resource_class | allocation_ratio | max_unit | reserved | step_size | min_unit | total |
+----------------+------------------+----------+----------+-----------+----------+-------+
| VCPU           |             16.0 |       48 |        0 |         1 |        1 |    48 |
| MEMORY_MB      |              1.5 |    65442 |      512 |         1 |        1 | 65442 |
| DISK_GB        |              1.0 |       49 |        0 |         1 |        1 |    49 |
+----------------+------------------+----------+----------+-----------+----------+-------+
$ openstack resource provider inventory list e2f8607b-0683-4141-a8af-f5e20682e28c
+----------------+------------------+----------+----------+-----------+----------+-------+
| resource_class | allocation_ratio | max_unit | reserved | step_size | min_unit | total |
+----------------+------------------+----------+----------+-----------+----------+-------+
| VGPU           |              1.0 |       16 |        0 |         1 |        1 |    16 |
+----------------+------------------+----------+----------+-----------+----------+-------+

可以看到VGPU inventory在子资源provider上,其他的资源级别则在root resource provider。

检查使用vGPUs的实例

$ openstack server list
+--------------------------------------+-------+--------+---------------------------------------------------------+--------------------------+--------+
| ID                                   | Name  | Status | Networks                                                | Image                    | Flavor |
+--------------------------------------+-------+--------+---------------------------------------------------------+--------------------------+--------+
| 5294f726-33d5-472a-bef1-9e19bb41626d | vgpu2 | ACTIVE | private=10.0.0.14, fd45:cdad:c431:0:f816:3eff:fe78:a748 | cirros-0.4.0-x86_64-disk | vgpu   |
| a6811fc2-cec8-4f1d-baea-e2c6339a9697 | vgpu1 | ACTIVE | private=10.0.0.34, fd45:cdad:c431:0:f816:3eff:fe54:cc8f | cirros-0.4.0-x86_64-disk | vgpu   |
+--------------------------------------+-------+--------+---------------------------------------------------------+--------------------------+--------+$ openstack resource provider allocation show 5294f726-33d5-472a-bef1-9e19bb41626d
+--------------------------------------+------------+------------------------------------------------+
| resource_provider                    | generation | resources                                      |
+--------------------------------------+------------+------------------------------------------------+
| 5958a366-3cad-416a-a2c9-cfbb5a472287 |          8 | {u'VCPU': 1, u'MEMORY_MB': 512, u'DISK_GB': 1} |
| 7033d860-8d8a-4963-8555-0aa902a08653 |          3 | {u'VGPU': 1}                                   |
+--------------------------------------+------------+------------------------------------------------+$ openstack resource provider allocation show a6811fc2-cec8-4f1d-baea-e2c6339a9697
+--------------------------------------+------------+------------------------------------------------+
| resource_provider                    | generation | resources                                      |
+--------------------------------------+------------+------------------------------------------------+
| e2f8607b-0683-4141-a8af-f5e20682e28c |          3 | {u'VGPU': 1}                                   |
| 5958a366-3cad-416a-a2c9-cfbb5a472287 |          8 | {u'VCPU': 1, u'MEMORY_MB': 512, u'DISK_GB': 1} |
+--------------------------------------+------------+------------------------------------------------+

在本例中,使用请求1个VGPU的样式创建了两个服务器,因此在查看每个消费者UUID(即服务器UUID)的分配时,您可以看到VGPU分配针对子资源提供程序,而其他分配针对根资源提供程序。在这里,这意味着a6811fc2-cec8-4f1d-baea-e2c6339a9697使用的虚拟GPU实际上是由PCI ID为0000:85:00.0的物理GPU提供的。

警告

注:这些信息在Queens版本中被修复。
对于libvirt:

  • 挂起一个拥有vGPUs但是由于libvirt限制并未工作的实例(它不支持从实例热插拔mediated devices)。在libvirt获得mdev热拔插支持之前,建议使用其他实例操作(如快照实例或搁置实例)来解决问题。如果用户试图挂起实例,libvirt驱动程序将引发一个异常,导致实例被设置回ACTIVE。os-instance-actions API中的挂起操作将具有一个Error状态。
  • 使用具有vGPU资源的新风格调整实例的大小不会将这些vGPU分配给实例(实例是在没有vGPU资源的情况下创建的)。建议的解决方法是在调整实例大小后重新构建实例。重建操作为实例分配vgpu。
  • 将实例冷迁移到另一台主机将会遇到与调整大小相同的问题。如果要迁移实例,请确保在迁移后重新构建实例。
  • 救援图像不使用vgpu。被抢救的实例在抢救期间不会保留其vgpu。在此期间,另一个实例可以接收这些vgpu。这是一个已知的问题。建议的解决方法是在救援后立即重新构建实例。但是,只有在主机上有其他空闲的vgpu时,重新构建抢救的实例才有帮助。

http://www.ppmy.cn/news/58443.html

相关文章

vim常用命令总结

vim常用命令总结 (转) 在命令状态下对当前行用 (连按两次), 或对多行用n(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n排版,相当于一般IDE里的code format。使用ggG可对…

Linux:《tar》归档命令

准备好4个文件然后使用tar命令进行归档 最常用的是 -c, --create(小写) 建立新的存档 -f, --file [HOSTNAME:]F 指定存档或设备 (缺省为 /dev/rmt0) -z, --gzip, --ungzip 用 gzip 对存档压缩或解压 -j&…

Java 基础进阶篇(三)—— 面向对象的三大特征之二:继承

文章目录 一、继承概述二、内存运行原理 ★三、继承的特点四、继承后:成员变量和方法的访问特点五、继承后:方法重写六、继承后:子类构造器的特点七、继承后:子类构造器访问父类有参构造器八、this、super 总结 一、继承概述 Jav…

windows的命令行

命令行就是文本交互界面,通过命令行可以使用一个一个的指令来操作计算机 任何的计算机的操作系统中都包含有命令行(windows、linux、macOS) 命令行有多个不同的名字: 命令行、命令行窗口、DOS窗口、命令提示符、CMD窗口、Shell、终…

【LeetCode】64. 最小路径和

64. 最小路径和(中等) 方法一:常规动态规划 思路 定义一个二维 dp 数组,其中 dp[i][j]表示从左上角开始到(i, j)位置的最优路径的数字和。因为每次都只能向下或者向右移动,所以很容易发现 dp数组…

Tkinter正则表达式工具

文章目录 🏳️‍🌈 1. 导入tkinter和re模块🏳️‍🌈 2. 设置窗口居中🏳️‍🌈 3. 设置lable、text、button布局🏳️‍🌈 4. 设置下拉列表框🏳️‍🌈 5. 清空文…

【python】python 操作sqlite 日期的工具类

在Python中,可以使用datetime模块来操作日期和时间。该模块提供了许多方法和属性,使得我们可以方便地创建、比较和格式化日期和时间对象。 在SQLite中,日期和时间被存储为文本字符串,格式为YYYY-MM-DD(日期)和HH:MM:SS.SSS(时间),其中SS.SSS表示秒和毫秒。SQLite还提…

验证二叉搜索树-递归双指针法

1题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a…