
Об использовании разных CUDA Runtime на одном компьютере под Linux
Информация, изложенная в данной статье, не претендует на полноту, является ознакомительной.
В некоторых случаях на компьютере требуется наличие не только самой современной версии CUDA, но и более старых пакетов, например, Runtime версии 12.6 плюс 10.2.

Установку нескольких версий CUDA toolkit лучше производить начиная с последней с помощью штатного offline инсталлятора Nvidia. Это поможет избежать появления возможных программных конфликтов.

Драйвер Nvidia также нужно ставить самый свежий, так как он практически всегда имеет обратную совместимость со старыми версиями CUDA:

Иногда перед установкой старой версии CUDA toolkit предварительно нужно установить совместимый пакет компилятора (установка разных версий gcc в ubuntu рассматривалась в статье «О компиляции ccminer в последних версиях ubuntu»).
Ошибка, возникающая при попытке инсталлировать CUDA toolkit 10.2 в xubuntu 24.04:
Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.
При установке старых пакетов CUDA следует отключать все дополнительные опции, включая драйвер.
Также следует отказаться от автоматического обновления пути /usr/local/cuda symlink.

В дальнейшем при работе операционной системе нужно будет вручную указывать место, где находится тот или иной старый пакет CUDA, например, для дополнительно установленного пакета CUDA toolkit 11.7:
export PATH=/usr/local/cuda-11.7/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH
Переключаться между разными версиями можно с помощью update-alternatives.
Для проверки наличия symlink, связанных с cuda, можно использовать команду:
ls -l /usr/local
Версии CUDA, установленные в системе, можно просмотреть командой:
sudo update-alternatives --display cuda
Изменить версию CUDA, сипользующуюся по умолчанию, можно командой:
sudo update-alternatives --config cuda
Местонахождение пакетов CUDA Toolkit, установленных в системе, также можно узнать командой
whereis cuda
Например, в xubuntu 24.04 искомые файлы находятся в каталоге:
/usr/local/cuda

Полная информация по установленным в системе компонентам CUDA Toolkit (CUDA SDK, CUDA Runtime, CUDA NVCC, CUDA OpenCL и другие), а также драйверам Nvidia находится в файле /usr/local/cuda/version.json
Например:
{
"cuda" : {
"name" : "CUDA SDK",
"version" : "12.6.1"
},
"cuda_cccl" : {
"name" : "CUDA C++ Core Compute Libraries",
"version" : "12.6.37"
},
"cuda_cudart" : {
"name" : "CUDA Runtime (cudart)",
"version" : "12.6.68"
},
"cuda_cuobjdump" : {
"name" : "cuobjdump",
"version" : "12.6.68"
},
"cuda_cupti" : {
"name" : "CUPTI",
"version" : "12.6.68"
},
"cuda_cuxxfilt" : {
"name" : "CUDA cu++ filt",
"version" : "12.6.68"
},
"cuda_demo_suite" : {
"name" : "CUDA Demo Suite",
"version" : "12.6.68"
},
"cuda_gdb" : {
"name" : "CUDA GDB",
"version" : "12.6.68"
},
"cuda_nsight" : {
"name" : "Nsight Eclipse Plugins",
"version" : "12.6.68"
},
"cuda_nvcc" : {
"name" : "CUDA NVCC",
"version" : "12.6.68"
},
"cuda_nvdisasm" : {
"name" : "CUDA nvdisasm",
"version" : "12.6.68"
},
"cuda_nvml_dev" : {
"name" : "CUDA NVML Headers",
"version" : "12.6.68"
},
"cuda_nvprof" : {
"name" : "CUDA nvprof",
"version" : "12.6.68"
},
"cuda_nvprune" : {
"name" : "CUDA nvprune",
"version" : "12.6.68"
},
"cuda_nvrtc" : {
"name" : "CUDA NVRTC",
"version" : "12.6.68"
},
"cuda_nvtx" : {
"name" : "CUDA NVTX",
"version" : "12.6.68"
},
"cuda_nvvp" : {
"name" : "CUDA NVVP",
"version" : "12.6.68"
},
"cuda_opencl" : {
"name" : "CUDA OpenCL",
"version" : "12.6.68"
},
"cuda_sanitizer_api" : {
"name" : "CUDA Compute Sanitizer API",
"version" : "12.6.68"
},
"fabricmanager" : {
"name" : "Fabric Manager",
"version" : "560.35.03"
},
"imex" : {
"name" : "Mapping GPU memory over NVLink",
"version" : "560.35.03"
},
"libcublas" : {
"name" : "CUDA cuBLAS",
"version" : "12.6.1.4"
},
"libcufft" : {
"name" : "CUDA cuFFT",
"version" : "11.2.6.59"
},
"libcufile" : {
"name" : "GPUDirect Storage (cufile)",
"version" : "1.11.1.6"
},
"libcurand" : {
"name" : "CUDA cuRAND",
"version" : "10.3.7.68"
},
"libcusolver" : {
"name" : "CUDA cuSOLVER",
"version" : "11.6.4.69"
},
"libcusparse" : {
"name" : "CUDA cuSPARSE",
"version" : "12.5.3.3"
},
"libnpp" : {
"name" : "CUDA NPP",
"version" : "12.3.1.54"
},
"libnvfatbin" : {
"name" : "Fatbin interaction library",
"version" : "12.6.68"
},
"libnvidia_nscq" : {
"name" : "NvSwitch Library",
"version" : "560.35.03"
},
"libnvjitlink" : {
"name" : "JIT Linker Library",
"version" : "12.6.68"
},
"libnvjpeg" : {
"name" : "CUDA nvJPEG",
"version" : "12.3.3.54"
},
"libnvsdm" : {
"name" : "CUDA NVSDM",
"version" : "560.35.03"
},
"nsight_compute" : {
"name" : "Nsight Compute",
"version" : "2024.3.1.2"
},
"nsight_systems" : {
"name" : "Nsight Systems",
"version" : "2024.4.2.133"
},
"nvidia_driver" : {
"name" : "NVIDIA Linux Driver",
"version" : "560.35.03"
},
"nvidia_fs" : {
"name" : "NVIDIA file-system",
"version" : "2.22.3"
}
}
Информацию о пакетах nvidia, имеющихся в системе можно также по команде
dpkg -l | grep nvidia
например, для системы с драйвером версии 560.35.03:
ii libnvidia-cfg1-560:amd64 560.35.03-0ubuntu1 amd64 NVIDIA binary OpenGL/GLX configuration library ii libnvidia-common-560 560.35.03-0ubuntu1 all Shared files used by the NVIDIA libraries rc libnvidia-compute-535:amd64 535.183.01-0ubuntu0.24.04.1 amd64 NVIDIA libcompute package rc libnvidia-compute-535-server:amd64 535.183.06-0ubuntu0.24.04.1 amd64 NVIDIA libcompute package ii libnvidia-compute-560:amd64 560.35.03-0ubuntu1 amd64 NVIDIA libcompute package ii libnvidia-compute-560:i386 560.35.03-0ubuntu1 i386 NVIDIA libcompute package ii libnvidia-decode-560:amd64 560.35.03-0ubuntu1 amd64 NVIDIA Video Decoding runtime libraries ii libnvidia-decode-560:i386 560.35.03-0ubuntu1 i386 NVIDIA Video Decoding runtime libraries ii libnvidia-encode-560:amd64 560.35.03-0ubuntu1 amd64 NVENC Video Encoding runtime library ii libnvidia-encode-560:i386 560.35.03-0ubuntu1 i386 NVENC Video Encoding runtime library ii libnvidia-extra-560:amd64 560.35.03-0ubuntu1 amd64 Extra libraries for the NVIDIA driver ii libnvidia-fbc1-560:amd64 560.35.03-0ubuntu1 amd64 NVIDIA OpenGL-based Framebuffer Capture runtime library ii libnvidia-fbc1-560:i386 560.35.03-0ubuntu1 i386 NVIDIA OpenGL-based Framebuffer Capture runtime library ii libnvidia-gl-560:amd64 560.35.03-0ubuntu1 amd64 NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD ii libnvidia-gl-560:i386 560.35.03-0ubuntu1 i386 NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD rc nvidia-compute-utils-535 535.183.01-0ubuntu0.24.04.1 amd64 NVIDIA compute utilities rc nvidia-compute-utils-535-server 535.183.06-0ubuntu0.24.04.1 amd64 NVIDIA compute utilities ii nvidia-compute-utils-560 560.35.03-0ubuntu1 amd64 NVIDIA compute utilities rc nvidia-dkms-535 535.183.01-0ubuntu0.24.04.1 amd64 NVIDIA DKMS package rc nvidia-dkms-535-server 535.183.06-0ubuntu0.24.04.1 amd64 NVIDIA DKMS package ii nvidia-dkms-560 560.35.03-0ubuntu1 amd64 NVIDIA DKMS package ii nvidia-driver-560 560.35.03-0ubuntu1 amd64 NVIDIA driver metapackage ii nvidia-firmware-560-560.35.03 560.35.03-0ubuntu1 amd64 Firmware files used by the kernel module rc nvidia-kernel-common-535 535.183.01-0ubuntu0.24.04.1 amd64 Shared files used with the kernel module rc nvidia-kernel-common-535-server 535.183.06-0ubuntu0.24.04.1 amd64 Shared files used with the kernel module ii nvidia-kernel-common-560 560.35.03-0ubuntu1 amd64 Shared files used with the kernel module ii nvidia-kernel-source-560 560.35.03-0ubuntu1 amd64 NVIDIA kernel source package ii nvidia-prime 0.8.17.2 all Tools to enable NVIDIA's Prime ii nvidia-settings 560.35.03-0ubuntu1 amd64 Tool for configuring the NVIDIA graphics driver ii nvidia-utils-560 560.35.03-0ubuntu1 amd64 NVIDIA driver support binaries ii screen-resolution-extra 0.18.3 all Extension for the nvidia-settings control panel ii xserver-xorg-video-nvidia-560 560.35.03-0ubuntu1 amd64 NVIDIA binary Xorg driver
При необходимости, удалить все драйвера nvidia в linux можно командой:
sudo apt --purge remove "*nvidia*" "libxnvctrl*"
Все файлы cuda удаляются командой:
sudo apt --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
Все каталоги cuda удаляются командой:
sudo rm -rf /usr/loca/cuda*

Еще одним действенным способом решения проблем с запуском приложений, созданных для разных версий CUDA, является применение контейнеров (Docker и nvidia-docker):



