操作环境:
- 设备型号:DELL T5820 工作站
- 底层环境:ESXI 7.0 U3 for Dell Custom
- 操作系统:Centos 7.9
- 显卡型号:Quadro P2000 6G
操作步骤:
1、ESXI硬件管理中,勾选需要直通的显卡,并切换为直通模式。
2、关闭虚拟机,在编辑设置中添加PIC设备,选择已直通的显卡信息。
3、 配置虚拟机显卡设置参数
在编辑设置——虚拟机选项——编辑配置中搜索vga(Scalable Graphics Adapter | 可扩展图形适配器)关键词,将 svga.present的值修改为FALSE(关闭内置的虚拟显卡),将 svga.autodetect的值修改为 TRUE(开启显卡自动检测)。
4、 进入虚拟机,检查显卡是否被系统识别
lspci | grep NVIDIA
5、检查系统是否开启 nouveau 驱动
(Nouveau 是一个开源项目,旨在为 NVIDIA 图形处理器提供高质量的自由软件驱动程序。它由 Linux 内核中的 KMS 驱动(nouveau),Mesa 中的 Gallium3D 驱动,以及 Xorg DDX(xf86-video-nouveau)组成。这个项目的目标是提供对 NVIDIA 显卡的完整支持,包括 2D/3D 加速、视频解码加速等功能。Nouveau 驱动程序是通过逆向工程 NVIDIA 的专有驱动程序开发的,因此它不受 NVIDIA 官方的支持。)
lsmod | grep nouveau # 有输出代表已启用
6、 禁用 nouveau 驱动
vim /lib/modprobe.d/dist-blacklist.conf
将 nvidiafb 配置注释掉。
# blacklist nvidiafb
添加以下配置
blacklist nouveau
options nouveau modeset=0
7、 重建 initramfs image
( initramfs 是一个临时的文件系统,其中包含了必要的设备如硬盘、网卡、文件系统等的驱动以及加载驱动的工具及其运行环境,比如基本的C库,动态库的链接加载器等。)
# 备份一下
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# 更新
dracut /boot/initramfs-$(uname -r).img $(uname -r) --force
8、将重建的 initramfs 同步至内核
# 安装依赖
yum install -y vim wget yum-util net-tools epel-release gcc gcc-c++ make dkms
# 同步至内核
yum install -y "kernel-devel-uname-r == $(uname -r)"
9、重启系统使配置生效
reboot
10、再次验证 nouveau 驱动是否已禁用
lsmod | grep nouveau # 没输出代表禁用生效
11、下载显卡驱动和CUDA计算驱动
下载地址:https://www.nvidia.cn/Download/Find.aspx?lang=cn
wget https://cn.download.nvidia.com/XFree86/Linux-x86_64/535.104.05/NVIDIA-Linux-x86_64-535.104.05.run
wget https://developer.download.nvidia.cn/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run
12、安装NVIDIA驱动
# 给run文件可执行权限
chmod u+x NVIDIA-Linux-x86_64-535.104.05.run
# 安装 ,只安装驱动文件,不安装OpenGL文件
./NVIDIA-Linux-x86_64-535.104.05.run –no-opengl-files
安装时一些常用参数:
- -no-x-check:这个参数用于告诉 NVIDIA 驱动程序在启动时不要检查 X.Org(Linux 系统中最常用的显示服务器)是否正在运行。在某些情况下,系统管理员可能希望在没有运行 X.Org 的情况下使用 NVIDIA 驱动程序,例如在运行命令行界面或使用其他显示服务器时。
- -no-nouveau-check:这个参数用于阻止 NVIDIA 驱动程序检查系统中是否存在开源的 Nouveau 驱动程序。Nouveau 是 NVIDIA 显卡的开源驱动程序,但有时用户可能希望安装并使用 NVIDIA 的专有驱动程序而不是开源驱动程序。使用这个参数可以避免驱动程序之间的冲突。
- -no-opengl-files:这个参数用于指示 NVIDIA 驱动程序在安装时不要替换系统的 OpenGL 库文件。OpenGL 是用于渲染 2D 和 3D 矢量图形的跨语言、跨平台的应用程序接口(API)。在某些情况下,系统管理员可能不希望 NVIDIA 驱动程序覆盖系统默认的 OpenGL 实现。
13、安装显卡驱动
① 在没有X.Org的情况下使用命令行方式进行安装,点击 OK
② 是否要安装 NVIDIA 的 32-bit 兼容性库?选择 NO,
然后会弹出提示安装64位的,选 YES。
③ 否要将内核模块源代码注册到 DKMS(Dynamic Kernel Module Support)?选择YES。
- 选择 “Yes” 允许 DKMS 自动为你的 NVIDIA 驱动程序模块构建新的版本,以匹配新安装的内核。这样做的好处是,当你的系统内核更新后,DKMS 将自动重建 NVIDIA 驱动模块,以确保驱动程序与新内核兼容。
- 选择 “No” 意味着你将不会注册内核模块源代码到 DKMS。如果你不使用 DKMS,那么在内核更新后,你可能需要手动重新安装 NVIDIA 驱动程序,以确保它与新内核兼容。
什么是 DKMS :
如果要问 Linux 内核模块如何发布、安装。脑回路的第一反应肯定是 make && insmod。
上述方法可以满足嵌入式场景,因为嵌入式产品的软件是整体发布,包括:内核、模块、软件等交付件。但是在 PC/服务器 领域,各个组件都是互相独立的,如果一个模块基于内核 A 编译并发布,那用户更改内核后,之前发布的内核模块就不能用了。
所以,DELL 发布了 DKMS,全称 Dynamic Kernel Module System。可以做到内核变更后自动编译模块,适配新内核
④ 是否要运行 nvidia-xconfig 工具来自动更新你的 X 配置文件?选择 YES。
- 选择 “Yes” 将会执行以下操作:
- nvidia-xconfig 工具会被运行,它会自动更新 /etc/X11/xorg.conf 文件(或者对应于你使用的显示服务器的配置文件)。
- 如果该配置文件已经存在,nvidia-xconfig 会创建一个备份副本,通常是在文件名后加上一个 .backup 后缀。
- 更新后的配置文件会包含必要的设置,以便在启动 X 服务器时使用 NVIDIA 驱动程序。
- 选择 “No” 意味着你将不会立即更新 X 配置文件。这可能是因为你想要手动编辑配置文件,或者你想要在不同的配置文件之间进行选择,或者你有其他特定的配置需求。
⑤ 提示Your X configuration file has been successfully updated表示安装成功。 选择 OK。
14、安装CUDA驱动
./cuda_12.2.2_535.104.05_linux.run
① 输入 accpet 按回车。
② 用空格键取消勾选 Driver ,因为前面已经完成显卡驱动安装,然后移动到 Install 进行安装。
③ 返回安装成功,以及提示需要额外配置的环境变量
④ 按要求配置环境变量
# 添加系统全局变量
cat >> /etc/profile << 'EOF'
export CUDA_HOME=/usr/local/cuda-12.2
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}
export PATH=${CUDA_HOME}/bin:${PATH}
EOF
# 环境生效
source /etc/profile
15、验证驱动及CUDA套件.
nvcc -V
nvidia-smi
16、最后进入应用内,检验显卡调用情况(这里我用的是 EMBY),显示已全部检测到显卡驱动。