一、首先要搞清楚的问题
1) 关于显卡驱动
显卡驱动是我们使用显卡的最基础的条件,没有显卡驱动就没有办法使用显卡;但是,对于机器学习或者深度学习环境的配置来说,不必过多的关注显卡驱动,我们要做的只是要看看我们的显卡驱动是不是版本过低,因为每一个版本的 cuda toolkit 都有一个最低版本的显卡驱动要求【如果版本过低或者不是 NVIDIA 驱动,因为CUDA Toolkit本地安装包内含特定版本Nvidia显卡驱动,下面安装 cuda 中可以选择更新显卡驱动】
- 显卡驱动版本一定不能低,而且支持向后兼容,因此越高越好
如下所示,展示了每一个 cuda 版本对显卡驱动的最低要求,通常来说,我们的显卡版本只要高于这个要求,就可以不在关注显卡驱动的问题
2) 关于 cuda 和 cudnn 【这一部分参考地址】
- cuda: CUDA是一个并行计算平台和编程模型,能够使得使用GPU进行通用计算变得简单和优雅【官方说法】
cuda toolkit installer
: 主要包含了 CUDA-C 和 CUDA-C++ 编译器、一些科学库和实用程序库、CUDA 和library API 的代码示例、和一些 CUDA 开发工具。cuda toolkit installer
集成了cuda driver
,因此默认情况下会安装【有关他们之间的关系,看下一小节】;但是通常情况下,我们可能只会安装cuda driver api
,因为这个就可以满足我们日常的需求- cudnn:全称为NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络中的基础操作而设计基于GPU的加速库。cudnn 为深度神经网络中的标准流程提供了高效的实现方法;
- cuda 与 cudnn 关系:【知乎上的解释】CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。
3)关于 nvidia-smi
显示的 cuda 版本问题
- 如下图所示,在使用
nvidia-smi
命令的时候,会出现 cuda 版本号
- 这里区分一下
nvcc -V
和nvidia-smi
【以下内容的参考地址】nvcc
属于 cuda 的编译器,将程序编译成可执行的二进制文件;而nvidia-smi
是NVIDIA System Management Interface
,是一种命令行使用工具,用来帮助管理和监控 NVIDIA GPU 设备;- cuda 有
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 版本,基本上就不会出现什么问题;
4)TensorFlow, cuda 以及 cudnn 版本对应关系
- 首先在官方网站可以查看对应关系【只截取了比较新的版本】
- 我们在做项目或者拷贝别人的项目的时候,首先要考虑的是 TensorFlow 的版本,然后根据 TensorFlow 的版本确定好自己需要的 Python,cuda 以及 cudnn 的版本
二、配置环境
1)安装 anaconda & 创建虚拟环境
- 对于机器学习或者深度学习来说使用 anaconda 是非常方便的,因为我们不同的项目往往需要不同的环境,我们不可能根据一个项目的要求配置环境,其他的不管了,这样的话其他的项目可能就废了;使用 anaconda 我们可以为每一个要求不同环境的项目构建一个虚拟环境,这样我们本地就可以同时存在多个虚拟环境,不同的项目可以使用自己的环境配置
- 在官网下载自己所用系统的、最新版本的 anaconda,在本地安装即可;如果遇到问题,可以网上搜索一下
- 安装成功之后,Linux 系统的用户可以使用下面的命令创建并进入虚拟环境,其他用户自行查找
// 创建虚拟环境,可以自己制定 Python 版本
conda create -n your_env_name python=3.6
// 进入虚拟环境
conda activate your_env_name
// 退出虚拟环境
conda deactivate
- 可以将 conda 的更新源切换为国内源,下载速度立马加快数倍
conda config --add channels https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu/anaconda/cloud/pytorch/linux-64/
conda config --set show_channel_urls yes
2) 安装 TensorFlow
- 在安装 TensorFlow 之前,确定好两个问题:1)安装哪一个版本的 TensorFlow;2)现在是不是在虚拟环境中,如果不是,参考上一步
- 使用下面的命令安装对应版本的 TensorFlow
conda install tensorflow-gpu==1.13.1
3) 安装 cuda
- 在安装 cuda 之前,首先要根据 TensorFlow 确定所要安装的 cuda 版本,这里使用的是 10.0 版本
安装步骤
- 官网下载对应版本的 cuda 版本,之后使用命令
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
- 如果总是显示缺少依赖包,同时上面的方法不起作用,但是 cuda 显示已经安装了,就可以暂时先不管它,继续做后面的工作
- 添加到环境变量
- 使用命令
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
来使得环境变量生效
4) 安装 cudnn
-
首先要知道自己需要的是哪一个版本的 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*
5) 其他问题
-
到目前位置,就配置好了 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 不能使用可能的原因
- cuda, cudnn, python, tensorflow 的版本不匹配,检查自己的版本是不是有问题
- cuda 有没有安装好,使用
nvcc -V
进行检查 - cuda 的路径是不是已经添加到环境变量
-
问题 ImportError: libcublas.so.10.0: cannot open shared object file: No such file or directory,可能的原因:【此处参考地址】
- TensorFlow 与 cuda 版本不一致
- 系统找不到 cuda;需要添加到环境变量
- pycharm 中出现这种错误可以给 pycharm 中添加环境变量
LD_LIBRARY_PATH=/usr/local/cuda/lib64
三、多个版本的 cuda 使用方案
- 当安装多个版本的 cuda 的时候,我们可以在
/usr/local
路径下看到多个类似cuda-10.0
的文件夹,这些文件夹分别对应不同的 cuda 版本;同时我们可以看到一个cuda
的软连接 - 多个版本的 cuda 方案是:1)将软连接作为路径写入 cuda 的环境变量 2)想要切换 cuda 版本的时候,将软连接的链接对象切换为对应版本即可
sudo rm -rf cuda # 删除旧版本的软连接
sudo ln -s /usr/local/cuda-9.1 /usr/local/cuda # 建立新版本的软连接
# 前面的路径是需要的版本的cuda的安装路径。
四、gcc 版本过高问题
- Ubuntu 20.04 默认的 gcc 版本是 gcc 9.3,有时候就需要主动降低 gcc 版本;这个修改 gcc 版本可能让一些不了解的人担心会出现问题,其实完全不需要担心,Ubuntu 可以存在多个版本的 gcc,下载一个低版本的 gcc,暂时作为默认版本即可;这一部分的参考文章
- 安装 gcc-7
sudo apt-get install gcc-7 g++-7
- 设置 gcc 和 g++ 的优先级
# 设置 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++
五、pytorch 中 cuda 问题
- 本节参考地址
- pytorch 的环境是比较好配置的,因为默认会使用 conda 下载一个叫做
cudatoolkit
的文件,这个文件是cuda toolkit installer
这个官方的简化版
- 从上面也可以看出,在搭建环境的时候,我们可以在虚拟环境中安装不同版本的
cudatoolkit
和cudnn
,这样我们就可以非常方便地使用多个版本的 cuda,而不需要每次都手动处理软连接的问题 - 这篇文章是一个参考;这篇文章是使用 conda 搭建 TensorFlow 环境
更多推荐
TensorFlow 以及 cuda 和 cudnn 的环境配置问题
发布评论