现在来讲解如何在 Linux 服务器上,使用 Docker 版的 Jellyfin/Emby 搭配 vGPU 来实现硬件解码,本文同样适用于N卡直通用户。关于文件访问,推荐使用 NFS 将 NAS 上的文件挂载到 GPU 虚拟机上。

本文以 Debian 11 系统作为示例,理论上也适用于 Ubuntu 系统,不同发行版的用户请根据实际情况适当微调相关命令。

配置环境

  1. 安装 Docker 环境,版本不要低于23,具体安装方法略

  2. 安装 NVIDIA Container Toolkit,这是一组用于支持 NVIDIA GPU 的 Docker 容器的工具集,一共包含4个组件,分别为:

  • NVIDIA Docker2:针对官方 Docker 引擎提供支持 NVIDIA GPU 的解决方案。

  • NVIDIA Container Runtime:基于 Docker 运行时的 NVIDIA GPU 加速解决方案。

  • NVIDIA device plugin for Kubernetes:支持在 Kubernetes 中使用标准名称分配 NVIDIA GPU。

  • NVIDIA GPU Operator:简化了在 Kubernetes 集群上部署、管理和维护 NVIDIA GPU 加速工作负载的过程。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 添加软件源
    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
    && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

    # 安装nvidia-container-toolkit
    apt update
    apt install -y nvidia-container-toolkit
    nvidia-ctk runtime configure --runtime=docker
    systemctl restart docker

    # 测试,如果能正常输出显卡信息则安装成功
    docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

    其他系统安装可以参考官方文档。

开始安装

  1. 使用下方的 docker-compose 文件启动 Jellyfin 容器(Emby 容器同样适用)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    version: '3.8'

    services:
    # Jellyfin: https://hub.docker.com/r/nyanmisaka/jellyfin
    jellyfin:
    image: nyanmisaka/jellyfin:latest
    container_name: jellyfin
    hostname: jellyfin
    restart: always
    environment:
    - TZ=Asia/Shanghai
    - NVIDIA_DRIVER_CAPABILITIES=all
    - NVIDIA_VISIBLE_DEVICES=all
    ports:
    - 8096:8096
    volumes:
    - ./jellyfin/config:/config
    - ./jellyfin/cache:/cache
    - /mnt/media:/media
    runtime: nvidia
    deploy:
    resources:
    reservations:
    devices:
    - capabilities: [ gpu ]
  2. Jellyfin 初始化配置,略

  3. 进入控制台,选择“播放”菜单,参照GPU硬件编解码能力表,启用对应的硬件编解码选项

    img

  4. 随便找个视频播放,验证是否生效,可以看到视频已经成功调用 GPU 解码,HDR 色调映射也没问题

    img

    img

  5. 最后,关于 Jellyfin 的硬件解码,实际上只需分配1-2GB显存即可满足要求。如果您使用的是黑群晖,并且不想额外启动虚拟机,或者是在物理机上搭建的黑群晖,您可以自行了解如何使群晖 Docker 使用 NVIDIA 显卡驱动。理论上,只需安装一个第三方的 NVIDIA 套件即可实现,但个人认为这可能会影响黑群晖的稳定性,因此我选择不使用这种方法。

参考文档