• Post author:
  • Post category:未分类

搜了半天攻略没想到最后有个大坑,写一下。本文部分文字借用自参考资料

0. 食用本文之前,假设你已经安装好了ESXi 7.0,并在里面装好了Windows虚拟机。本文不包括这一部分

1. 在机箱里装好显卡

2. 在管理—>硬件PCI设备中搜索nvidia,勾选其中一个后,选择切换直通 。这里我遇到一个很扯淡的情况,就是我的2070显示的4个设备里,随便勾选哪一个,四个勾选框就开始疯狂跳动,网页也基本卡死,点不到切换直通,换了浏览器也不行。最后多刷新几次,勾选了过后马上点才点到了。刷新看下,显示“活动”就弄好了。这步完成后不用重启。

3. 打开SSH(主机-操作-服务-启用SSH),然后ssh进入ESXi

3.1 输入 lspci -v | grep NVIDIA -A1 找到显卡

[root@localhost:~] lspci -v | grep NVIDIA -A1
0000:03:00.0 Display controller VGA compatible controller: NVIDIA Corporation TU106 [GeForce RTX 2070]
         Class 0300: 10de:1f02
--
0000:03:00.1 Multimedia controller Audio device: NVIDIA Corporation TU106 High Definition Audio Controller
         Class 0403: 10de:10f9
--
0000:03:00.2 Serial bus controller USB controller: NVIDIA Corporation TU106 USB 3.1 Host Controller
         Class 0c03: 10de:1ada
--
0000:03:00.3 Serial bus controller : NVIDIA Corporation TU106 USB Type-C UCSI Controller
         Class 0c80: 10de:1adb

找到你显卡最主要的那一条,就是有显卡型号的那一条,比如我这里就是第一条。

然后记录下两个信息,

(1) 第一行开始0000开头的数字,比如我这里是 0000:03:00.0

(2) 第二行的Class最后面的两堆数字,比如我这里是 10de 和 1f02

echo '/device/0000:03:00.0/owner = "passthru"' >> /etc/vmware/esx.conf 

echo '10de  1f02  bridge   false' >> /etc/vmware/passthru.map
echo '10de  1f02  link     false' >> /etc/vmware/passthru.map
echo '10de  1f02  d3d0     false' >> /etc/vmware/passthru.map

其中第一个命令里device后面的序号 和 后面命令里前面两列echo的信息,换成你显卡的上面记录的信息。完成后退出SSH,现在仍然不用着急重启。

6. 打开虚拟机设置,重点为

6.1 预留全部内存

6.2 添加高级参数:虚拟机选项——>高级——>编辑配置参数——>添加参数(hypervisor.cpuid.v0:FALSE

6.3 添加显卡进虚拟机:添加其它设备——>PCI设备 ,有多少加多少,比如上面我的显卡是4条,那就添加4个。如果提示不能添加,则需要关闭[虚拟机选项]里的VBS(基于虚拟化的安全性),和关闭CPU选项下面的所有“向客户机操作系统公开***”

7. 重启主机,完成后重启虚拟机。进设备管理器,【显示适配器】一开始可能识别到了,但是没装驱动所以显示出一个很怪的名字,不担心,直接等一会刷新,win10会自动装驱动

8. 上面都是基本公开的攻略。重点来了,下面我遇到的坑。首先虽然在设备管理器里有显卡,任务管理器里也显示,但使用率极低,打开视频或者游戏还是CPU狂装,gpu不动。

解决方案:在显卡上插个显示器,或者插一个显卡欺骗器(淘宝),然后注意,【在win10里面重启电脑】,不要用ESXi控制重启win10。

重启后,win10会检测到两个显示器,只保留其中显卡对应的拿一个。显示设置里,选择【仅在2上显示】,不行就改用另一个。怎么看改好没有——打开任务管理器,查看GPU,点击开始菜单,看看gpu负载上去没有,上去了就对了。否则,重新选一下显示的屏幕

9. 我还遇到另一个问题,就是这之后只要在ESXi里重启了win10,就会识别不出来显卡(任务管理器里没有)。解决也很简单,在win10内部重启一次即可。

10. 后续坑1:没有OpenCL。在GPU-Z里显示OpenCL不可用;passmark跑分也显示OpenCL不可用;命令行直接输入clinfo不报错但完全无输出。查了大量资料过后终于找到了解决(下面参考资料2)

方法:

(1) 在system32下搜索(也可直接用everything搜索)nvopencl,找到nvopencl32.dll和nvopencl64.dll两个文件的路径

(2) 打开注册表编辑器,展开到 HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors 。这里如果Khronos下面没有OpenCL目录,则需要手动添加。在Vendors下添加一个Dword32键

键的名称为上面搜到的nvopencl64.dll的路径,比如我的是C:\Windows\System32\DriverStore\FileRepository\nvmii.inf_amd64_995a8ca55addcada\nvopencl64.dll

键值为0即可

(3) 注册表编辑器展开到 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Khronos\OpenCL\Vendors],添加一个Dword32键

键的名称为上面搜到的nvopencl32.dll的路径,比如我的是C:\Windows\System32\DriverStore\FileRepository\nvmii.inf_amd64_995a8ca55addcada\nvopencl32.dll

键值为0即可

然后命令行输入clinfo就有一大堆信息了,GPU-Z显示OpenCL启用,passmark跑分不报错。

主要参考资料:

  1. https://blog.csdn.net/weixin_45409343/article/details/122478397

  1. Windows: opencl call failed

点击数:67

涉及范围

  1. 复印机、打印机计数芯片再生解码定制。
  2. 粉盒、硒鼓制造。
  3. 机器代码分析服务。
  4. 政企采购综合供应商。

kious

我是一个搬运工,自己有最新的技术 有最新学到的东西都会在这里呈现