如何在IBM Cloud上使用物理机自建带GPU的虚拟机
最近准备使用GPU的计算资源,听说IBM云平台上的裸机服务器性能不错,于是在IBM公有云平台上注册了一个账号(账号注册还是比较简单的,三步搞定,也是大家一看就明白的操作,我这里就不废话了)。 由于IBM云平台上的基础架构设施,诸如物理机,虚拟机,当然包括GPU资源的这些都属于基础架构一层,他们订购的话需要账号绑定信用卡,所以我联系了IBM相关人员,让他把我加到他们的一个POC测试账号下,这样就可以免费搞一个一个月的机器来使用了。
我们现在有几个项目,想在多种环境下测试多种GPU卡的性能,为最后的选型做准备,IBM平台上的物理机有多个GPU卡型号可选,但是虚拟机就一个型号(V100)而且在某些数据中心,GPU卡的资源还比较紧缺。由于我们想测试多个型号的GPU虚拟机,所以选择了在带GPU的物理机器上自建虚拟机来实现,然后再把GPU资源划分给虚拟机
在IBM云平台上下单含有GPU卡的物理机,我们下面所做的安装设置都是使用Passthrough方式访问的GPU卡,也就是说,一个GPU卡限定只给到单个虚拟机使用,如果你需要在同一台物理机上创建多个含有GPU卡的虚拟机的话,可以在下单物理机的时候选择多张GPU卡。
IBM云平台本身也提供GPU能力的虚拟机,但是有些时候,客户可能需要指定型号的GPU卡,这个时候IBM云平台不一定能提供到你要求的GPU卡的虚拟机,这种情况你可以使用物理机自己构建。
由于现阶段IBM云平台上单个物理机最多只支持两张GPU卡,所以创建的虚拟机也最多仅支持两张GPU卡。IBM在今年下半年会支持多张GPU卡的物理机推出,同时也会推出更多GPU卡的型号,如T4等等,到时单台物理机器可最多容纳8张GPU卡,大大提升了IBM云平台上GPU的能力。
前提:已经在IBM云平台上部署有带GPU卡的物理机
这里我们使用KVM来构建虚拟机,所以安装的是Linux操作系统,我下面的KVM相关操作都是在CentOS7的系统上来进行的。
启用passthrough直通模式:
物理机打开IOMMU功能。编辑配置文件: /etc/default/grub , 在GRUB_CMDLINE_LINUX = “ xxx” 的值中,添加一项intel_iommu=on, 然后运行grub2-mkconfig >/boot/grub2/grub.cfg将配置更新到启动文件,之后reboot,使其生效。这个是内核参数,只有重启才会重新加载内核才能生效。
如果物理机没有安装nvidia驱动的话,比较好处理:直接可以使用
如果已经在物理机上面安装了nvidia驱动的话,在上述过程之前,需要首先将设备从物理机解除绑定,才能够直通给VM,所以还需要下面的一些前期工作:
echo "10de 15f8" >/sys/bus/pci/drivers/pci-stub/new_id
说明:“10de 15f8”这个号是设备ID,在lspci -vnn |grep -i nvidia 的时候,最后一项就是,第一个号码(81:00.0)是PCI ID
echo 0000:81:00.0> /sys/bus/pci/devices/0000:81:00.0/driver/unbind
说明:“0000:81:00.0”为PCI的ID number
echo 0000:81:00.0 > /sys/bus/pci/drivers/pci-stub/bind
说明:“0000:81:00.0”是PCI的ID number
如果没有lspci命令,请执行下面命令安装:
Yum install pciutils
如果上述均执行成功,恭喜你,已经可以在VM中像在物理机使用GPU一样了。
在宿主机上检查并安装KVM虚拟软件:
- 首先验证CPU是否支持虚拟化,输入有vmx或svm就支持,支持虚拟化则就支持KVM
cat /proc/cpuinfo | egrep 'vmx|svm'
有输出,则说明机器支持虚拟化,否则提交工单要求后台启用虚拟化(这一步基本不会出现)
- 查看是否加载KVM,输出如下
[root@openstack ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
如果没有加载则执行以下命令加载KVM
modprobe kvm
- 关闭selinux
#setenforce 0
编辑selinux配置文件
vim /etc/sysconfig/selinux
SELINUX=disabled
关闭SELINUX,以免机器重启后仍然生效
- 安装KVM相关软件包