ea4d28b649
linux: readme: add notes about dkms |
||
---|---|---|
.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
Make sure you have kernel headers and compiler installed before running Nvidia driver installer. Kernel headers and compiler are required to build nvidia kernel module. Recommended way to do this is to install dkms
package, if it is available in your distro. This way dkms
package will pull all required dependencies to allow building kernel modules and kernel module builds will be automated in a reliable fashion.
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
.