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>