显卡驱动是我们使用显卡的最基础的条件,没有显卡驱动就没有办法使用显卡;但是,对于机器学习或者深度学习环境的配置来说,不必过多的关注显卡驱动,我们要做的只是要看看我们的显卡驱动是不是版本过低,因为每一个版本的 cuda toolkit 都有一个最低版本的显卡驱动要求【如果版本过低或者不是 NVIDIA 驱动,因为CUDA Toolkit本地安装包内含特定版本Nvidia显卡驱动,下面安装 cuda 中可以选择更新显卡驱动】
如下所示,展示了每一个 cuda 版本对显卡驱动的最低要求,通常来说,我们的显卡版本只要高于这个要求,就可以不在关注显卡驱动的问题
cuda toolkit installer
: 主要包含了 CUDA-C 和 CUDA-C++ 编译器、一些科学库和实用程序库、CUDA 和library API 的代码示例、和一些 CUDA 开发工具。 cuda toolkit installer
集成了 cuda driver
,因此默认情况下会安装【有关他们之间的关系,看下一小节】;但是通常情况下,我们可能只会安装 cuda driver api
,因为这个就可以满足我们日常的需求nvidia-smi
显示的 cuda 版本问题nvidia-smi
命令的时候,会出现 cuda 版本号nvcc -V
和 nvidia-smi
【以下内容的参考地址】
nvcc
属于 cuda 的编译器,将程序编译成可执行的二进制文件;而 nvidia-smi
是 NVIDIA System Management Interface
,是一种命令行使用工具,用来帮助管理和监控 NVIDIA GPU 设备;runtime api
和 driver api
两种,分别有对应的 cuda 版本;前者是 nvcc
种看到的,后者是 nvidia-smi
种看到的driver api
的必要文件是 GPU driver installer
安装;用于支持 runtime api
的必要文件由 cuda toolkit installer
安装;而 nvcc
是与后者一起安装的 cuda compiler-driver tool,所以 nvcc
反应的是 runtime api
的版本cuda toolkit installer
是集成了 GPU driver installer
的;这个在我们安装 cuda 的时候应该会注意到,会询问我们是不是要安装显卡驱动;如果我们选择安装显卡驱动,那么这两个命令显示的 cuda 版本应该是一致的,否则可能不一致;但是 driver api
版本的 cuda 通常会向下兼容 runtime apt
版本的 cuda,所以一般来说,只要 nvidia-smi
显示的 cuda 版本大于 nvcc
显示的 cuda 版本,基本上就不会出现什么问题;// 创建虚拟环境,可以自己制定 Python 版本
conda create -n your_env_name python=3.6
// 进入虚拟环境
conda activate your_env_name
// 退出虚拟环境
conda deactivate
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/
conda config --set show_channel_urls yes
conda install tensorflow-gpu==1.13.1
安装步骤
sudo sh cuda_10.0.130_410.48_linux.run
安装Do you accept the previously read EULA?
accept/decline/quit: accept #同意
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit: n # 如果你的驱动版本是够用的,选择 n ;否则选择 y
Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: y #选择yes 安装cuda
Enter Toolkit Location
[ default is /usr/local/cuda-10.0 ]: # Enter
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y #选择yes 建立cuda软链接
Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: y #选择yes 安装cuda 样例程序
Enter CUDA Samples Location
[ default is /home/adminpc ]: # Enter
Missing recommended library: libGLU.so
Missing recommended library: libX11.so
Missing recommended library: libXi.so
Missing recommended library: libXmu.so
#安装缺少的依赖包
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
#再次执行安装
sudo sh cuda_10.0.130_410.48_linux.run
sudo gedit ~/.bashrc
打开文件;export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda
source ~/.bashrc
来使得环境变量生效首先要知道自己需要的是哪一个版本的 cudnn
官网下载对应版本的 cudnn,下载之后解压;
解压之后的文件夹中包含有 include
和 lib64
两个文件夹,将这两个文件夹中的内容分别添加到 cuda 安装路径中的 include
和 lib64
中;通常,cuda 的安装路径是 /usr/local/cuda-10.0/
给新添加的文件增加可执行权限
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
到目前位置,就配置好了 TensorFlow 以及环境
测试,观察运行在 CPU 还是 GPU 上
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='1'
a=tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[2,3],name='a')
b=tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[3,2],name='b')
c=tf.matmul(a,b)
sess=tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))
GPU 不能使用可能的原因
nvcc -V
进行检查问题 ImportError: libcublas.so.10.0: cannot open shared object file: No such file or directory,可能的原因:【此处参考地址】
LD_LIBRARY_PATH=/usr/local/cuda/lib64
/usr/local
路径下看到多个类似 cuda-10.0
的文件夹,这些文件夹分别对应不同的 cuda 版本;同时我们可以看到一个 cuda
的软连接sudo rm -rf cuda # 删除旧版本的软连接
sudo ln -s /usr/local/cuda-9.1 /usr/local/cuda # 建立新版本的软连接
# 前面的路径是需要的版本的cuda的安装路径。
sudo apt-get install gcc-7 g++-7
# 设置 gcc 优先级
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 1
# 设置 g++ 优先级
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 1
# 查看 gcc 优先级
sudo update-alternatives --display gcc
# 查看 g++ 优先级
sudo update-alternatives --display g++
cudatoolkit
的文件,这个文件是 cuda toolkit installer
这个官方的简化版cudatoolkit
和 cudnn
,这样我们就可以非常方便地使用多个版本的 cuda,而不需要每次都手动处理软连接的问题