首页 公告 项目 RSS

使用docker运行jellyfin并且用gpu解码

September 4, 2023 本文有 1250 个字 需要花费 3 分钟阅读

简介

厂长家傻儿子说他有一张 3060 显卡,然后想让我塞满他,所以我想着既然他都这么说了,那么我就搞一个 jellyfin,然后塞满他的硬盘,塞满他的显卡,塞满他的上行带宽,最好还可以塞满他的 cpu 和内存。

创建虚拟机

虚拟机是创建在 pve 上的,为了保证资源不会被厂长儿子共享过去,所以就选择了显卡直通

安装显卡驱动

在下面这个网站找到最新的显卡驱动

https://www.nvidia.com/Download/index.aspx?lang=en-us

下载完成之后

第一次运行可能会提示你禁用Nouveau显卡驱动,跟着向导走可以直接禁用,然后重启服务器

之后运行会提示你gcc make kernel-devel 什么的没有,按照提示一个个安装就好了,在安装的时候还要指定kernel-devel的路径,一般是在/usr/src/kernels/这个路径下面

./NVIDIA-Linux-x86_64-535.104.05.run --kernel-source-path=/usr/src/kernels/4.18.0-477.21.1.el8_8.x86_64/

在运行上面命令的时候可能还会提示你安装下面两个东西

pkg-config

vulkan-loader

为了方便,你可以新打开一个终端,然后安装上面两个依赖

最后使用nvidia-smi验证下就好了,如果一切正常的话会有下面的输出

Mon Sep  4 06:57:38 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05             Driver Version: 535.104.05   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 3060        Off | 00000000:00:10.0 Off |                  N/A |
| 38%   47C    P0              N/A / 170W |      1MiB / 12288MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

安装 docker

如果是 centos 的话可以直接执行下面两个命令

wget get.docker.com

bash index.html --mirror Aliyun

但是我是 almalinux,所以

添加软件源

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

更新软件源

dnf makecache

安装 docker

dnf install docker-ce docker-ce-cli containerd.io

启动 docker

systemctl start docker

配置为开机启动

systemctl enable docker

查看 docker 启动状态

systemctl status docker

安装nvidia-container-toolkit

为了让显卡可以在容器里面使用,你需要安装nvidia-container-toolkit,因为我是 almalinux,所以要强制指定发行版本是 centos8

配置软件源

distribution=centos8
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

启动软件源

yum-config-manager --enable libnvidia-container-experimental

安装nvidia-container-toolkit

dnf install -y nvidia-container-toolkit

配置 Docker 守护进程以识别 NVIDIA 容器运行时

nvidia-ctk runtime configure --runtime=docker

重启 docker

systemctl restart docker

测试容器能不能识别显卡

docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

如果正常的话是会输出你的显卡相关信息的

或者使用下面的docker-compose.yaml一键启动

version: '3.9'
services:
  cuda:
    command: nvidia-smi
    image: 'nvidia/cuda:11.6.2-base-ubuntu20.04'
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all

然后查看已经关闭了的容器日志

启动 jellyfin

使用下面的docker-compose.yaml启动 jellyfin

version: '3.3'
services:
  jellyfin:
    image: 'jellyfin/jellyfin:10.8.10'
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    volumes:
      - './config:/config'
      - './cache:/cache'
      - './media:/media'
      - './disk1:/disk1'
    network_mode: host

配置 jellyfin

启动完成之后你需要配置显卡解码

访问 jellyfin,创建完初始用户之后在控制台,转码这里选择 nvidia nvenc,然后把下面启用硬件编码的格式全部打勾,

还有要启用色调映射,不然在 jellyfin 中你所有的 hdr 视频都会是灰蒙蒙的一片

在国内因为会有各种复杂的网络问题,所以tmdb 的访问是很慢的,所以如果可以的话,你最好安装一下下面这个插件,从豆瓣获取电影的元数据

https://github.com/cxfksword/jellyfin-plugin-metashark

还有启用OpenSubtitles插件,来解决部分视频没有字幕的问题

最后

如果你也想和我一起,塞满厂长家儿子的显卡,那么联系我,我给你开 jellyfin 的账号

目前厂长家傻儿子 jellyfin 服务器的配置信息

  • 显卡: 已经锻炼过了的3060
  • 硬盘: 16T 目前已经塞了 5T 全是 4k 资源
  • cpu: 16c 我偷偷开的,反正空着也是空着
  • 内存: 16g
  • 上行: 未知

欢迎关注我的博客www.bboy.app

Have Fun