上回的话题,之前已经成功在 PVE 的虚拟机上配置了vGPU,现在来讲解如何在 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 加速工作负载的过程。

    # 添加软件源
    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 容器同样适用)

    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硬件编解码能力表,启用对应的硬件编解码选项

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

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

参考文档


Never give up your dreams.