本文系统ubuntu18
首先明白三个概念。
- GPU
- CUDA driver
- CUDA Toolkit
这三个都有各自的版本,以至于适配起来很麻烦。
GPU
就是我们的硬件。每个电脑的显卡型号不同,比如我的是GeForce 1070TI。这个都是买电脑的时候就确定的,没什么可说。
查看版本命令:
lspci | grep -i vga
CUDA driver
CUDA driver是驱动程序,驱动用于电脑正常显示图片、视频等文件。这里额外的介绍一下硬件驱动的作用,这样就可以明白ta到底有什么用。
驱动的作用?
比如,对于鼠标而言有鼠标驱动。不安装,即使插上鼠标也不能移动。(但是目前装系统都自带了鼠标、键盘等外设的驱动,否则都是需要下载的。)
音响有音响的驱动,新买的电脑插上音响没声音,大部分是因为没装驱动。
打印机也有各自的驱动,想要使用打印机必须先安装对应的驱动。驱动的第一个作用就是让操作系统识别到硬件设备。拿打印机而言,不装对于的驱动,系统会警告识别不出设备。(惠普打印机常常让人头疼)
更好的叫法:是GPU driver 或者显卡 driver(硬件名+驱动)。另一方面避免和toolkit混淆。
查看版本命令:
nvidia-smi
CUDA toolkit
简单来说,就是开发CUDA程序所需要的套件。为啥CUDA toolkit和CUDA driver造成混淆,原因如下:
- 安装CUDA toolkit时,有些安装方式会同时安装CUDA driver和CUDA toolkit。
- 名字里都有CUDA。所以我习惯叫GPU驱动。
CUDA toolkit里面包含了很多东西,nvcc编译器、调试器、IDE等等。
类比:
安装了一个VS2015,里面包含了C++开发的所有东西。
此时C++的编译器对应于nvcc编译器。安装VS的同时会自带一些C++的标准库,对应于NVCC里自带的CUDA扩展。
安装了一个anaconda,里面包含了python的解释器,以及numpy等等。(当然对比VS更合理)
这时候就可以引入cuDNN了。安装CUDA toolkit里并没有包含所有库,只是一些必要的库。比如anaconda里并没有pytorch这个东西。所里需要这个库的时候,要额外安装。
nvcc -V
CUDA runtime API和CUDA driver API的区
CUDA driver API对应于CUDA driver。
CUDA runtime API 对应于CUDA toolkit。
类比:
直接操作CPU需要通过汇编语言,后来一些人开发了更高层的C和C++,间接控制CPU。
把这句话换成GPU版本如下
直接操作GPU需要通过CUDA driver API,后来一些人开发了更高层的CUDA runtime API,间接控制GPU。
当然这种说法不是特别严谨,但是这些API之间的位置就是这样的。
runtime API版本查看
#其实就是上面的 toolkit版本
nvcc -V
driver API版本查看
nvidia-smi
重装是安装cudalib失败