如何更改CUDA版本

baN*_*aNv 13 linux opencv opencv3.0 caffe

编译修改后的caffe版本时遇到了这个错误.

OpenCV static library was compiled with CUDA 7.5 support. Please, use the same version or rebuild OpenCV with CUDA 8.0

我有一些旧的代码可能与CUDA8.0不兼容,所以我想为这个错误更改我的cuda版本.

我像这样修改了〜/ .bash_profile

# export PYTHONPATH=$PYTHONPATH:/usr/local/cuda-8.0/lib64/
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64
export PYTHONPATH=$PYTHONPATH:/usr/local/cuda-7.5/targets/x86_64-linux/lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-7.5/targets/x86_64-linux/lib/
Run Code Online (Sandbox Code Playgroud)

但它没有用.还是一样的错误.我该怎么办?谢谢.

小智 33

也许更干净:

sudo update-alternatives --display cuda

sudo update-alternatives --config cuda
Run Code Online (Sandbox Code Playgroud)


小智 11

此解决方案解释了如何安装多个不同的 cuda 版本(即 10.2、11.3 和 11.6)并在它们之间进行切换。它是 @wt 的扩展并利用update-alternatives.

Afaik,在 cuda 11.x 之后,Ubuntu 20.04 cuda 安装上的安装将update-alternatives自动添加到维护中。

假设您安装了 cuda 10.2、cuda 11.3 和 cuda 11.6(遵循官方 nvidia 安装指南:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html)。他们都将居住在:

/usr/local/cuda-10.2/...
/usr/local/cuda-11.3/...
/usr/local/cuda-11.6/...
Run Code Online (Sandbox Code Playgroud)

您的update-alternatives遗嘱中有两个条目:

$ sudo update-alternatives --query cuda
...
/usr/local/cuda-11-3 - priority 113
/usr/local/cuda-11-6 - priority 116
Run Code Online (Sandbox Code Playgroud)

解决方案 1:如果您想使用,请update-alternatives确保您的 cuda符号链接指向/etc/alternatives/cuda.

# Change the symbolic link target.
$ sudo ln -sfT /etc/alternatives/cuda /usr/local/cuda
Run Code Online (Sandbox Code Playgroud)
# Check the path.
$ ll /usr/local/cuda

lrwxrwrwrwx 1 root root /usr/local/cuda -> /etc/alternatives/cuda/
Run Code Online (Sandbox Code Playgroud)

现在,剩下的就是确保/etc/alternatives/cuda指向您要使用的版本,例如 11.3。

您可以通过以下方式进行更新:

$ sudo update-alternatives --config cuda
Run Code Online (Sandbox Code Playgroud)

并按照说明更改版本。

检查路径:

$ ll /etc/alternatives/cuda

lrwrwrwrwx root root /etc/alternatives -> /usr/local/cuda-11.3
Run Code Online (Sandbox Code Playgroud)

快完成了。

并始终确保PATHs在您的~/.bashrc.

解决方案 2: 直接将/usr/local/cuda符号链接设置为正确的版本。

$ ln -sfT /usr/local/cuda-11.3 /usr/local/cuda
Run Code Online (Sandbox Code Playgroud)

重新启动机器并仔细检查一切设置是否正确:

$ nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May3 19:15:14_PDT_2021
Cuda compilation tools, release 11.3 V11.3.109
Build cuda 11.3.r11.3/compiler.29920130_0
Run Code Online (Sandbox Code Playgroud)


rke*_*erm 9

将您的CUDA软链接更改为指向所需的CUDA版本.例如:

ll/usr/local/cuda lrwxrwxrwx 1 root root 19 Sep 06 2017/usr/local/cuda - > /usr/local/cuda-8.0/

只需重新链接即可

ln -s /usr/local/cuda-7.5/usr/local/cuda

(具有正确的安装位置)

  • 您还可以使用 `sudo ln -sf` 来创建或更新符号链接(如果它已经存在)。那么你就不需要 `rm` 命令了。 (5认同)
  • 如果使用`ln -s`命令,如果符号链接已存在则失败.所以用一个简单的`sudo rm/usr/local/cuda`删除旧的符号链接.(一如既往,使用`sudo rm`时要非常小心你的路径!) (3认同)

pho*_*ho7 8

也许有点晚了,但我认为它可能对遇到这个问题的任何人都有帮助。我编写了一个简单的 bash 脚本,用于在当前 bash 会话中切换到不同版本的 CUDA :https : //github.com/phohenecker/switch-cuda