ESXi对普通消费级显卡直通的支持度不是很好,高版本的内核和驱动可能造成直通失败或报错。折腾了一下午,看了大量教程,终于使用ESXi6.7成功将显卡直通给了Ubuntu。
0、硬件直通
左侧导航器-主机-管理,选项卡找到硬件,确保PCI设备中显卡的直通为活动。如果不是活动,点击上面的切换直通,并重新引导ESXi即可
1、ESXi打补丁
注册账号,登录到这里:产品补丁程序 - VMware Customer Connect,下载最新的补丁。如果之前没有注册过账号,下载前可能需要注册账号。注册账号的时候输入中国地址和邮编大概率会报错,可以改成美国的地址和邮编。邮箱填自己的就行
找个地方上传到ESXi任意的硬盘内
打开SSH
登录ssh,执行命令:
esxcli software vib update -d /vmfs/volumes/SSD1/ESXi670-201912001.zip
注意将/vmfs/volumes/SSD1/esxi670-201912001.zip中的SSD1换成你的存储设备名称,esxi670-201912001.zip换成你下载的补丁包名称
执行需要一定的时间,执行完毕后重启。
此外,你还需要确保宿主机bios的VT-d、Above 4G decoding、Memory mapped I/O above 4GB 或 PCI 64-bit resource handing above 4G处于enable状态。
2、ESXi创建虚拟机
Ubuntu尽量选择20.04。我下载的是ubuntu-20.04.6-live-server,内核版本为5.4.0-147-generic
创建虚拟机时这些配置需要改动:
预留全部内存
添加PCIe显卡设备
上方选项卡切换到虚拟机选项,引导选项中固件修改为EFI。如果你的独显直通给Windows10/11系统工作正常,而直通给Linux提示找不到设备,检查这里是否选择正确。如果之前是bios且已经安装好系统,则需要将其转成uefi,具体方法详见百度
选择高级-编辑配置
添加三个参数:
-
hypervisor.cpuid.v0值为FALSE
-
pciPassthru.use64bitMMIO值为TRUE
-
pciPassthru.64bitMMIOSizeGB值为24(这个数字填写2*GPU显存总量。例如我的3060显存12G,这里填写24即可)
OK,到这里可以保存并开机了,进入Ubuntu安装过程。
3、驱动安装
先执行lspci | grep VGA确保Ubuntu的pci设备中有显卡
ESXi不支持≥470的驱动,建议安装460和465版本的
465版本驱动下载点:Linux x64 (AMD64/EM64T) Display Driver | 465.24.02 | Linux 64-bit | NVIDIA
460版本驱动下载点:Linux x64 (AMD64/EM64T) Display Driver | 460.91.03 | Linux 64-bit | NVIDIA
下载run文件后su用户运行,一路回车即可
4、安装CUDA、cuDNN、libcudnn
安装前用nvidia-smi命令看看显卡是否正常识别,如果不识别,提示no device were found,可以用dmesg看看报什么错误,可以重启宿主机试试
如果正常识别,在这里下载CUDA:CUDA Toolkit 12.1 Update 1 Downloads | NVIDIA Developer
我使用的是CUDA11.3。下载run文件安装即可。注意,中间有个选择是否安装驱动的地方:
千万不要安装,千万不要安装,千万不要安装,否则显卡会不识别!!如果你已经不慎安装了,可以按照上述方法重新安装驱动,重启宿主机后方可。
在这里下载cuDNN:cuDNN Archive | NVIDIA Developer
我使用的是8.8.1.3版本。注意cuDNN和CUDA版本的对应关系,不要下错。下载deb文件后使用dpkg -i安装即可
在这里下载libcudnn(解决libcudnn.so.8找不到的问题):Index of /compute/cuda/repos (nvidia.cn)
下载后使用dpkg -i安装即可。
好东西,学习学习。
宿主机是windows 10吗
主板两张显卡,直通win11可以输出画面,但另一个直通到ubuntu安装好驱动不显示画面,还会把整个主机卡死。这是为啥呀
请教一下,esxi也能直出画面到显示器,比如通过把显卡直通到Windows10