最近开始学习pytorch深度学习框架,CPU版本安装之后跑demo风雨无阻,可是想使用更牛的GPU进行训练时,遇到了一些不理解的地方。
在进行环境搭建的时候,一般需要安装显卡驱动、cuda、cudnn等这些常见的组件,但是并不知道他们的作用是什么,为什么要安装这些?
概念区分
-
显卡
输出显示图形的任务,计算机组成成分之一,市面上常见的显示芯片(GPU)主要有NVADIA和AMD两大厂商,就是我们常见的N卡和A卡。
-
GPU
Graphic Processing Unit(图形处理器),显卡上的一块芯片,CPU主要进行串行计算,GPU进行并行计算,因此在进行深度学习时,GPU的计算效率要更高一些,训练模型的速度也是CPU的好几倍。
-
显卡驱动
CPU控制GPU的软件
-
集显、核显和独显
集成显卡,核芯显卡,和独立显卡。集成显卡在主板上,核芯显卡整合在CPU上,独立显卡作为单独的一块硬件可以随时插入主板。
-
CUDA
NVIDIA推出的运算平台,可以理解为一种编程语言。该架构使GPU能够解决复杂的计算问题,在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。
-
cuDNN
cuDNN是一个NVIDIA开发的基于CUDA的深度学习GPU加速库,非必须,但是一般都安装。
-
CUDA Toolkit
CUDA Toolkit官网上列举出了一些cuda组件:
注:
-
cuda是一个工具包,可以安装不同版本,根据自己的使用场景下载安装。显卡驱动只有一个,一般更新到最新版本可以向下兼容不同版本的cuda。
-
运行cuda应用需要系统至少有一个可以支持cuda的gpu和与 CUDA Toolkit 兼容的驱动程序,cuda自11.0之后的版本工具包的组件拥有自己单独的版本。
-
nvcc
和nvidia-smi
显示CUDA版本不同?stackoverflow上的一个解释:https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi
知乎大神的详细解释:https://zhuanlan.zhihu.com/p/91334380
看过之后我的理解:
CUDA有两个主要的API:runtime(运行时) API和driver API。这两个API都有对应的CUDA版本(如9.2和10.0等)。
- 驱动程序安装之后用于支持driver API,nvidia-smi属于这一类
- cuda toolkit安装后用于支持runtime API,(toolkit有时会集成了驱动的安装程序),nvcc与toolkit一起安装,显示的版本是自身构建时的cuda版本,它不知道安装了什么版本的GPU driver,甚至不知道是否安装了GPU driver。
这两个API的其他区别可以在官网找到:https://docs.nvidia.com/cuda/cuda-runtime-api/driver-vs-runtime-api.html#driver-vs-runtime-api
-
conda安装的CUDA和NVIDIA官网下载安装的CUDA有什么区别?
在使用pytorch过程中,发现在安装过程中会通过Anaconda安装cuda toolkit,这只会安装所依赖的动态链接库,不会安装驱动程序,安装完成后,只要系统存在与toolkit兼容的驱动,就可以运行。
可以理解为:
手动安装NVIDIA官网的cuda toolkit > 安装深度学习框架时anaconda安装的cuda toolkit
开始配置
GEFORCE EXPERIENCE查看驱动程序版本,先点小齿轮,就可以看见版本信息。
在官方网站上可以看到,驱动程序对应的cuda版本,最适合我的是这个红框标明的位置
碰巧的是,我的笔记本自带了显卡驱动,cmd进入路径C:\Program Files\NVIDIA Corporation\NVSMI
,通过nvidia-smi
可以看到
因此直接去pytorch官网找到对应版本的pytorch安装就可以了
在pycharm的Terminal中复制上述指令,漫长的等待之后,就可以使用啦!检查方法:在python console里输入下述指令
import torch
torch.cuda.is_available()
实际上,我的安装过程可以理解为,发现电脑自带驱动,项目安装pytorch(框架开发者在安装过程中整合了cuda toolkit的安装)