跳到主要内容

GPU 透传

介绍如何在虚拟机上使用GPU透传设备。

想要 KVM 虚拟机使用 GPU,需要使用的 PCI Passthrough 的方式将宿主机上的 Nvidia/AMD GPU 透传给虚拟机使用。

宿主机设置

除了常规的PCI/PCIe设备透传设置外,为了避免宿主机Linux内核自带的GPU驱动和vfio争抢设备,需要设置如下额外的内核命令行参数:

rdblacklist=nouveau nouveau.modeset=0

同时,需要设置宿主机的 /etc/yunion/host.conf 的 disable_gpu: false(已默认设置)。

GPU相关命令行

创建 GPU 云主机

  • 查询 gpu 列表
$ climc isolated-device-list --gpu
+--------------------------------------+----------+---------------------+---------+------------------+--------------------------------------+
| ID | Dev_type | Model | Addr | Vendor_device_id | Host_id |
+--------------------------------------+----------+---------------------+---------+------------------+--------------------------------------+
| 273f4f72-06b6-49aa-8456-4beceec44997 | GPU-HPC | GeForce GTX 1050 Ti | 41:00.0 | 10de:1c82 | 3bce9607-2597-469f-8d9b-977345456739 |
| a77333e9-08d9-45c6-87eb-a7d8d902c5f5 | GPU-HPC | Quadro FX 580 | 05:00.0 | 10de:0659 | 3bce9607-2597-469f-8d9b-977345456739 |
+--------------------------------------+----------+---------------------+---------+------------------+--------------------------------------+
  • 创建 server

server-create 中的 --isolated-device 参数指定透传的设备到云主机,可以重复使用多次,透传多个 gpu 到云主机,但要求透传到同一云主机的 gpu 必须在同一宿主机。其余创建参数和创建普通云主机是一样的。

$ climc server-create --hypervisor kvm --isolated-device 273f4f72-06b6-49aa-8456-4beceec44997 ...

设置 GPU 设备类型

GPU 设备支持的设备类型有:GPU-HPC,GPU-VGA

  • GPU-HPC: 高性能计算卡(High-Performance Computing),主要用于进行科学计算、数据分析、机器学习等需要大规模并行计算的任务。
  • GPU-VGA: 视频图形处理卡(Video Graphics Array),用于图形渲染和显示的目的。

注意事项 GPU-VGA 类型的 GPU 卡透传给虚机使用时,不在提供模拟的 VGA 设备,需要在镜像内提前安装好显卡驱动。

设置 GPU 卡类型

$ climc isolated-device-update
Usage: climc isolated-device-update [--reserved-mem RESERVED_MEM] [--reserved-storage RESERVED_STORAGE] [--dev-type {GPU-HPC,GPU-VGA}] [--help] [--reserved-cpu RESERVED_CPU] <ID> ...
# example:
$ climc isolated-device-update --dev-type GPU-VGA b46a7374-6da2-46a4-8eda-abd16c502e0b

查询 GPU 云主机

$ climc server-list --gpu

关联 GPU

如果云主机所在的宿主机有可用的 gpu,在主机关机的情况下,可以通过 server-attach-isolated-device 命令将 gpu 和云主机关联起来,下次主机启动后就可以使用该 gpu 。

$ climc server-attach-isolated-device <server_id> <device_id>

卸载 GPU

如果云主机关联了 gpu,可以通过 server-detach-isolated-device 卸载主机的某一 gpu。

$ climc server-detach-isolated-device <server_id> <device_id>