vmware ESXi 显卡直通 & Tesla V100 显卡支持环境配置

最近因为一些原因,对公司的机器学习服务器进行了重装,为了减少以后肉身去运维的次数,同时增加服务器的可扩展性,直接在物理机上装上了 ESXi。同时部署内部虚拟网络,增加透明代理。物理机上有4块 2080Ti 和2块 Tesla V100 显卡,通过 ESXi 的显卡直通,直接将 PCIe 设备添加进机器学习所用的虚拟机(看了下 NVIDIA Grid vGPU 的方案坑更多,遂放弃)。这里将这个过程中遇到的坑记录一下。

GPU Server 安装

1. 物理机 BIOS 开启扩展寻址

因为我这里的 V100 显卡单块显存有32GB,结合 nvidia 和 vmware 的相关文档,需要开启 BIOS 的高位宽寻址选项,可参考下图设置

2. 安装 ESXi 6.7 U3 + updates

安装过程比较简单,默认安装即可,这里不做记录。因为之前遇到过 web UI 无法登陆的问题,为了保证不用去物理操作机器,安装完 ESXi 后在管理页面里开启 ssh,在/etc/ssh/keys-root/authorized_keys中添加 ssh 密钥并配置文件权限,更改 sshd 配置中的两条,禁用密码登录。

1
2
3
4
5
6
7
8
[root@localhost:~] cat /etc/ssh/sshd_config

# ......
# 以下两条为修改/新增内容,其他内容不变
PasswordAuthentication no
ChallengeResponseAuthentication no
# ......

重启 ssh 服务

1
[root@localhost:~] /etc/init.d/SSH restart

3. 配置 ESXi 显卡直通

硬件直通的原理示意图大致如下

在管理选项卡的硬件里,过滤出 NVIDIA 设备,并选定相关设备,切换直通属性。

4. 创建虚拟机,将显卡添加至虚拟机设备

首先按正常流程新建一个虚拟机 (兼容性选择 ESXi 6.7虚拟机 就可以)。因为有显卡直通,内存必须配置成预留所有。在虚拟机的虚拟硬件中,逐一添加显卡设备

添加的过程发现,同一台虚拟机不能直通太多的 PCIe 设备,但 2080Ti 显卡如果只直通一个主设备的话,虚拟机会出错。

经过多次试验,发现 2080Ti 设备只添加主设备和第二个设备 (USB 3.1 Host Controller) 时,机器运转正常。这样加上两张 V100,总共10个 PCIe 直通设备添加到虚拟机。

5. 额外的虚拟机参数配置

在虚拟机设置中,添加或修改一些启动变量,配置路径如下图

分别添加以下参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 让N卡认为设备不在虚拟环境中
hypervisor.cpuid.v0 = FALSE

# 关闭vmware默认显卡
svga.present = FALSE # 安装完系统再设置,可能导致ESXi页面里虚拟显示器黑屏

# 打开 64bit 位宽寻址,如果没开这个将识别不到 V100 显卡
pciPassthru.use64bitMMIO = TRUE

# 设置 MMIO 内存大小(这里必须为2的整数次幂 power-of-two)
# 参考 https://kb.vmware.com/s/article/2142307 & https://blogs.vmware.com/apps/2018/09/using-gpus-with-virtual-machines-on-vsphere-part-2-vmdirectpath-i-o.html )
pciPassthru.64bitMMIOSizeGB = 128

# vGPU 支持,看起来是对 Grid 的配置,加上也不影响,参考https://docs.nvidia.com/grid/4.7/grid-vgpu-release-notes-vmware-vsphere/index.html
pciPassthru0.cfg.enable_large_sys_mem = 1

# 设置模式为 IOAPIC,参考 https://www.vmware.com/pdf/vsp_4_vmdirectpath_host.pdf
# 多次查看启动日志,发现这里得把所有直通显卡设备都关了才行
pciPassthru0.msiEnabled = FALSE
pciPassthru1.msiEnabled = FALSE
pciPassthru2.msiEnabled = FALSE
pciPassthru3.msiEnabled = FALSE
pciPassthru4.msiEnabled = FALSE
pciPassthru5.msiEnabled = FALSE
pciPassthru6.msiEnabled = FALSE
pciPassthru7.msiEnabled = FALSE
pciPassthru8.msiEnabled = FALSE
pciPassthru9.msiEnabled = FALSE

配置完成后,可以尝试挂载 iso ,进bios改引导进行系统安装,如果虚拟机启动不成功,可以 ssh 上去在虚拟机目录下 tail -F vmware.log看看哪里出错了,直通设备多启动会比较慢。

初次启动时,可能遇到如下错误:

1
2
3
4
5
6
vcpu-0| W115: CPU microcode update available.
vcpu-0| W115+ The guest OS tried to update the microcode from patch level 67 (43h) to patch level 68 (44h), but VMware ESX does not allow microcode patches to be applied from within a virtual machine.
vcpu-0| W115+ Microcode patches are used to correct CPU errata. You may be able to obtain a BIOS/firmware update which includes this microcode patch from your system vendor, or your host OS may provide a facility for loading microcode patches.APIC CMCI LVT write: 0xf9
vcpu-0| I125: Tools: Tools heartbeat timeout.
vcpu-0| I125: Tools: Running status rpc handler: 1 => 0.
vcpu-0| I125: Tools: Changing running status: 1 => 0.

可以在ESXi设置中禁用microcode更新,路径在管理->系统->高级设置->VMkernel.Boot.microcodeUpdate->FALSE
升级ESXi补丁可以解决这个问题,先从官网搜索并下载最新的补丁包,上传至ESXi,通过esxcli software vib update -d "Patch.zip"安装升级。
(参考官网文档

6. 系统问题

我安装的是 ubuntu 桌面版,安装过程按照正常流程即可,安装完成后可能有以下问题。

intel-microcode

有一个 intel-microcode 软件包的更新,会导致系统重启后卡在黑屏。直接卸载这个软件貌似也没啥影响。

1
root@gpu-ubuntu:~# apt-get --purge remove intel-microcode

nouveau

vmware 的虚拟硬件默认会有一个显卡,会导致系统加载一个 nouveau.ko 的显卡驱动,这个驱动与 nvidia 驱动冲突。

通过将 nouveau.ko 加入黑名单,禁用其加载。

1
2
3
4
5
6
7
8
root@gpu-ubuntu:~# cat <<EOF >> /etc/modprobe.d/blacklist-nouveau.conf

blacklist nouveau
options nouveau modeset=0
EOF

root@gpu-ubuntu:~# update-initramfs -u
root@gpu-ubuntu:~# shutdown -r 0 # 重启生效

7. 待解决问题

N卡驱动安装完之后基本就可以用了,设备列表如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
root@gpu-ubuntu18:~# nvidia-smi
Mon Jan 4 20:17:48 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02 Driver Version: 450.80.02 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla V100-PCIE... Off | 00000000:03:00.0 Off | 0 |
| N/A 36C P0 27W / 250W | 0MiB / 32510MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 GeForce RTX 208... Off | 00000000:04:00.0 Off | N/A |
| 27% 29C P8 15W / 250W | 0MiB / 11019MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 2 GeForce RTX 208... Off | 00000000:05:00.0 Off | N/A |
| 27% 29C P8 15W / 250W | 0MiB / 11019MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 3 Tesla V100-PCIE... Off | 00000000:0B:00.0 Off | 0 |
| N/A 35C P0 25W / 250W | 0MiB / 32510MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 4 GeForce RTX 208... Off | 00000000:13:00.0 Off | N/A |
| 27% 28C P8 3W / 250W | 0MiB / 11019MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 5 GeForce RTX 208... Off | 00000000:14:00.0 Off | N/A |
| 27% 27C P8 1W / 250W | 0MiB / 11019MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+

ESXi 里的 PCIe 设备顺序和这里的对应关系没搞明白,试了好几次都没有把 V100 调整到前面,根据网上的一些资料,目前来看此问题暂时无解。

8. 后续更新

20210816

新添了一块NVIDIA Tesla A100 (40GB) 卡,直通进虚拟机后系统起不来了,查看ESXi中对应虚拟机的日志/vmfs/volumes/[uuid]/[gpu-server],存在如下错误

1
2021-08-16T08:19:19.467Z| vcpu-0| I125: [msg.efi.pciMmioError] The firmware could not allocate 202933248 KB of PCI MMIO. Increase the size of PCI MMIO and try again.

修改虚拟机启动参数中的MMIO选项

1
# pciPassthru.64bitMMIOSizeGB = 256

保存后启动正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.102.04 Driver Version: 450.102.04 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 A100-PCIE-40GB Off | 00000000:03:00.0 Off | 0 |
| N/A 28C P0 31W / 250W | 0MiB / 40537MiB | 0% Default |
| | | Disabled |
+-------------------------------+----------------------+----------------------+
| 1 GeForce RTX 208... Off | 00000000:05:00.0 Off | N/A |
| 30% 38C P8 16W / 250W | 0MiB / 11019MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 2 GeForce RTX 208... Off | 00000000:06:00.0 Off | N/A |
| 29% 37C P8 19W / 250W | 0MiB / 11019MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 3 Tesla V100-PCIE... Off | 00000000:0C:00.0 Off | 0 |
| N/A 29C P0 26W / 250W | 0MiB / 32510MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 4 GeForce RTX 208... Off | 00000000:14:00.0 Off | N/A |
| 28% 39C P8 2W / 250W | 0MiB / 11019MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 5 Tesla V100-PCIE... Off | 00000000:15:00.0 Off | 0 |
| N/A 29C P0 24W / 250W | 0MiB / 32510MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 6 GeForce RTX 208... Off | 00000000:16:00.0 Off | N/A |
| 27% 38C P8 2W / 250W | 0MiB / 11019MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

网络划分

在 ESXi 里增加了一个 OpenWrt 网关作为 GPU Server 的上级路由,参考“VMWARE ESXI 使用单个外网IP地址实现NAT”这篇文章,使用除原 manage network 之外额外的 IP 进行常规网络访问(双 IP 一个给路由 WAN,一个给 manage)

类似下图结构。

本文标题:vmware ESXi 显卡直通 & Tesla V100 显卡支持环境配置

文章作者:

发布时间:2021年01月04日 - 20:01

最后更新:2021年01月04日 - 20:01

原始链接:https://badb100d.com/2021/01/04/2021-01-04/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

谢谢老板打赏 Or2