openstack pike版本 gpu透传 设备无法使用

问题

Openstack pike版本下,GPU(NVIDIA 1060)透传至linux虚拟机,发现设备并成功安装驱动,但是nvidia-smi无法执行,报出设备无法使用的错误。

解决

通过网上调查,因为NVIDIA GPU会阻止VM中的驱动加载到GPU上,所以需要在qemu中设置隐藏VM的状态。让GPU无法检测到VM在控制GPU。因此,需要在虚拟机的xml文件中打开kvm hidden选项。

下方有两种方法进行解决:

  • 在dashborad中为镜像添加元数据img_hide_hypervisor_id=true,如下图,然后基于此镜像创建虚拟机即可解决。
    openstack pike版本 gpu透传 设备无法使用另外,在命令行可以使用下述命令进行添加元数据。
    $ . admin-openrc
    $ openstack image list
    #上述命令可以查看镜像ID,在下面命令中替换镜像ID即可
    $ openstack image set ImageID --property img_hide_hypervisor_id=true
    
  • 在源码中进行修改,源码位置/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py。在_set_features函数内部,文件的4486行中,添加
    guest.features.append(vconfig.LibvirtConfigGuestFeatureKvmHidden())
    
    保存退出,并重新将driver.py文件重新编译,替换原有的config.pyc文件。
    python -m py_compile driver.py
    
    完成后重启虚拟机或者整个计算节点的服务,即可发现问题已经解决。