目录
GPU
显卡是我们平时说的GPU,现在大多数的电脑使用NVIDIA公司生产的显卡;常见的型号有Tesla V100,GTX950M,GTX1050TI,GTX1080等。
显卡驱动Driver
特指NVIDIA的显卡驱动程序。
CUDA
CUDA是显卡厂商NVIDIA推出的运算平台。CUDA™是一种由NVIDIA推出的通用并行计算架构,是一种并行计算平台和编程模型,该架构使GPU能够解决复杂的计算问题。CUDA英文全称是Compute Unified Device Architecture。
需要知道:CUDA和CUDA Driver显卡驱动不是一一对应的,比如同一台电脑上可同时安装CUDA 9.0、CUDA 9.2、CUDA 10.0等版本。
CUDA Toolkit
NVCC
NVCC就是CUDA的编译器,可以从CUDA Toolkit的/bin目录中获取,类似于gcc就是c语言的编译器。由于程序是要经过编译器编程成可执行的二进制文件,而cuda程序有两种代码,一种是运行在cpu上的host代码,一种是运行在gpu上的device代码,所以nvcc编译器要保证两部分代码能够编译成二进制文件在不同的机器上执行。
cuDNN
CUDA Toolkit和 显卡驱动 的版本对应
每个版本的CUDA Toolkit 都对应一个最低版本的显卡驱动版本(CUDA Driver),详情见下表。显卡驱动下载,CUDA Toolkit下载,显卡驱动安装教程,CUDA Toolkit安装教程1,CUDA Toolkit安装教程2
安装CUDA Driver核心命令:
sudo sh ./NVIDIA-Linux-x86_64-???.??.run
详细教程参考其他博客
需要知道:CUDA Toolkit和显卡驱动有版本的对应关系。
但同时:在同一台机器上(即同一个CUDA Driver版本)可以安装多个版本的CUDA(如CUDA 9.0、CUDA 10.1……只需要满足当前CUDA Driver版本支持安装的CUDA版本即可,满足关系见下图。
我的理解:安装CUDA就是安装CUDA Toolkit(CUDA是运算平台名称、CUDA Toolkit是工具包),就是从官网下载CUDA Toolkit安装.run文件(如cuda_9.0.176_384.81_linux.run)进行安装。
安装成功后,在/usr/local路径下才会有cuda-9.0文件夹,且同时才可以使用nvcc -V可以查询到CUDA版本
上图的官方文档
- Anaconda在安装Pytorch时,会同时用户安装cudatoolkit,如命令
conda install pytorch torchvision torchaudio cudatoolkit=10.1 -c pytorch,其主要包含应用程序在使用CUDA相关的功能时所依赖的动态链接库。conda安装只会安装一些计算库,不会安装编译工具。而官方的cuda包包含的东西会完整一些。 - 使用 Anaconda 安装的 CUDA Toolkit 不位于 lib64 路径中,也不会产生冲突
- 在考虑
pip install tensorflow-gpu安装tensorflow时,如安装TensorFlow2.1,需要安装CUDA Toolkit版本为10.1,而安装Tensorflow1.14.0,则要求cuda==10.0(tensorflow与cuda也有版本兼容问题,官方文档)
查询上图,我们发现需要显卡驱动版本应该大于等于418.96,故系统中的显卡驱动版本应该至少为418.39。 - CUDA Toolkit本地安装包(local)内含特定版本Nvidia显卡驱动的,当在CUDA官网下载CUDA Toolkit后进行安装时会让用户选择安装项。
- 如果想安装其他版本的显卡驱动,则就需要在Nvidia官网自己下载并先安装好(或本机已经安装了合适版本的显卡驱动时),最后在安装CUDA Toolkit时取消安装内置版本的Nvidia显卡驱动。
CUDA / CUDA Toolkit和cuDNN的版本对应
CUDA / CUDA Toolkit和cuDNN之间有版本对应关系。
但同时:同一个CUDA 版本支持安装多个版本的cuDNN(如cuDNN v7.6.4、cuDNN v7.6.3……选择其一安装即可。
cuDNN下载,cuDNN下载安装教程
- 查阅cuDNN下载网站,可以知道,如果目前电脑中安装了CUDA Toolkit=10.1(也就是CUDA10.1),那么cuDNN的可选版本有7.6.4、7.6.3、7.6.2
同上,如需要安装TensorFlow2.1,故我们需要安装CUDA Toolkit=10.1,同时cuDNN就需要从7.6.4、7.6.3、7.6.2这三个版本中选择。
显卡驱动程序的选择


可以查看所下载的驱动版本支持的GPU版本:

nvidia-smi 和 nvcc 结果的版本为何不一致
使用conda命令安装pytorch时候cudatoolkit的版本是哪个?
答: 我们只需要根据项目代码要求来确定cudaoolkit包的版本,安装相应的pytorch即可,如算法需要cuda10.2,那么就可以conda install pytorch torchvision cudatoolkit=10.2 -c pytorch。
上述命令在使conda安装torch时候,会提供一个cudatoolkit工具包,其中包含了CUDA的运行API(主要是一些动态链接库文件libXXXX.so.xxx等),在运行基于pytorch的代码时会使用conda提供的cudatoolkit包,而忽视Nvidia官方的CUDA Toolkit。这也就是为什么有时候我们通过nvcc -V查看的CUDA运行API版本很低(比如7.5),但是能成功运行cuda9.0的pytorch的原因。
但是需要注意: 如果项目代码需要使用python setup.py develop或./make.sh来编译依赖cuda的torch模块(如C语言脚本)时候,这个时候可能会导致错误,错误原因是编译过程使用的是系统自带的CUDA而不是conda安装的CUDA包,当系统自带CUDA版本不支持项目代码时,会引发一些奇怪的问题,所以最好的办法是保持conda安装的cudatoolkit版本与系统自带版本(nvcc -V查看)一致。
那么可能就有人要问了,“不能编译的时候调用conda安装pytorch时附带安装的cudatoolkit吗?”答案是往往不行,因为conda只安装上了部分动态链接文件,只占Nvidia官方CUDA的一小部分,且没有安装开发工具包和驱动程序,而往往编译过程需要依赖其他头文件等,conda安装的cudatoolkit不具备这些头文件等,故不行。
办法也只能是自行安装一个新版本CUDA,具体过程见上文,多版本CUDA管理见下文。
CUDA多版本切换/管理方式
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64 export PATH=$PATH:/usr/local/cuda/bin export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
修改完毕保存,source ~/.bashrc
sudo rm -rf /usr/local/cuda # 删除旧版本的软连接 sudo ln -s /usr/local/cuda-9.1 /usr/local/cuda # 建立新版本的软连接 # 前面的路径是需要的版本的cuda的安装路径。
写在最后
- 在安装Nvidia驱动时,可能会遇到gcc版本过高或较低的问题,可以参考其他文章安装合适版本的gcc,gcc镜像下载,gcc5.4安装教程。
- cuda/cuDNN也可以使用conda安装,即直接使用conda install cuda 和 cudnn,只要注意版本关系即可,详情见。
- 以深度学习为例,当网络模型依赖CUDA时,可以直接用conda安装CUDA(这里安装的只是CUDA的部分,只有部分动态链接库),如
conda install cudatoolkit==XXX,无需安装从 nvidia 官网下载cuda 安装包,但这样做需要确保GPU显卡驱动是已经安装好的。 - 关于安装pytorch和torchvision,安装指定版本的pytorch可以使用
conda install pytorch==XXXX,同样往往需要用到的torchvision也可以用conda安装,需要注意torch、torchvision和python三者间有个版本对应关系,见下表或pytorch-previous-version安装。
| pytorch | torchvision | python | cuda |
|---|---|---|---|
| 1.8.0 | 0.9.0 | >=3.6 | 10.2,11.1 |
| 1.7.1 | 0.8.2 | >=3.6 | 9.2, 10.1,10.2,11.0 |
| 1.7.0 | 0.8.0 | >=3.6 | 9.2, 10.1,10.2,11.0 |
| 1.6.0 | 0.7.0 | >=3.6 | 9.2, 10.1,10.2 |
| 1.5.1 | 0.6.1 | >=3.5 | 9.2, 10.1,10.2 |
| 1.5.0 | 0.6.0 | >=3.5 | 9.2, 10.1,10.2 |
| 1.4.0 | 0.5.0 | ==2.7, >=3.5, <=3.8 | 9.2, 10.0 |
| 1.3.1 | 0.4.2 | ==2.7, >=3.5, <=3.7 | 9.2, 10.0 |
| 1.3.0 | 0.4.1 | ==2.7, >=3.5, <=3.7 | 9.2, 10.0 |
| 1.2.0 | 0.4.0 | ==2.7, >=3.5, <=3.7 | 9.2, 10.0 |
| 1.1.0 | 0.3.0 | ==2.7, >=3.5, <=3.7 | 9.0, 10.0 |
| <=1.0.1 | 0.2.2 | ==2.7, >=3.5, <=3.7 | 9.0, 10.0 |
更多详情见:知乎专栏
对网络上一些言语若有疑问,欢迎在评论区交流 [抱拳][抱拳][抱拳]
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206917.html原文链接:https://javaforall.net
