.github/ISSUE_TEMPLATE | ||
tools/nv-driver-locator | ||
win | ||
.gitmodules | ||
docker-entrypoint.sh | ||
Dockerfile | ||
FFMPEG-with-NVIDIA-Acceleration-on-Ubuntu_UG_v01.pdf | ||
patch.sh | ||
PULL_REQUEST_TEMPLATE.md | ||
README.md |
nvidia-patch
This patch removes restriction on maximum number of simultaneous NVENC video encoding sessions imposed by Nvidia to consumer-grade GPUs.
Main target operating system is GNU/Linux, but for Windows support see win.
Requirements:
- x86_64 system architecture
- GNU/Linux operating system
- nvenc-compatible gpu (https://developer.nvidia.com/video-encode-decode-gpu-support-matrix#Encoder)
- Nvidia driver. Patch available for:
Tested on Ubuntu 18.04 LTS (GNU/Linux 4.15.0-23-generic x86_64)
Synopsis
# bash ./patch.sh -h
SYNOPSIS
patch.sh [OPTION]...
DESCRIPTION
The patch for Nvidia drivers to increase encoder sessions
-s Silent mode (No output)
-r Rollback to original (Restore lib from backup)
-h Print this help message
Step-by-Step guide
Examples are provided for driver version 430.34. All commands are runned as root.
Download driver
https://international.download.nvidia.com/XFree86/Linux-x86_64/430.34/NVIDIA-Linux-x86_64-430.34.run
Install driver
mkdir /opt/nvidia && cd /opt/nvidia
wget https://international.download.nvidia.com/XFree86/Linux-x86_64/430.34/NVIDIA-Linux-x86_64-430.34.run
chmod +x ./NVIDIA-Linux-x86_64-430.34.run
./NVIDIA-Linux-x86_64-430.34.run
Check driver
nvidia-smi
Output should show no errors and details about your driver and GPU.
Patch driver
This patch performs backup of original file prior to making changes.
bash ./patch.sh
You're all set!
Rollback
If something got broken you may restore patched driver from backup:
bash ./patch.sh -r
Docker support
It is possible to use this patch with nvidia-docker containers, even if host machine hasn't patched drivers. See Dockerfile
for example.
Essentially all you need to do during build is:
COPY
thepatch.sh
anddocker-entrypoint.sh
files into your container.- Make sure
docker-entrypoint.sh
is invoked on container start.
docker-entrypoint.sh
script does on-the-fly patching by means of manipulating dynamic linker to workaround read-only mount of Nvidia runtime. Finally it passes original docker command to shell, like if entrypoint was not restricted by ENTRYPOINT
directive. So docker run --runtime=nvidia -it mycontainer echo 123
will print 123
. Also it can be just invoked from your entrypoint script, if you have any.
See also
- Plex Media Server: enable HW decoding:
- Unraid / Docker:
- GH Issue
- Unraid Nvidia plugin:
- Original research behind this patch
If you experience CreateBitstreamBuffer failed: out of memory (10)
, then you have to lower buffers number used for every encoding session. If you are using ffmpeg
, see option -surfaces
("Number of concurrent surfaces") and try value near -surfaces 8
.