在 Docker 和 kubenetes 中启用 GPU (nvidia) 支持

Docker 中运行 GPU (nvidia) ffmpeg

编译方法

https://docs.nvidia.com/video-technologies/video-codec-sdk/ffmpeg-with-nvidia-gpu/

镜像地址

https://hub.docker.com/r/linuxserver/ffmpeg

Docker 版本要求使用 nvidia-docker2,不支持 DockerCE

https://www.4wei.cn/archives/1003034

常规命令

docker run --rm -it \
  -v $(pwd):/config \
  linuxserver/ffmpeg \
  -i /config/input.mkv \
  -c:v libx264 \
  -b:v 4M \
  -vf scale=1280:720 \
  -c:a copy \
  /config/output.mkv

使用 nvidia runtime,并指定 nvidia 的硬编码 h264_nvenc

docker run --rm -it \
  --runtime=nvidia \
  -v $(pwd):/config \
  linuxserver/ffmpeg \
  -hwaccel nvdec \
  -i /config/input.mkv \
  -c:v h264_nvenc \
  -b:v 4M \
  -vf scale=1280:720 \
  -c:a copy \
  /config/output.mkv

其中,硬件编码器和硬件解码器分别称为 NVENCNVDEC
加速器支持在 Windows 和 Linux 平台上对以下视频编解码器进行硬件加速解码:

MPEG-2
VC-1
H.264 (AVCHD)
H.265 (HEVC)
VP8
VP9
AV1

官方性能报告如下,A100/Tesla 还是当前最好的卡,T4 较适合单机需要挂8块卡的场景。

在 Linux 上手动编译 GPU (nvidia) ffmpeg

通过驱动安装包自动安装安装 CUDA (可选)

参考文档

https://docs.nvidia.com/video-technologies/video-codec-sdk/ffmpeg-with-nvidia-gpu/#compiling-for-linux

nvidia-FFmpeg 支持 WindowsLinux,手动编译需要安装 CUDA 工具包。

使用命令安装 N 卡驱动和工具包,需要根据需要选择要安装的驱动版本,如 460

apt install nvidia-driver-460
apt install nvidia-cuda-toolkit

手动安装可以进入官网驱动页面下载 https://www.nvidia.com/Download/index.aspx,其中常见的 ANT 系列都在 Data Center 产品类型中。

如当前最新的 P40Linux 驱动(包含 CUDA 11)。

CUDA®是由NVIDIA®发明的并行计算平台和编程模型。它通过利用图形处理单元 (GPU) 的强大功能来显着提高计算性能。

wget https://us.download.nvidia.cn/tesla/515.65.01/NVIDIA-Linux-x86_64-515.65.01.run

chmod +x ./NVIDIA-Linux-x86_64-515.65.01.run
./NVIDIA-Linux-x86_64-515.65.01.run

Centos 7 x86_64 通过 yum 安装 CUDA

官方文档,可以根据操作系统选择

https://developer.nvidia.com/cuda-downloads

yum-config-manager --add-repo https://developer.download.nvidia.cn/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo

# 解决依赖 libnvidia-egl-wayland opencl-filesystem
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum clean all
yum -y install nvidia-driver-latest-dkms cuda

Centos 7 x86_64 通过二进制包安装 CUDA

官方文档,可以根据操作系统选择

https://developer.nvidia.com/cuda-downloads

yum-config-manager --add-repo https://developer.download.nvidia.cn/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo

# 解决依赖 libnvidia-egl-wayland opencl-filesystem
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum clean all
yum -y install nvidia-driver-latest-dkms cuda

ubuntu 编译 nvidia FFmpeg

克隆 ffnvcodec

git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git

安装 ffnvcodec

cd nv-codec-headers &&  make install && cd –

克隆 FFmpeg 并进行安装

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/

安装必要的依赖软件包

apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev

配置并编译

./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared --disable-x86asm
make -j 8

Centos 编译 nvidia FFmpeg

yum install -y https://developer.download.nvidia.cn/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-10.2.89-1.x86_64.rpm

yum install -y cuda-nvcc-11-0.x86_64 cuda-driver-devel-11-0.x86_64 cuda-11-0.x86_64