CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。
在安装CUDA之前,请确认你的NVIDIA驱动安装是没有问题的。
lspci|grep NVIDIA
如果安装有问题,可以参考 NVIDIA驱动安装-从问题到解决(Linux/Ubuntu) 进行安装。
首先我们先下载CUDA toolkit。我选择使用runfile方式进行安装。
下载好之后,不建议使用官网中的代码,而类似NVDIA驱动安装的代码(亲测有效):
sudo chmod +x cuda_11.0.3_450.51.06_linux.run
sudo ./cuda_11.0.3_450.51.06_linux.run
如果有协议,输入accept就行。然后进入这一步:
在这一步中,你需要把Driver给去掉,否则会报错。因为已经装了Driver了,所以再次安装会起冲突。我暂时不知道英伟达为什么要把驱动和CUDA捆绑在一起。
去掉之后选Install,稍等一会儿,就能安装成功了。
warning里面关于CUDA driver的内容不用管,说的就是没装NVIDIA driver。
如果你在安装完成后使用nvcc -V,你依然会显示文章开头那个报错信息。你可以能会有疑问:明明我都装上了啊,安装完成的信息还告诉我CUDA安装在“/usr/local/cuda-11.0/”,甚至我还能看到它,可是为什么它运行不了呢?
不信你看第三行
答案是:shell没有能够识别到nvcc这个文件。
如果我们要让shell识别到它,需要在环境变量中加入对应路径变量。
Please make sure that: - PATH ... - LD_LIBRARY_PATH ...
解释一下shell,环境变量和路径变量这三个名词。
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。换句话说,Shell是Linux/Unix的一个外壳,它负责外界与Linux内核的交互,接收用户或其他应用程序的命令,然后把这些命令转化成内核能理解的语言,传给内核,内核是真正干活的,干完之后再把结果返回用户或应用程序。
环境变量是当前环境下的参数或者变量,或者说是指在操作系统中用来指定操作系统的一些参数。
路径变量(PATH)是最常见的环境变量。它的用途就是当用户要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还要到PATH变量中指定的路径去寻找。用户可以通过设置PATH变量,来更方便地运行进程。例如,当我们在windows中将Python安装好后,如果直接在CMD中输入 python,它会提示:“Python不是内部或外部命令,也不是可运行的程序或批处理文件。”这时候我们就需要将Python中bin目录的路径加入到PATH变量中去。(如果你没有出现这个错误,说明安装程序已经自动帮你添加了路径变量。)
那么问题来了,在Linux中如何配置路径变量呢?
Linux下配置环境变量最常用的两种方法:修改~/.bashrc或/etc/profile。
~/.bashrc:该文件包含专用于某个用户的bash shell的bash信息,当该用户登录时以及每次打开新的shell时,该文件被读取。
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量。
在这里我们使用第一种方法,使用gedit修改.bashrc文件。
sudo gedit ~/.bashrc
在最后一行加入路径:
export PATH="/usr/local/cuda-11.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH"
保存之后,为了使这个修改立即生效,还需要输入如下代码(如果不执行 source 命令,则需重启系统才能生效):
source ~/.bashrc
nvcc -V
注意这个V是大V。
如果你能看到下面的版本信息,说明你成功安装了CUDA。
恭喜你完成安装!
由于pytorch并没有支持到CUDA11.0,因此卸载并重新安装。
输入如下代码:
cd /usr/local/cuda-11.0/bin/
sudo ./cuda-uninstaller
sudo rm -rf /usr/local/cuda-11.0
如果你需要安装cuDNN,可以参考另一篇文章NVIDIA cuDNN v8 deb方法安装教程(Linux/Ubuntu)。