配置GPU环境
匹配版本
版本匹配是配制GPU环境的重要前题。特别是使用Tensorflow版本的小伙伴。下面两个图是匹配各个CUDA的版本对应表。
Linux/Windows
MACOS
对mac没研究过,待后续补充-.-!
配置过程
在了解版本对应关系后就要开始配置GPU了,当然在这之前可以决定是否创建新的python环境。
1.新建环境:conda create -n xxx python=3.8
(注:xxx为你自己新建环境名字,可以自己取,后面都用xxx代替)
2.激活环境:因为服务器一般是Linux,所以使用命令 :source activate xxx
`
检查版本
默认电脑或服务器安装了N卡驱动,这样就可以在终端中输入nvidia-smi,看右上角的CUDA Version对应的版本,显示如图:
面板显示CUDA Version 为11.0,这样后续所有的内容都将为11.0版本的CUDA服务。
下载安装CUDA
1、到cuda下载对应的版本。
https://developer.nvidia.com/cuda-toolkit-archive 安装:
sudo sh cuda_11.0.89_440.33.01_linux.run
2、如果安装提示gcc版本问题:
Failed to verify gcc version.See log at /var/log/cuda-installer.log for details.
解决方式1:cat /var/log/cuda-installer.log 则会看到问题及解决方法,执行时加上 --override 来忽略gcc版本不匹配问题。
sudo sh cuda_11.0.89_440.33.01_linux.run --override
解决方式2:gcc降级。
开始执行时先accept接受协议许可,然后选择安装项
Driver驱动已经安装过了,这里不再对Driver进行选择会重新安装驱动(安装过程未截图,该图摘自网络),因为以前已经安装过驱动程序了,在此只选择CUDA Toolkit选项,其它取消即可(enter键)。如果以前安装过cuda,则安装过程会提示cuda符号链接已经存在了,是否覆盖,选择是或继续即可。
选择install,等待安装完成。
3,配置cuda环境变量
gedit ~/.bashrc
或者vim ~/.bashrc
在末尾加上以下内容(按o):
export PATH=/usr/local/cuda-11.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH
保存退出(:wq)后使环境变量生效:
$ source ~/.bashrc
安装CUDNN
链接:https://developer.nvidia.com/rdp/cudnn-download 安装cudnn,即把解压出的cuda目录中相关的cudnn的头文件及库文件拷贝到安装的cuda目录即可。
tar -xzvf cudnn-11.0-linux-x64-v7.2.1.38.tgz
cudnn在第1步已经解压出cuda目录,拷贝到cuda的安装目录:
然后在当前路径输入命令:
复制文件:
sudo cp cuda/include/cudnn.h /usr/local/cuda-11.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.0/lib64
添加读取权限:
sudo chmod a+r /usr/local/cuda-11.0/include/cudnn.h /usr/local/cuda-11.0/lib64/libcudnn*
至此全部成功安装。
安装tensorflow和pytorch
个人建议使用pip安装tensorflow,虽然慢但是出BUG机会小
pip install tensorflow-gpu==版本号
对于pytorch, 可进入torch官网下载安装
寻找到适合CUDA版本的torch安装命令,进行安装。(注:torch版本支持向下兼容)
检验是否安装成功
1、CUDA检测:
nvcc -V
2、tensorflow:
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
3、pytorch:
#判断是否安装了cuda
import torch
print(torch.cuda.is_available()) #返回True则说明已经安装了cuda
#判断是否安装了cuDNN
from torch.backends import cudnn
print(cudnn.is_available()) #返回True则说明已经安装了cuDNN