HOOOS

N100 部署 PVE 8.1:用 SR-IOV 虚拟显卡完美搞定黑群晖 Photos 人脸识别与 Plex 硬解转码

0 14 极客极简 PVE 81SR-IOV黑群晖
Apple

在单台轻量级服务器(如搭载 Intel N100 处理器的小主机)上,既想让 PVE 主机保留控制台输出,又想让黑群晖(DSM)实现独占般的显卡硬件加速(用于 Plex/Jellyfin 转码和 Synology Photos 人脸识别),传统的 PCIe 直通(Passthrough) 显然无法满足多虚拟机共享显卡的需求,而已经过时的 GVT-g 在 11 代及以后的 CPU 上也不再受支持。

目前最完美的方案是利用 SR-IOV(Single Root I/O Virtualization) 技术,将 N100 的 UHD 核显虚拟出多个独立的 VF(Virtual Function)子显卡,分别分给黑群晖、iStoreOS 或 Windows 虚拟机。

以下是基于 PVE 8.1(Kernel 6.5/6.8) 物理机,将 SR-IOV 虚拟显卡分给**黑群晖 DSM 7.2.x(推荐 SA6400 机型)**并激活硬件加速与人脸识别的完整实操指南。


准备工作与避坑说明

  1. 主板 BIOS 设置:进入 BIOS,务必开启 VT-dSR-IOV,并将 Internal Graphics 设为 Enabled(不要设为 Auto),Primary Display 设为 IGFX
  2. 黑群晖机型选择:由于 N100(Alder Lake-N)属于 12 代架构,传统的 DS918+/DS920+(内核版本仅 4.4)无法完美驱动该核显。强烈建议使用 SA6400 机型,其采用 5.10+ 内核,对新一代 Intel 核显及 SR-IOV 虚拟显卡的兼容性极佳。
  3. 引导工具:推荐使用 Arc LoaderRR Loader (Redpill-Relation),它们内置了较新的显卡驱动组件(如 i915 驱动补丁)。

第一步:PVE 宿主机配置 SR-IOV 驱动

由于 Intel 官方 Linux 内核主流分支尚未完全合并 12 代核显的 SR-IOV 开启脚本,我们需要借助社区维护的 DKMS 驱动模块。

1. 修改 GRUB 开启 IOMMU 与核显 GUC/WUC

编辑 PVE 的 grub 配置文件:

nano /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT 行,修改或添加以下参数(开启 IOMMU 支持、启用核显 SR-IOV 所需的 GuC/HuC 加载):

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7"

注:max_vfs=7 表示最多虚拟出 7 个 VF 子显卡。

更新 GRUB 并重启 PVE:

update-grub
reboot

2. 安装编译依赖与 i915 SR-IOV DKMS 驱动

重启后,安装当前内核对应的头文件和编译工具:

apt update
apt install -y pve-headers-$(uname -r) build-essential dkms git

克隆目前对 6.5/6.8 内核支持较好的第三方 SR-IOV 驱动仓库(推荐 strongtz/i915-sriov-dkms):

cd /usr/src
git clone https://github.com/strongtz/i915-sriov-dkms.git i915-sriov-dkms-2023.12.21

注:请根据你克隆时的分支版本,重命名文件夹以符合 dkms 规范(格式为 i915-sriov-dkms-<版本号>)。

创建 dkms.conf 或使用仓库内自带的配置文件,然后添加并编译该驱动:

dkms add -m i915-sriov-dkms -v 2023.12.21
dkms build -m i915-sriov-dkms -v 2023.12.21
dkms install -m i915-sriov-dkms -v 2023.12.21

检查驱动状态,若显示 installed 则说明编译加载成功:

dkms status

3. 配置 sysfs 脚本自动生成虚拟显卡

为了在每次开机时自动生成 VF 虚拟显卡,可以通过 sysfsutils 或 systemd 服务来写入配置。

安装 sysfsutils

apt install -y sysfsutils

编辑 /etc/sysfs.conf,在末尾添加(以分配 3 个 VF 为例):

# 这里的 0000:00:02.0 是 N100 核显在 PVE 中的 PCI 地址,可用 lspci | grep VGA 确认
devices/pci0000:00/0000:00:02.0/sriov_numvfs = 3

保存并重启 PVE。重启后在 PVE 终端运行:

lspci | grep VGA

如果能看到类似如下输出,说明 SR-IOV 已经成功启用,02.102.3 就是虚拟出来的子显卡:

00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics] (rev 07)
00:02.1 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics] (rev 07)
00:02.2 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics] (rev 07)
00:02.3 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics] (rev 07)

第二步:在 PVE 中为黑群晖 VM 分配虚拟显卡

  1. 登录 PVE WebUI,选择你的黑群晖虚拟机(建议使用 q35 机型,BIOS 使用 OVMF (UEFI))。
  2. 点击 硬件 (Hardware) -> 添加 (Add) -> PCI 设备 (PCI Device)
  3. 在设备列表中,不要选择 00:02.0(这是主显卡),选择虚拟出来的子显卡,例如 0000:00:02.1
  4. 勾选 所有功能 (All Functions),并将 ROM-BarPCI-Express 勾选上。
  5. 保存配置。

第三步:编译黑群晖 SA6400 引导并加载驱动

建议使用 RR (Redpill-Relation) Loader,它对新型 GPU 的兼容处理极其傻瓜化。

  1. 挂载 RR 引导镜像并启动虚拟机,进入编译配置后台(通过浏览器访问屏幕显示的 IP:7681)。
  2. 机型选择:必须选择 SA6400
  3. 版本选择:推荐选择最新的 DSM 7.2.1-69057
  4. 插件 (Addons) 配置
    • 必须添加 i915 驱动插件(用于驱动 Alder Lake-N 显卡)。
    • 添加 miscshowpci 插件,方便在 DSM 内检查设备。
  5. Cmdline 配置:确保引导配置中没有禁用显卡硬解的参数。
  6. 点击 Build the loader 编译引导,完成后选择 Boot the system 启动群晖。

第四步:在 DSM 中验证虚拟显卡状态

群晖系统安装完毕并进入桌面后,通过 SSH 连接到群晖。

执行以下命令查看显卡节点:

ls -la /dev/dri

如果看到如下输出,说明群晖已成功识别并驱动了该 SR-IOV 虚拟显卡:

total 0
drwxr-xr-x  3 root root        80 Oct 24 12:00 .
drwxr-xr-x 12 root root      4340 Oct 24 12:00 ..
crw-rw----  1 root card  226,   0 Oct 24 12:00 card0
crw-rw----  1 root video 226, 128 Oct 24 12:00 renderD128

只要存在 /dev/dri/renderD128,就意味着硬件转码的基本通道已经打通。


第五步:实现 Synology Photos 人脸识别

黑群晖在非官方授权的硬件上运行 Synology Photos 时,往往会因为 AME (Advanced Media Extensions) 未激活、序列号不合法等原因,导致无法调用 GPU 进行 HEIC 格式解码和人脸识别。

1. 破解 AME 授权(免官方洗白序列号)

对于 DSM 7.2,我们可以利用社区开源脚本免洗白直接激活 AME(以获取 HEVC/HEIC 授权)。

使用 SSH 登录群晖,切换到 root 账户,运行以下一键激活补丁(请确保群晖已在套件中心安装了 AME 套件,但未激活):

# 下载并运行 AME 7.2 激活脚本
curl -L https://raw.githubusercontent.com/AlexPresso/Synology-AME-Patcher/main/ame.py | python3 -

根据提示操作,该脚本会修改 AME 的动态链接库,使其绕过群晖服务器的 SN 校验,强制显示“已成功激活”。

2. 强制启用 Photos 显卡加速 (chpcode 补丁)

Synology Photos 的人脸识别和缩略图生成默认会检测 CPU/GPU 的白名单。我们可以通过 chpcode 补丁,让 Photos 认为当前处于支持硬件加速的官方机型上。

使用 SSH 运行以下命令:

wget https://raw.githubusercontent.com/jin3089/chpcode/main/chpcode -O /usr/bin/chpcode
chmod +x /usr/bin/chpcode
/usr/bin/chpcode

运行后,该补丁会劫持 synocodectool 的调用,并强制开启转码与 AI 识别的硬件加速。

验证方式:向 Synology Photos 上传几张包含人脸的新照片,稍等片刻,进入“人物”相册,观察是否开始建立人脸索引。同时在 SSH 中运行 topintel_gpu_top(如果群晖内安装了该工具),可以看到显卡调用率上升。


第六步:配置 Plex 硬件转码

在群晖中,我们通常使用 Container Manager(Docker)部署 Plex,这样升级和维护最为方便。

1. 创建 Docker Compose 配置

在群晖 docker 目录下新建 plex 文件夹,并编写 docker-compose.yml 文件。务必将 /dev/dri 映射进容器,并赋予对应权限:

version: '3.8'
services:
  plex:
    image: plexinc/pms-docker:latest
    container_name: plex
    network_mode: host
    environment:
      - TZ=Asia/Shanghai
      - PLEX_CLAIM=your_claim_token_here # 填入你的 Plex Claim Token
    volumes:
      - ./config:/config
      - ./transcode:/transcode
      - /volume1/video:/data # 替换为你的媒体库路径
    devices:
      - /dev/dri:/dev/dri # 将虚拟显卡映射进容器
    user: "1024:100" # 建议修改为群晖中具有显卡读取权限的用户 UID:GID
    restart: unless-stopped

2. 赋予 Docker 容器显卡访问权限

群晖默认的 renderD128 权限可能不属于常规 Docker 用户,需要在群晖开机时自动放宽显卡设备文件的读写权限。

在群晖的 控制面板 -> 任务计划 -> 新增 -> 触发的任务 -> 用户定义的脚本 中添加:

  • 任务名称:Chmod GPU
  • 用户:root
  • 事件:开机
  • 运行命令
    chmod 666 /dev/dri/card0
    chmod 666 /dev/dri/renderD128
    

手动运行一次该任务,随后启动 Plex 容器。

3. 在 Plex Web 中启用硬件加速

  1. 打开 Plex 网页端,进入 设置 -> 转码器 (Transcoder)
  2. 勾选 Use hardware acceleration when available(启用硬件加速快捷转码)
  3. 转码设备选择 Alder Lake-N [UHD Graphics]
  4. 找一个 4K HEVC 的高码率视频进行播放,在播放端选择降低分辨率转码,返回 Plex 服务端控制台的“活动”页面,看到视频流后面显示 (hw) 字样(例如 H264 (HW) -> H264 (HW)),即代表 N100 的 SR-IOV 虚拟显卡转码成功。

常见问题与排错

1. PVE 主机更新内核后 SR-IOV 失效

每次 PVE 内核升级(例如从 6.5.x 升级到 6.8.x),都需要重新编译 DKMS 驱动。如果在更新后虚拟显卡不见了,只需登录 PVE 重新执行:

dkms autoinstall

系统会自动在新内核下编译并加载 i915-sriov 驱动。

2. Synology Photos 依然不识别人物

如果完成了补丁但依然没有识别:

  • 请检查 AME 的“高级媒体扩展”套件是否确实显示“已授权/已激活”。
  • 确认上传的照片是否为原始格式(Photos 不会对过小的、模糊的图片进行人脸识别)。
  • 尝试在群晖的“控制面板” -> “索引服务”中,对媒体文件执行一次“重建索引”。

点评评价

captcha
健康