This patch removes restriction on maximum number of simultaneous NVENC video encoding sessions imposed by Nvidia to consumer-grade GPUs.
Go to file
2019-10-23 21:37:26 +03:00
.github/ISSUE_TEMPLATE reorder issue templates 2019-02-14 01:03:50 +02:00
tools/nv-driver-locator ndl: track tesla drivers as well 2019-10-12 11:32:00 +03:00
win win: update docs 2019-10-23 21:37:26 +03:00
.gitmodules win: pin latest stable patcher utility 2019-04-03 21:46:28 +03:00
docker-entrypoint.sh docker-entrypoint: ensure output dir 2019-07-11 03:31:06 +03:00
Dockerfile dockerfile: add some reasonable ENV defaults 2019-07-11 03:26:23 +03:00
FFMPEG-with-NVIDIA-Acceleration-on-Ubuntu_UG_v01.pdf add doc 2016-11-16 13:37:39 +03:00
patch.sh linux: add support for linux driver version 440.26 2019-10-17 20:43:08 +03:00
PULL_REQUEST_TEMPLATE.md Add PR template 2018-12-26 18:43:19 +02:00
README.md linux: add support for linux driver version 440.26 2019-10-17 20:43:08 +03:00

nvidia-patch

GitHub last commit Latest version

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:

Synopsis

# bash ./patch.sh -h

SYNOPSIS
       patch.sh [-s] [-r|-h|-c VERSION|-l]

DESCRIPTION
       The patch for Nvidia drivers to remove NVENC session limit

       -s             Silent mode (No output)
       -r             Rollback to original (Restore lib from backup)
       -h             Print this help message
       -c VERSION     Check if version VERSION supported by this patch.
                      Returns true exit code (0) if version is supported.
       -l             List supported driver versions

Step-by-Step guide

Examples are provided for driver version 430.50. All commands executed as root.

Download driver

https://international.download.nvidia.com/XFree86/Linux-x86_64/430.50/NVIDIA-Linux-x86_64-430.50.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.50/NVIDIA-Linux-x86_64-430.50.run
chmod +x ./NVIDIA-Linux-x86_64-430.50.run
./NVIDIA-Linux-x86_64-430.50.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 the patch.sh and docker-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.

Benchmarks

See also

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.