跳至主内容
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

NVIDIA GPU硬件加速教程

本教程指导您如何通过NVENC在NVIDIA GPU上设置完整的视频硬件加速功能。

加速方法​

自Maxwell架构起,NVIDIA GPU开始支持硬件加速转码。

在Windows和Linux系统中,NVENC是唯一可用的加速方法。

NVENC/NVDEC是NVIDIA GPU的专有视频编解码API,配合CUDA使用可实现完整的硬件加速。

已知问题和限制请参阅此章节。

备注

NVENC在Windows和Linux上均支持无显示器运行(headless server),这意味着无需连接物理显示器。

色调映射方法​

支持HEVC 10-bit解码的所有NVIDIA GPU均可实现HDR/DV到SDR的硬件加速色调映射。

在Windows和Linux系统中,CUDA是唯一可用的色调映射方法。该方法同时支持杜比视界P5格式和零拷贝技术。

备注

Enable enhanced NVDEC decoder功能可在新版NVDEC和旧版CUVID解码流程之间切换。启用杜比视界支持需勾选此选项以激活NVDEC。

选择GPU硬件​

初学者请参考硬件选择指南获取选购建议,高级用户请继续阅读本节内容。

注意

大多数NVIDIA GPU都支持NVENC/NVDEC,但部分低端和移动型号(如GT1030和MX450)属于例外情况。

购买适用于硬件加速的GPU前,可通过NVIDIA GPU编解码支持矩阵查询视频编解码支持情况。

转码H.264​

AVC/H.264 8-bit因其出色的兼容性仍被广泛使用。所有支持NVENC/NVDEC的NVIDIA GPU均可对其进行解码/编码。

  • H.264 8-bit解码与编码 - 任何支持NVENC/NVDEC的NVIDIA GPU

转码HEVC​

HEVC/H.265 仍然是存储4K 10-bit、HDR和杜比视界视频的首选格式。得益于x265成熟的软件编码支持,以及2016年后发布的大多数GPU广泛实现的硬件编码支持。

Maxwell及以上架构GPU提供HEVC支持:

  • HEVC 8-bit解码与编码 - Maxwell第二代(GM206)及更新架构

  • HEVC 10-bit解码 - Maxwell第二代(GM206)及更新架构

  • HEVC 10-bit编码 - Pascal及更新架构

备注

请注意,在Maxwell第二代系列中,仅GM206型号支持HEVC 10-bit解码。其继任者Pascal架构则完全支持HEVC 10-bit,并提升了速度与画质。

AV1转码支持​

AV1是免版税的未来视频编解码器。其更小的文件尺寸能显著节省存储空间和网络带宽,但缺点是编解码对CPU要求极高。硬件加速使得实时转码AV1流成为可能。AV1编码功能在Jellyfin 10.9及以上版本提供支持。

NVIDIA已在其最新GPU中添加AV1加速支持:

  • 解码 AV1 8/10-bit - Ampere 及更新架构

  • 编码 AV1 8/10-bit - Ada Lovelace 及更新架构

其他编解码器支持​

请参考以下资源:

速度与画质表现​

编码质量:

  • H.264 和 HEVC - Blackwell/Ada/Ampere/Turing > Turing TU117/Volta/Pascal > Maxwell

  • AV1 - 仅限 Ada Lovelace 和 Blackwell

同代架构的解码与编码速度:

  • 多 NVENC/NVDEC 单元型号 > 单 NVENC/NVDEC 单元型号

  • 高 GPU 时钟频率型号 > 低 GPU 时钟频率型号

  • 高显存带宽型号 > 低显存带宽型号

NVENC/NVDEC 性能参考表:

Windows环境配置​

推荐使用Windows 10 64位或更高版本。Jellyfin 10.10要求最低NVIDIA驱动版本为522.25。

Windows主机配置步骤​

  1. 若从 Maxwell 前代 NVIDIA GPU 升级且未执行全新安装,请使用 DDU 彻底清除旧驱动。

  2. 从 NVIDIA 驱动下载页面 安装最新版驱动。

  3. 在 Jellyfin 中启用 NVENC 并取消勾选不支持的编解码器。

Windows 虚拟化配置​

NVIDIA Windows 驱动支持在 WSL2 和 Docker 环境中访问 NVENC/NVDEC 及 CUDA。

请参考 Linux 物理机配置 和 Linux 虚拟化配置。

Windows 环境验证​

  1. 在 Jellyfin Web 客户端播放视频,通过降低分辨率或码率触发视频转码。

  2. 打开"任务管理器"并切换到 GPU 页面。

  3. 按以下方式检查各引擎占用情况:

    • 3D - 2D/3D引擎或CUDA/GPGPU工作负载

    • Copy - 位块传输/复制引擎工作负载

    • Video Decode - 视频解码器工作负载

    • Video Encode - 视频编码器工作负载

    • Cuda - CUDA/GPGPU工作负载

    Windows环境NVIDIA状态验证

Linux 环境配置​

需要 64 位 Linux 发行版。Jellyfin 10.10 最低要求 NVIDIA 驱动版本为 520.56.06。

Linux 主机配置指南​

Debian/Ubuntu 系统​

Jellyfin 所需的 jellyfin-ffmpeg* deb 包不包含任何 NVIDIA 专有驱动。

您需要从发行版安装 NVIDIA 驱动程序并配置 jellyfin 用户的权限。

备注

需要 root 权限。

  1. 假设您已添加 Jellyfin 仓库至 apt 源列表,并安装了 jellyfin-server 和 jellyfin-web。

  2. 安装 jellyfin-ffmpeg7 软件包。若存在冲突依赖可移除废弃的 jellyfin 元包:

    sudo apt update && sudo apt install -y jellyfin-ffmpeg7
  3. 通过以下链接安装NVIDIA专有驱动,然后安装两个额外软件包以支持NVENC和NVDEC:

  4. 使用 nvidia-smi 检查 NVIDIA GPU 状态:

    $ nvidia-smi

    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 520.56.06 Driver Version: 520.56.06 CUDA Version: 11.8 |
    |-------------------------------+----------------------+----------------------+
    | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
    | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
    | | | MIG M. |
    |===============================+======================+======================|
    | 0 NVIDIA GeForce ... Off | 00000000:1C:00.0 Off | N/A |
    | 0% 44C P0 N/A / 75W | 0MiB / 1998MiB | 0% Default |
    | | | N/A |
    +-------------------------------+----------------------+----------------------+
    ...
  5. 在 Jellyfin 中启用 NVENC 并取消勾选不支持的编解码器。

Linux Mint​

Linux Mint 基于 Ubuntu 的软件包体系构建

您可以遵循 Debian 和 Ubuntu Linux 的配置步骤,但需从 Jellyfin 服务器发布页面手动安装所有软件包:jellyfin-server, jellyfin-web 和 jellyfin-ffmpeg7。同时请根据 官方版本映射表 选择正确的代号。

Arch Linux​

备注

需要 root 权限。

  1. 安装 Archlinux/extra 仓库的 jellyfin-ffmpeg 包:

    sudo pacman -Syu jellyfin-ffmpeg
  2. 通过以下链接安装NVIDIA专有驱动,然后安装额外软件包以支持NVENC和NVDEC:

    sudo pacman -Syu nvidia-utils
  3. 使用 nvidia-smi 检查 NVIDIA GPU 状态:

    nvidia-smi
  4. 在 Jellyfin 中启用 NVENC 并取消勾选不支持的编解码器。

其他发行版​

对于缺乏常规维护的发行版,我们提供便携式 jellyfin-ffmpeg 二进制文件。

可通过以下链接下载:

备注

glibc 和 Linux 内核最低要求:

  • x86_64 / amd64 架构 - glibc >= 2.28, Linux 内核 >= 4.18 (2018 年及之后发布的主流发行版)

解压后安装到正确路径,并在 Jellyfin 控制台修改 FFmpeg 路径使其匹配:

备注

需要 root 权限。

cd ~/
mkdir -p jellyfin-ffmpeg
wget https://repo.jellyfin.org/releases/ffmpeg/<VERSION>/jellyfin-ffmpeg_<VERSION>_portable_linux64-gpl.tar.xz
tar -xvf jellyfin-ffmpeg_<VERSION>_portable_linux64-gpl.tar.xz -C jellyfin-ffmpeg
sudo mv jellyfin-ffmpeg /usr/lib
sudo ldd -v /usr/lib/jellyfin-ffmpeg/ffmpeg

安装包含以下关键字的 NVIDIA 专有驱动包及其依赖项:

  • NVIDIA NVDEC CUVID - 解码

  • NVIDIA NVENC - 编码

Linux 虚拟化环境配置​

官方 Docker 镜像​

官方 Docker 镜像未包含任何 NVIDIA 专有驱动。

需在宿主机系统安装 NVIDIA 驱动和 NVIDIA Container Toolkit,使 Docker 能访问 GPU。

备注

需要 root 权限。

  1. 在宿主机安装 NVIDIA 专有驱动(参考前文说明)

  2. 通过以下链接在宿主机上安装NVIDIA Container Toolkit:

  3. 使用Docker命令行或docker-compose:

    • 命令行示例:

      docker run -d \
      --name=jellyfin \
      --volume /path/to/config:/config \
      --volume /path/to/cache:/cache \
      --volume /path/to/media:/media \
      --user 1000:1000 \
      --net=host \
      --restart=unless-stopped \
      --runtime=nvidia \
      --gpus all \
      jellyfin/jellyfin
    • docker-compose配置文件示例(YAML格式):

      services:
      jellyfin:
      image: jellyfin/jellyfin
      user: 1000:1000
      network_mode: 'host'
      volumes:
      - /path/to/config:/config
      - /path/to/cache:/cache
      - /path/to/media:/media
      runtime: nvidia
      deploy:
      resources:
      reservations:
      devices:
      - driver: nvidia
      count: all
      capabilities: [gpu]
    备注

    若遇到上游问题CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected,请将这些设备映射到Docker容器:

    /dev/nvidia-caps:/dev/nvidia-caps
    /dev/nvidia0:/dev/nvidia0
    /dev/nvidiactl:/dev/nvidiactl
    /dev/nvidia-modeset:/dev/nvidia-modeset
    /dev/nvidia-uvm:/dev/nvidia-uvm
    /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools
  4. 将用户名加入 video 用户组:

    sudo usermod -aG video $USER
  5. 更新动态链接并重启 Docker 服务:

    docker exec -it jellyfin ldconfig
    sudo systemctl restart docker
  6. 使用 nvidia-smi 检查 NVIDIA GPU 状态:

    docker exec -it jellyfin nvidia-smi
  7. 如需尝试不稳定版本,请自行承担风险将 jellyfin/jellyfin 替换为 jellyfin/jellyfin:unstable。

  8. 在 Jellyfin 中启用 NVENC 并取消勾选不支持的编解码器。

备注

请注意,官方 Jellyfin Docker 镜像已为 NVIDIA GPU 设置所需环境变量。若需自行构建镜像,请勿忘记在 Docker 配置中添加以下两个环境变量:

  • NVIDIA_DRIVER_CAPABILITIES=all

  • NVIDIA_VISIBLE_DEVICES=all

Linuxserver.io Docker 方案​

LSIO Docker 镜像由 linuxserver.io 维护,请参考其 GitHub 文档:linuxserver/docker-jellyfin。

备注

官方 Docker 镜像与 LSIO Docker 镜像中 Jellyfin 配置文件和数据的存储路径不同,因此无法直接互换使用。

Podman​

  1. 将CUDA软件仓库添加到包管理器。

    浏览以下目录获取适用于您发行版的仓库文件:CUDA软件仓库

    将对应的仓库文件安装至包管理器。具体操作方式取决于您的包管理器及操作系统版本。请将下方示例中的仓库URL替换为适配您发行版的正确地址。

    a. Fedora/RHEL/CentOS系统:

    sudo dnf config-manager addrepo --from-repofile=https://developer.download.nvidia.com/compute/cuda/repos/fedora42/$(uname -m)/cuda-fedora42.repo

    b. Debian/Ubuntu系统:

    echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin stable main" | sudo tee /etc/apt/sources.list.d/cuda-ubuntu2404.list

    sudo apt-get update

  2. 安装软件包 cuda-toolkit 和 nvidia-container-toolkit-base

    a. Fedora, RHEL, CentOS:

    sudo dnf install cuda-toolkit nvidia-container-toolkit-base

    b. Debian, Ubuntu:

    sudo apt-get install -y cuda-toolkit nvidia-container-toolkit-base

  3. 生成 CDI 规范文件

    sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml

    另请参阅:容器设备接口支持 — NVIDIA Container Toolkit

  4. 调整您的podman命令行或systemd容器文件以使用设备:nvidia.com/gpu=0

    例如,您的podman命令行应调整为如下格式:

    podman run \
    --detach \
    --label "io.containers.autoupdate=registry" \
    --name myjellyfin \
    --publish 8096:8096/tcp \
    --device nvidia.com/gpu=0 \
    # --security-opt label=disable # Only needed for older versions of container-selinux < 2.226
    --rm \
    --user $(id -u):$(id -g) \
    --userns keep-id \
    --environment=JELLYFIN_DATA_DIR=/var/lib/jellyfin
    --environment=JELLYFIN_CONFIG_DIR=/etc/jellyfin
    --environment=JELLYFIN_LOG_DIR=/var/log/jellyfin
    --environment=JELLYFIN_CACHE_DIR=/var/cache/jellyfin
    --volume=/your/path/to/data:/var/lib/jellyfin # Replace paths with actual paths on your host's filesystem
    --volume=/your/path/to/config:/etc/jellyfin
    --volume=/your/path/to/logs:/var/log/jellyfin
    --volume=/your/path/to/cache:/var/cache/jellyfin
    --mount type=bind,source=/path/to/media,destination=/media,ro=true,relabel=private \
    docker.io/jellyfin/jellyfin:latest

    Systemd配置文件示例:

    [Unit]
    Description=jellyfin

    [Container]
    Image=docker.io/jellyfin/jellyfin:latest
    AutoUpdate=registry
    PublishPort=8096:8096/tcp
    UserNS=keep-id
    #SecurityLabelDisable=true # Only needed for older versions of container-selinux < 2.226
    AddDevice=nvidia.com/gpu=0
    Environment=JELLYFIN_DATA_DIR=/var/lib/jellyfin
    Environment=JELLYFIN_CONFIG_DIR=/etc/jellyfin
    Environment=JELLYFIN_LOG_DIR=/var/log/jellyfin
    Environment=JELLYFIN_CACHE_DIR=/var/cache/jellyfin
    Volume=/your/path/to/data:/var/lib/jellyfin # Replace paths with actual paths on your host's filesystem
    Volume=/your/path/to/config:/etc/jellyfin
    Volume=/your/path/to/logs:/var/log/jellyfin
    Volume=/your/path/to/cache:/var/cache/jellyfin

    [Service]
    # Inform systemd of additional exit status
    SuccessExitStatus=0 143

    [Install]
    # Start by default on boot
    WantedBy=default.target
  5. 创建以下 udev 规则,确保在容器启动前初始化 GPU 设备

    将以下内容保存为 /etc/udev/rules.d/nvidia.rules:

    ACTION=="add|bind", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", \
    DRIVER=="nvidia", TEST!="/dev/nvidia-uvm", \
    RUN+="/usr/bin/nvidia-modprobe", \
    RUN+="/usr/bin/nvidia-modprobe -c0 -u", \
    RUN+="/usr/bin/nvidia-modprobe -m"

其他虚拟化方案​

其他虚拟化方案未经验证,可能无法在 NVIDIA GPU 上运行

更多信息请参考 Intel GPU 硬件加速教程 - Linux 虚拟化配置。

Linux 系统验证方法​

  1. 在 Jellyfin Web 客户端播放视频,通过降低分辨率或码率触发视频转码。

  2. 使用 nvidia-smi 命令检查 NVIDIA GPU 的占用情况以及每个 jellyfin-ffmpeg 进程的显存使用情况:

    $ nvidia-smi

    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 520.56.06 Driver Version: 520.56.06 CUDA Version: 11.8 |
    |-------------------------------+----------------------+----------------------+
    | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
    | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
    | | | MIG M. |
    |===============================+======================+======================|
    | 0 NVIDIA GeForce ... Off | 00000000:1C:00.0 Off | N/A |
    | 43% 44C P2 36W / 75W | 274MiB / 1998MiB | 68% Default |
    | | | N/A |
    +-------------------------------+----------------------+----------------------+
    +-----------------------------------------------------------------------------+
    | Processes: |
    | GPU GI CI PID Type Process name GPU Memory |
    | ID ID Usage |
    |=============================================================================|
    | 0 N/A N/A 4024 G /usr/lib/xorg/Xorg 63MiB |
    | 0 N/A N/A 5837 C /usr/lib/jellyfin-ffmpeg/ffmpeg 195MiB |
    +-----------------------------------------------------------------------------+