Synology 群晖 Nvidia vGPU 实践指南

更新信息

20230902: 修复所有机型显示GPU使用/统计情况。

20230827: 修复重启机器后docker可能不正常的现象,修复可能发生的驱动不正常现象。

20230826:物理群晖DS918+显卡1050、p4、40hx、2080、2080ti测试成功,DS1821+白群+1650测试失败(暂未计划支持)。

20230818:支持所有X86,4.0机型vGPU,直通(DVA3221,DVA3219)。对于直接物理群晖安装暂未适配(但可能是支持的)。 已测试支持机型: DVA3221,DVA3219(秀儿),DS918+,DS923+;期待各位朋友的测试和补充。

20230812:理论支持DVA机型vGPU,直通,以及物理群晖,等待更多数据验证。

计划
初版的各种bugfix。
40hx的系统玩法测试。
尝试支持更多的群晖验证。
pascal版本的群晖AI功能。
turing版本的群呼AI功能。
结论
先说结论,目前在DVA3221平台上,适配了vGPU 14.4(510.108.03)版本,底层需要使用>=(510.108.03)的版本(也即是510~535理论都可以用),群晖中需要安装本驱动。在tesla P4和2080Ti进行了测试,测试项目包括,(docker、openGL、编解码、群晖AI识别),由于DVA3221 的Photos不会使用GPU,所以该包不影响该功能,目标:

Pascal:包大小350MB附近,无法使用群晖监控的AI功能,其他正常。
Turing:包大小750MB附近,可以完整使用所有群晖的GPU功能。
目前关于AI监控还存在一些没有定论的问题,请稍后整理结论再分享。

关键词:群晖 synology 英伟达 nvidia vGPU 虚拟GPU GPU共享

前言
最近佛西群的群友在讨论群晖是否可以使用Nvidia vGPU用于转码,人脸识别,AI等任务,看讨论结果好像是目前不可以。正好我对群晖的系统颇有好感,且对vGPU兴趣浓厚,所以在佛西群主、秀儿和几位大佬的支持下开始了探索行动。经过两个周末和一些零碎时间的探索,对于群晖支持vGPU已有一个明确的定论 -> 支持,但存在一些限制;探索过程曲折漫长,想必各位网友并不关心这个过程,所以我直接切入主题,从安装开始讲起。

安装过程
先简述一下安装流程:

PVE/ESXi/Unraid等Host创建群晖虚拟机(此时请不要将vgpu分配给虚拟机)。
正常安装群晖虚拟机。
卸载系统自带的NVIDIARuntimeLibrary(如果有)
安装皮蛋熊提供的驱动(vgpuDaemon fix & stop & start)
关闭群晖虚拟机。
将vgpu分配给群晖虚拟机,然后启动群晖虚拟机。
注意:如果已经安装过本驱动并使用中,要升级最新版本的驱动需要按照下面步骤进行:

卸载本驱动(非常重要,需要先卸载)
安装皮蛋熊提供的更新版本的驱动(vgpuDaemon fix & stop & start)
即可正常使用
下面详细讲述安装步骤。

环境准备
配置介绍: CPU:Intel i5-10400F 内存:32G DDR4 2400MHz 显卡:tesla P4 & 2080Ti 系统:Proxmox VE 7.4

在这套硬件平台上安装了PVE虚拟化环境,并使用 vgpu_unlock 项目,该项目使得消费级显卡比如2080Ti的环境下也可以体验Nvidia vGPU。

注:关于安装PVE和vgpu_unlock,可参考佛西大佬的博客。

群晖安装
在PVE中创建虚拟机,并正常安装群晖DVA3221,这里的教程可以参考大部分的PVE使用ARPL安装群晖的教程,可以在张大妈上搜一下。 特别提醒:

如果要使用群晖监控,请准备好正确的序列号,不然安装后授权是0。
群晖系统安装时,请不要将vGPU传递给群晖虚拟机。
驱动安装
群晖正常安装完成后,会自己安装NVIDIARuntimeLibrary和Surveillance,需要先对其进行卸载。如果你是第一次安装,大概率会因为没有创建存储而不会安装。所以此时创建了存储即可安装该vGPU驱动包。 如果在已有群晖数据的硬盘上重装了系统,此时系统默认会安装NVIDIARuntimeLibrary和监控,这里需要等待其安装完毕后,确认监控的可用路数是否正确(是0的话是序列号有误);一切正常后即可删除NVIDIARuntimeLibrary和监控,然后安装本驱动包。

到这一步时,请修改为你的授权服务器地址(还没搭建?可以参考佛西大佬的博客) 来自民间的VGPU授权fastapi-dls

安装完成后可看到新安装的驱动:

安装完成后打开系统的SSH功能:

然后使用ssh工具连接群晖系统,输入sudo -i输入密码后即可切换root账户,输入vgpuDaemon fix即可修复权限。

此时进入套件中心,停用本套件,然后紧接着启用本套件,即可开启正常使用vGPU驱动,在终端中输入nvidia-smi命令即可验证。

此时群晖系统也可以正常识别到GPU的相关信息:



docker安装
如果系统原来就已经安装了docker(Containe rManager)套件,此时只需要停止下该套件,然后重新启动该套件即可。 如果系统是新的,没有安装Container Manager套件,此时需要先安装该套件;安装完成后,将本套件停止再启动。 但如果想要让docker版本的Emby使用vGPU驱动,那么需要在ssh下以root用户下输入启动指令(需要删除每行 # 后面的内容)启动容器:

docker run \
--network=bridge \ #设置网络模式
-p '8096:8096' \ #映射http端口
-p '8920:8920' \ #映射https端口
-v /volume1/docker/jellyfin:/config \ #映射配置目录
-v /volume1/video/:/media \ #映射媒体库目录
-e TZ="Asia/Shanghai" \ #设置时区为上海
-e UID=1026 \ #设置用户id -> 可以使用对应用户权限
-e GID=100 \ #设置用户组id
-e GIDLIST=0 \ #设置权限
--restart always \ #在Docker服务重启时,自动重启此容器
--runtime=nvidia \ #映射NVIDIA显卡
-e NVIDIA_VISIBLE_DEVICES=all \ #映射NVIDIA显卡
-e NVIDIA_DRIVER_CAPABILITIES=all \ #映射NVIDIA显卡
-e UMASK=000 \ # 设置访问文件的权限
--name jellyfin \ #容器名称
-d jellyfin/jellyfin:latest
这里新增的三条指令表示使用nvidia驱动,其他Plex和Emby等需要使用GPU的程序也是在原有的基础上添加这三句:

--runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
比如Emby可以使用下面命令启动:

docker run \
--network=bridge \ #设置网络模式
-p '8096:8096' \ #映射端口
-v /volume1/docker/emby:/config \ #映射配置目录
-v /volume/video/:/media \ #映射媒体库目录
-e TZ="Asia/Shanghai" \ #设置时区
-e UID=1026 \ #设置权限
-e GID=100 \ #设置权限
-e GIDLIST=0 \ #设置权限
--restart always \ #在Docker服务重启时,自动重启此容器
--runtime=nvidia \ #映射NVIDIA显卡
-e NVIDIA_VISIBLE_DEVICES=all \ #映射NVIDIA显卡
-e NVIDIA_DRIVER_CAPABILITIES=all \ #映射NVIDIA显卡
-e UMASK=000 \ #设置权限
--name emby \ #容器名称
-d emby/embyserver:latest
比如Plex可以使用下面命令启动(具体意思对照上面的文档):

docker run -d \
  --name=plex \
  --net=host \
  -e PLEX_UID=1026 \
  -e PLEX_GID=100 \
  -e TZ=Asia/Shanghai \
  -e VERSION=docker \
  -v /volume1/docker/plex:/config \
  -v /volume1/video/:/media \
  --runtime=nvidia \
  -e NVIDIA_VISIBLE_DEVICES=all \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  --restart unless-stopped \
  plexinc/pms-docker
确保上述指令的正确性,关于上述其他指令的意思,可以通过网络进一步查询。 上面指令执行:

执行完成后该界面无报错就意味着完成了,可在群晖的Container Manager中看到新建的容器。 进入jellyfin中开启NVIDIA解码即可看到。


同样,在emby中也可以开启硬解:


几个问题
问1:为何选择DVA3221平台,而不选择其他如3617XS、DS918+等平台? 答1:因为DVA3221原生提供了Nvidia GPU支持,系统中多处都对GPU的状态进行了展示,且监控默认包含8个授权,同时监控也可以选择使用AI等功能。

问2:相比官方原版和矿神大佬修改的版本有什么不同之处? 答2:

官方原版支持的功能,该版本都支持;
显卡vgpu功能开启后,可多个虚拟机共享GPU算力,比直通更高效利用GPU;
该版本的编解码支持更为完善,jellyfin、emby、plex的最新版本均可正常开启硬解;
集成了docker runtime,启动上述媒体服务器时参数更为简单。
没有原版存在的GDDR6限制,vGPU 14.4宣称支持的显卡,均可正常使用。
包
目前2080Ti的vGPU功耗问题似乎还没有一个很好的结论,再者AI功能似乎存在一些问题,所以这里先分享把不包含群晖AI监控的驱动。 关于AI监控所需的功能都测试完成后会一并附上结论并将包释放出来。

包呢?我人比较懒,直接放群共享了,需要的加群下载就可以了,每次更新上传网盘再来修改链接有点烦。 矿神源里面也有一份,可以直接根据本文教程使用,但这驱动文件一般比较大,担心矿神腰包顶不住的CDN费用的可以去群文件里面下载。

致谢
感谢佛西群的多位大佬指导,感谢佛西大佬送的五香牛肉干和kxxxm送的酸酸乳。

帮助
我一个人能力有限,没有更多的显卡数据,希望得到各位的帮助,帮忙做一些测试,以便更好的完善该驱动。

遇到的问题答复
重启后因套件启动慢,而docker或者emby套件启动快,导致这两个套件无法使用GPU。(2023.08.27修复docker,其他套件信息需要更多测试)
解决办法:

手动重启一下无法使用GPU的套件(docker或者emby等)。
使用稍微修改一下下面脚本,放到计划任务开机启动即可。
最近比较忙,等我抽空修改一下,下一次更新优先修改这个。
!/bin/bash

sleep 30
bash /var/packages/ContainerManager/scripts/start-stop-status stop;
bash /var/packages/ContainerManager/scripts/start-stop-status start;
或者 (来自矿神)

synopkg stop ContainerManager
synopkg start ContainerManager
某些白裙搭配某些显卡无法使用该驱动
解决办法:

等待群晖适配新的显卡驱动
我可接单适配,因为白裙的孱弱性能,搭配高级显卡,我实在不知道啥应用场景,我自己也没这需求,太小众了。
某些黑裙直通搭配某些显卡无法使用该驱动
解决办法:

我没遇到,目前主流的黑裙+P4、2080Ti、40Hx、1050都测试支持。
群晖没理由需要那么强,那么新的显卡,群晖可以干的活一般1050Ti顶够了,其他需求建议使用ubuntu代替,实在有特殊需求可接单适配。
重启后套件/docker无法使用GPU,但可以看到GPU被占用(2023.08.27修复docker)
解决办法:

由于长时间没有下载回来授权导致,建议换一个自己本地搭建的授权服务器,参考地址 来自民间的VGPU授权fastapi-dls
下一版本会修复该问题。


THE END