FFMPEG doesn’t detect CUDA-capable device [CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected]

Environment
GPU : Quadro T400
Driver : 510.47.03
CUDA : 11.6
OS : Debian 11 (Headless)

Hello,

I am trying to implement NVENC hardware acceleration through ffmpeg. However, when I try to use the CUDA hardware accelerator, the following error is shown :

ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i input.mkv -c:a copy -c:v h264_nvenc output.mkv
[h264 @ 0x55b885e76c00] decoder->cvdl->cuvidGetDecoderCaps(&caps) failed -> CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
[h264 @ 0x55b885e76c00] Failed setup for format cuda: hwaccel initialisation returned error.

This error keeps showing up even though the GPU seems to be detected as CUDA-capable.

I installed the cuda toolkit and packages following the official installation guide (Installation Guide Linux :: CUDA Toolkit Documentation), and compiled ffmpeg following the following guide (Using FFmpeg with NVIDIA GPU Hardware Acceleration :: NVIDIA Video Codec SDK Documentation)

./deviceQuery Output :

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "NVIDIA T400"
  CUDA Driver Version / Runtime Version          11.6 / 11.6
  CUDA Capability Major/Minor version number:    7.5
  Total amount of global memory:                 1874 MBytes (1964769280 bytes)
  (006) Multiprocessors, (064) CUDA Cores/MP:    384 CUDA Cores
  GPU Max Clock rate:                            1425 MHz (1.42 GHz)
  Memory Clock rate:                             5001 Mhz
  Memory Bus Width:                              64-bit
  L2 Cache Size:                                 524288 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
  Maximum Layered 1D Texture Size, (num) layers  1D=(32768), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(32768, 32768), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total shared memory per multiprocessor:        65536 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1024
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 3 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device supports Managed Memory:                Yes
  Device supports Compute Preemption:            Yes
  Supports Cooperative Kernel Launch:            Yes
  Supports MultiDevice Co-op Kernel Launch:      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 6 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.6, CUDA Runtime Version = 11.6, NumDevs = 1
Result = PASS

nvidia-smi output :
image|690x330

Thanks to anyone who could have a clue about the origin of this issue.

After a full re-installation of the CUDA Toolkit and recompiling nv-codec-headers + ffmpeg, hardware-accelerated transcoding still doesn’t seem to work.

However, after checking dmesg, the following entries were created for each transcode attempt :

[  471.749093] NVRM: API mismatch: the client has the version 418.113, but
               NVRM: this kernel module has the version 510.47.03.  Please
               NVRM: make sure that this kernel module and all NVIDIA driver
               NVRM: components have the same version.

This seems really strange, as the only currently installed and loaded driver reported by dkms is 510.47.03 :

sudo dkms status
nvidia-current, 510.47.03, 5.10.0-11-amd64, x86_64: installed

ffmpeg configure command

./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 --nvccflags="-gencode arch=compute_52,code=sm_52 -O2"

Any guess ?
Thank you in advance

I am not used to .deb and apt, but have experienced similar ‘API mismatch’ on openSUSE rpm repositories. Looks like previous installations are not cleaned up properly and/or a repository mismatch is in place.

Recommendation:

  • check /usr/local/ for /usr/local/cuda* - is there only one version listed or more, is the symbolic link set to the desired version ?

  • check ‘echo $PATH ; echo $LD_LIBRARY_PATH’ , they should include ‘/usr/local/cuda’ or the respective PATH to the desired cuda version

  • check the configured repositories in ‘/etc/apt/sources.list’, do they point to the desired repos/URLs ? Index of /compute/cuda/repos/debian11/x86_64 does not contain any ‘418’ drivers /packages

  • check for packages using ‘apt list --installed | grep cuda ; apt list --installed | grep nvidia’ , which are not listed by ‘apt list --installed cuda* nvidia*’

After ‘cleaning up’ the dependencies / repos / packages / install / reboot (for proper driver loading), check ‘dmesg’ for the dmesg NVRM hint, nvidia-smi reports its driver version and (my assumption) the best ‘matching’ cuda version it was complied for, not necessarly the install one.

Thanks a lot for your suggestions !
I do believe the solution to this problem lies within package(s) mismatch in my Debian installation.

This system was running an installation of Debian 10 that was manually upgraded to 11, and it’s more than plausible that some of the involved repositories and / or packages weren’t up-to-date after the process.

I ended up performing a fresh install of Debian 11 on this machine, which solved the problem. Sadly, I don’t have the old installation anymore, and can’t confirm which of these leads were the possible answer to the issue, although I have no doubt you got it right.

Thank you again for the help provided ! It will ll certainly be of great help for others in this situation.

1 Like