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 下一版本会修复该问题。
版权声明:
作者:隔壁小色
链接:https://www.fanooo.com/archives/312
文章版权归作者所有,未经允许请勿转载。
THE END