Ubuntu解锁N卡VGpu记录以及DLC
前言:
把N卡解锁VGPu好处基本就是host DockerENvCu118和KVM-Guset-windows等都可以使用Cuda而且性能基本没什么损失,大概只支持包含20系以下的显卡,30系安培代码里包含,支持不支持我不清楚.
开搞:
根据这位写的做的:https://bytehorizon.net/archives/crystalast/74/
概况就是下驱动,打补丁合并融合,建立服务,原来地址复制有水印,我直接拿过来做个记录
我的环境:
Ubuntu 22.04.2 LTS
12400FOC4.9G 2080TI-22G
没什么好说的:
- apt update && apt upgrade -y
- apt install -y git build-essential dkms unzip python3-pip mdevctl jq -y
- pip3 install frida --break-system-packages
复制代码
下工具和补丁:
- git clone https://github.com/VGPU-Community-Drivers/vGPU-Unlock-patcher.git -b 525.105 --recursive
- git clone https://github.com/mbilker/vgpu_unlock-rs.git
复制代码
开启IOMMU和加载VFIO模块 PASS
- 编辑 /etc/default/grub ,添加下面的参数,开启iommu。
- # Intel处理器写入下面内容
- GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"
- # AMD处理器写入下面内容
- GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on"
复制代码
禁止N卡开源驱动为了安装解锁后的驱动 PASS
Ubuntu不加载开源驱动照样可以显示界面,无所谓,不用担心只能用命令行.
- echo "blacklist nouveau" >> /etc/modprobe.d/disable-nouveau.conf
- echo "options nouveau modeset=0" >> /etc/modprobe.d/disable-nouveau.conf
- update-initramfs -u
- reboot now
复制代码
更新Rust,反正我更新了
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
复制代码
Grid驱动难搞要注册,烦!直接从这里下
- 此Github仓库有本文对应的NVIDIA GRID 15.2(525.105)驱动,下载 Linux-KVM 后缀的驱动包。
- https://github.com/justin-himself/NVIDIA-VGPU-Driver-Archive/releases
- 解压下载下来的驱动包,将解压后的 Host_Drivers 文件夹里面的 NVIDIA-Linux-x86_64-525.105.14-vgpu-kvm.run 移动到 vGPU-Unlock-patcher 下。
复制代码
下消费显卡驱动
- wget https://download.nvidia.com/XFree86/Linux-x86_64/525.105.17/NVIDIA-Linux-x86_64-525.105.17.run
复制代码
移动到vGPU-Unlock-patcher文件夹下
目录文件分布大概这样:
- doc
- nsigpatch.c
- NVIDIA-Linux-x86_64-525.105.14-vgpu-kvm.run
- NVIDIA-Linux-x86_64-525.105.17.run
- patches
- patch.sh
- README.md
- unlock
复制代码
vGPU-Unlock-patcher下执行命令,22.04STL更新完内核5.19所以直接执行:
- ./patch.sh general-merge
- 如果你的内核是6.1~6.3版本的,可以尝试下列选项:
- ./patch.sh --lk6-patches general-merge
复制代码
生成NVIDIA-Linux-x86_64-525.105.17-vgpu-kvm-merge-patched目录,进入执行:
- ./nvidia-installer --dkms
复制代码
一路无脑yes
- 安装和配置vgpu_unlock-rs
- 进入到 vgpu_unlock-rs 目录后,输入下面命令:
- cargo build --release
- cp './target/release/libvgpu_unlock_rs.so' /usr/local/lib
复制代码
------------
- 为了让NVIDIA驱动使用vgpu_unlock,这里修改NVIDIA驱动的Systemd服务文件:
- mkdir /etc/systemd/system/nvidia-{vgpu-mgr,vgpud}.service.d
- echo '[Service] \
- Environment=LD_PRELOAD=/usr/local/lib/libvgpu_unlock_rs.so' | tee /etc/systemd/system/nvidia-{vgpu-mgr,vgpud}.service.d/vgpu_unlock-rs.conf > /dev/null
- 完成上面的操作后,运行下面命令将两个服务设置为开机运行:
- systemctl enable nvidia-{vgpu-mgr,vgpud}.service
复制代码
以上命令生成的了两个服务文件长这样:
两个vgpu_unlock-rs.conf内容:
- [Service]
- Environment=LD_PRELOAD=/usr/local/lib/libvgpu_unlock_rs.so
复制代码
重启
- mdevctl types
复制代码
生成一堆内容:
- .............
- nvidia-262
- Available instances: 1
- Device API: vfio-pci
- Name: GRID RTX6000-12Q
- Description: num_heads=4, frl_config=60, framebuffer=12288M, max_resolution=7680x4320, max_instance=2
- ............
复制代码
如果没输出就要尝试重启服务:
- systemctl restart nvidia-{vgpu-mgr,vgpud}.service
复制代码
反正反正选Q系列,我选择了上面那个RTX600-12Q 代表12G显存,然后执行命令:
- uuidgen
- 67b12fbc-dd76-4dd5-9bc4-f216190801d6
- mdevctl start -u 67b12fbc-dd76-4dd5-9bc4-f216190801d6 -p 0000:01:00.0 --type nvidia-262
- mdevctl define -a -u 67b12fbc-dd76-4dd5-9bc4-f216190801d6
复制代码
这个基本上就完事了:建立KVM虚拟机时候,添加MDEV Host Device就可以了,然后解决授权问题,这里KVM虚拟机选择default nat网络默认那个就行,windows驱动在下载那个驱动包里Guset_Drivers文件夹中
授权要申请,烦,直接docker拿现成的:
- docker run --name dls -d -e DLS_URL=192.168.122.1 -e DLS_PORT=1234 -p 1234:443 makedie/fastapi-dls
- docker update --restart=always dls
复制代码
这个192.168.122.1就是default nat虚拟网络的host地址
- 让虚拟机的GRID驱动获取许可
- 在虚拟机内,使用刚才填的DLS_URL和DLS_PORT访问容器并下载Token,例如上面的例子就是:
- https://192.168.122.1:1234/client-token
- 注意!在写地址时一定要加上HTTPS后缀,否则无法访问!
- Windows下,把下载的token文件放进虚拟机的 C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken 文件夹内,然后重启 NvContainerLocalSystem 服务。
复制代码
DLC部分:
但是如果你要跑3d程序你会发现一个问题,被限制在60帧,用以下命令解锁,有需求就加入启动命令行进行固化:
- echo "frame_rate_limiter=0" > /sys/bus/mdev/devices/67b12fbc-dd76-4dd5-9bc4-f216190801d6/nvidia/vgpu_params
复制代码
uuid根据自己需求改写
Linux可以降压超频达到小飞机拉平曲线的效果,三个命令结合在一起,示例如下:
- nvidia-settings -a '[gpu:0]/GPUGraphicsClockOffset[4]=260'
- nvidia-settings -a '[gpu:0]/GPUMemoryTransferRateOffsetAllPerformanceLevels=2000'
- nvidia-smi --lock-gpu-clocks=300,1875
复制代码
加入到启动命令中就可以固化
windows免费的远程控制软件推荐:RustDesk,512M内存用一键脚本自建一个debian Rust中继服务器就行,安装时候注意清空那个下载文件,他脚本写的时候没考虑过下载失败改怎么办.
End;