4

飞牛私有云fnOS公测版使用vGPU-Grid驱动

发表于:2024-10-9 23:37:54 虚拟机 688
本帖最后由 陪玩 于 2024-10-10 00:12 编辑

前言

近日那个突然爆火的fnOS突然支持了nvidia的GPU驱动
但驱动版本是R560这个分支的,而且还是普通驱动,因此不支持vGPU也是正常现象
最近有许多群友说没vGPU很难受的,反正我自己也要用
所以就尝试弄个


本文不构成医疗建议,不构成任何投资建议,也不作为任何法律法规、监管政策的依据。
折腾有风险,操作需谨慎。

准备工作
提示
任何操作都是有风险的,请提前备份好自己的数据

该做的我都做了,东西编译好了
不需要你自己下载build-essential dkms之类的依赖
然后苦哈哈的自己弄十几分钟

因为我现在在用Grid17.2,因此提供的就是550.90.07版本的驱动
你需要自行检查你的宿主机驱动也是Grid17的
如果是其他Grid版本的话,应该是用不了的
没记错的话nv只对同一个大版本提供兼容性

如果有小朋友需要其他版本的话可以在下面留言
需求多的情况会考虑也提供一下

更新系统与应用

这篇文章使用的是下面版本
如果你的版本不一致可能会出现意料之外的情况


不过这个fnOS一天更新三次,版本不一样也没办法
不强求版本一致,但注意最低版本不能低于截图中的版本

给虚拟机分配mdev

这里以PVE为例,向fnOS虚拟机分配一个vGPU

就跟正常的虚拟机一样分配就行,这步没有特殊操作

上传驱动文件

将如下两个文件上传至fnOS中
  1. nv_grid_merge_fnOS_6.6.38-trim_ko.tar.zst
  2. NVIDIA-Linux-x86_64-550.90.07-grid-vgpu-kvm-patched.run
复制代码

那个zst压缩的是编译好的ko驱动,虽然nvidia有Precompiled打包的方法
Adding Precompiled Kernel Interfaces to the Installer Package
但是这个方法实际上是有坑的,所以我自己是不打算用的

获取驱动文件原始存储位置
fnOS那个文件管理器的界面,可以直接复制原始路径

此处的zst文件在
  1. /vol1/1000/fl/nv_grid_merge_fnOS_6.6.38-trim_ko.tar.zst
复制代码
此处的run文件在
  1. /vol1/1000/fl/NVIDIA-Linux-x86_64-550.90.07-grid-vgpu-kvm-patched.run
复制代码

预配置

获取root权限
使用sudo -i即可切换到root权限
输入你当前用户的密码即可
输入密码时不会有显示是正常现象

有一说一我就没见过哪个发行版输入密码会有反馈的
输入错误的话就再输入几次试试
  1. Linux fnOS-device 6.6.38-trim #7 SMP PREEMPT_DYNAMIC Fri Sep  6 10:17:01 CST 2024 x86_64
  2. Last login: Mon Sep 16 00:46:11 2024 from 192.168.2.233
  3. username@fnOS-device:~$ sudo -i
  4. [sudo] password for username:
  5. root@fnOS-device:~#
复制代码
怎么判断是否是root权限呢?
聪明的小朋友已经发现了
最明显特征就是那个#号

屏蔽nouveau
有一个叫nouveau的开源驱动,如果不屏蔽可能会有一些不必要的麻烦
  1. root@fnOS-device:~# echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau.conf
复制代码
写完配置就行

安装驱动

解压kernel module
还记得刚刚的zst压缩包吗,这里就要用到了
先创建一个目录
mkdir -p /usr/**s/6.6.38-trim_nvidia

然后再把这些ko文件解压进去
zst文件的目录小朋友要根据自己的实际情况修改哦
  1. tar -I zstd -xvf /vol1/1000/fl/nv_grid_merge_fnOS_6.6.38-trim_ko.tar.zst -C /usr/**s/6.6.38-trim_nvidia
复制代码
正常来说终端的回显会是像下面一样
  1. root@fnOS-device:~# mkdir -p /usr/**s/6.6.38-trim_nvidia
  2. root@fnOS-device:~# tar -I zstd -xvf /vol1/1000/fl/nv_grid_merge_fnOS_6.6.38-trim_ko.tar.zst -C /usr/**s/6.6.38-trim_nvidia
  3. nvidia-drm.ko
  4. nvidia.ko
  5. nvidia-modeset.ko
  6. nvidia-peermem.ko
  7. nvidia-uvm.ko
  8. nvidia-vgpu-vfio.ko
复制代码

安装驱动包
执行下面两句脚本即可
这里的run文件位置也要按实际情况修改哦
  1. chmod +x /vol1/1000/fl/NVIDIA-Linux-x86_64-550.90.07-grid-vgpu-kvm-patched.run
复制代码
因为添加了--no-kernel-modules
会出现与正常安装Grid驱动不一样的地方
这个是正常现象

替换fnOS自带的libnvidia-ml.so
使用以下的shell命令,把fnOS的libnvidia-ml替换了
  1. rm /usr/trim/lib/{libnvidia-ml.so,libnvidia-ml.so.1}
  2. ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so /usr/trim/lib/libnvidia-ml.so
  3. ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/trim/lib/libnvidia-ml.so.1
复制代码
如果不替换也可以用,但是fnOS的资源监控不能显示

下载vGPU授权
这个跟正常的Grid驱动下载授权是一样的
所以这里我们不说授权怎么搭,建议参考其他文章
先是创建授权文件夹
  1. mkdir -p /etc/nvidia/ClientConfigToken
复制代码
然后下载授权文件,这步就不需要细说了
下面直接给出终端回显供大家参考
  1. root@fnOS-device:~# mkdir -p /etc/nvidia/ClientConfigToken
  2. root@fnOS-device:~# curl --insecure -L -X GET https://10.1.1.1:443/-/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok
  3.   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
  4.                                  Dload  Upload   Total   Spent    Left  Speed
  5. 100  2694    0  2694    0     0  38915      0 --:--:-- --:--:-- --:--:-- 38485
  6. root@fnOS-device:~# ls /etc/nvidia/ClientConfigToken
  7. client_configuration_token_16-09-2024-01-09-34.tok
复制代码

加载驱动

加载kernel module
只是需要使用Grid驱动功能的话是不需要加载nvidia-vgpu-vfio.ko的
正常来说单卡机器也不需要nvidia-peermem.ko的
使用如下insmod命令即可
  1. insmod /usr/**s/6.6.38-trim_nvidia/nvidia.ko
  2. insmod /usr/**s/6.6.38-trim_nvidia/nvidia-uvm.ko
  3. insmod /usr/**s/6.6.38-trim_nvidia/nvidia-modeset.ko
  4. insmod /usr/**s/6.6.38-trim_nvidia/nvidia-drm.ko
  5. nvidia-smi -pm 1
复制代码
记得切换persistence mode,别忘了这个
好多人会忘记这个的

正常来说ssh回显应该是与如下基本一致
  1. root@fnOS-device:~# insmod /usr/**s/6.6.38-trim_nvidia/nvidia.ko
  2. root@fnOS-device:~# insmod /usr/**s/6.6.38-trim_nvidia/nvidia-uvm.ko
  3. root@fnOS-device:~# insmod /usr/**s/6.6.38-trim_nvidia/nvidia-modeset.ko
  4. root@fnOS-device:~# insmod /usr/**s/6.6.38-trim_nvidia/nvidia-drm.ko
  5. root@fnOS-device:~# nvidia-smi -pm 1
  6. Enabled persistence mode for GPU 00000000:01:00.0.
  7. root@fnOS-device:~# nvidia-smi
  8. Mon Sep 16 01:14:01 2024      
  9. +-----------------------------------------------------------------------------------------+
  10. | NVIDIA-SMI 550.90.07              Driver Version: 550.90.07      CUDA Version: 12.4     |
  11. |-----------------------------------------+------------------------+----------------------+
  12. | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
  13. | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Com** M. |
  14. |                                         |                        |               MIG M. |
  15. |=========================================+========================+======================|
  16. |   0  GRID RTX6000-1Q                Off |   00000000:06:10.0 Off |                  N/A |
  17. | N/A   N/A    P8             N/A /  N/A  |       1MiB /   1024MiB |      0%      Default |
  18. |                                         |                        |                  N/A |
  19. +-----------------------------------------+------------------------+----------------------+
  20.                                                                                          
  21. +-----------------------------------------------------------------------------------------+
  22. | Processes:                                                                              |
  23. |  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
  24. |        ID   ID                                                               Usage      |
  25. |=========================================================================================|
  26. |  No running processes found                                                             |
  27. +-----------------------------------------------------------------------------------------+
复制代码

加载授权
不加载授权的vGPU就是5个奥特曼,众所周知奥特曼只能活动三分钟
这个vGPU未授权是15分钟后就不行了
虽然可以通过配置延长到24小时,但是直接给个授权更方便
之前我们已经把授权下载进机器里面了
因此只需要重启服务即可
  1. systemctl restart nvidia-gridd
复制代码
重启完服务后可以看看服务状态
  1. systemctl status nvidia-gridd
复制代码
正常来说你的回显也应该与下面的差不多
  1. root@fnOS-device:~# systemctl restart nvidia-gridd
  2. root@fnOS-device:~# systemctl status nvidia-gridd
  3. ● nvidia-gridd.service - NVIDIA Grid Daemon
  4.      Loaded: loaded (/lib/systemd/system/nvidia-gridd.service; enabled; preset: enabled)
  5.      Active: active (running) since Mon 2024-09-16 01:16:29 CST; 11s ago
  6.     Process: 3238 ExecStart=/usr/bin/nvidia-gridd (code=exited, status=0/SUCCESS)
  7.    Main PID: 3239 (nvidia-gridd)
  8.       Tasks: 4 (limit: 19156)
  9.      Memory: 4.4M
  10.         CPU: 511ms
  11.      CGroup: /system.slice/nvidia-gridd.service
  12.              **─3239 /usr/bin/nvidia-gridd

  13. Sep 16 01:16:29 fnOS-device nvidia-gridd[3239]: Failed to open file /etc/nvidia/gridd.conf (No such file or directory)
  14. Sep 16 01:16:29 fnOS-device nvidia-gridd[3239]: Failed to open file /etc/nvidia/gridd.conf (No such file or directory)
  15. Sep 16 01:16:29 fnOS-device nvidia-gridd[3239]: Failed to open file /etc/nvidia/gridd.conf (No such file or directory)
  16. Sep 16 01:16:29 fnOS-device nvidia-gridd[3239]: Failed to open file /etc/nvidia/gridd.conf (No such file or directory)
  17. Sep 16 01:16:29 fnOS-device nvidia-gridd[3239]: Failed to open file /etc/nvidia/gridd.conf (No such file or directory)
  18. Sep 16 01:16:29 fnOS-device nvidia-gridd[3239]: Failed to open file /etc/nvidia/gridd.conf (No such file or directory)
  19. Sep 16 01:16:29 fnOS-device nvidia-gridd[3239]: Ignore service provider and node-locked licensing
  20. Sep 16 01:16:29 fnOS-device nvidia-gridd[3239]: NLS initialized
  21. Sep 16 01:16:30 fnOS-device nvidia-gridd[3239]: Acquiring license. (Info: 192.168.2.196; NVIDIA RTX Virtual Workstation)
  22. Sep 16 01:16:31 fnOS-device nvidia-gridd[3239]: License acquired successfully. (Info: 192.168.2.196, NVIDIA RTX Virtual Workstation; Expiry: 2024-12-14 17:16:31 GMT)
复制代码
在nvidia-smi中也能看见授权状态
  1. nvidia-smi -q |grep License
复制代码
上面这个命令的执行力回显应该与下面的结果相似
  1. root@fnOS-device:~# nvidia-smi -q |grep License
  2.     vGPU Software Licensed Product
  3.         License Status                    : Licensed (Expiry: 2024-12-14 17:16:31 GMT)
复制代码

测试
首先需要将系统与影视更新到最新版本
测试飞牛影视
在套件中开启GPU加速
随后尝试播放视频
可见已经使用了vGPU进行加速


如果是下图这种情况,那就是影视套件版本过低
编码方式与解码方式都为空

此时看看系统占用
正常来说应该是如图所示

持久化

有一说一真没啥必要,真要做的话我习惯用service
先写个文件加载ko的
  1. cat <<EOF > /usr/**s/6.6.38-trim_nvidia/load-nv-grid.sh
  2. #!/bin/bash
  3. insmod /usr/**s/6.6.38-trim_nvidia/nvidia.ko
  4. insmod /usr/**s/6.6.38-trim_nvidia/nvidia-uvm.ko
  5. insmod /usr/**s/6.6.38-trim_nvidia/nvidia-modeset.ko
  6. insmod /usr/**s/6.6.38-trim_nvidia/nvidia-drm.ko
  7. nvidia-smi -pm 1
  8. systemctl restart nvidia-gridd
  9. EOF
复制代码
记得给个权限
  1. chmod +x /usr/**s/6.6.38-trim_nvidia/load-nv-grid.sh
复制代码
然后再写个服务
  1. cat <<EOF > /lib/systemd/system/load-nv-grid.service
  2. [Unit]
  3. Description=load-nv-grid
  4. [Service]
  5. ExecStart=/usr/**s/6.6.38-trim_nvidia/load-nv-grid.sh
  6. [Install]
  7. WantedBy=multi-user.target
  8. EOF
复制代码
重载、启用、启动、查看状态,一气呵成
  1. systemctl daemon-reload
  2. systemctl enable load-nv-grid.service
  3. systemctl start load-nv-grid.service
  4. systemctl status load-nv-grid.service
复制代码
如果你本次启动已经insmod过了,服务日志有错误也是正常现象
不过我是觉得没必要持久化的

移除
当你不需要这个,想转投官方套件时
如果做了持久化,那就把服务停了删了
然后
  1. NVIDIA-Linux-x86_64-550.90.07-grid-vgpu-kvm-patched.run -uninstall
复制代码
删除文件
再把
/usr/**s/6.6.38-trim_nvidia这个文件夹删掉
接着还原被替换的libnvidia-ml.so链接即可

结束语

这个fnOS一天三更新,不大适合自己折腾
没准好不容易折腾完,官方就立刻跟进支持了
或者是东西弄完,官方更新直接创死
直接白干好吧


收藏
送赞 4
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

发表回复

评论列表(2)

楼主强!我用的是i5 9500+z390+tesla P4的组合跑all in one,pve8.1的平台,之前vgpu装的是535版本的驱动,虚拟的群晖内的jellyfin可以调用vgpu解码,直通uhd630核显用于photo的人脸识别,装了飞牛后,vgpu可以识别,但是不能解码,只能把uhd630直通给飞牛才能解码,但是这样photos的人脸识别啥的就失效了
2024-10-10 20:31:26 回复
宿主机驱动要跟虚拟机是同一个大版本分支的,不然兼容性有问题 具体表现就是nvidia-smi能认设备但是cuda啊还有带着nvenc之类的都不能工作 更有甚者直接卡死 Grid17的就得用17版本的驱动 535的话是Grid16的  详情 回复
2024-10-10 23:48
宿主机驱动要跟虚拟机是同一个大版本分支的,不然兼容性有问题
具体表现就是nvidia-smi能认设备但是cuda啊还有带着nvenc之类的都不能工作
更有甚者直接卡死
Grid17的就得用17版本的驱动
535的话是Grid16的
2024-10-10 23:48:03 回复