cuda版本与pytorch版本依赖关系 cuda8.0 pytorch
cuda版本与pytorch版本依赖关系 cuda8.0 pytorch
我是想安装pytorch
。需要用anaconda
(比较强大)
-
NVIDIA CUDA 7.5 or above
-
NVIDIA cuDNN v6.x or above
由于anaconda比较简单。本文重点说明CUDA、cuDNN和pytorch的安装,可直接看对应部分。
ps:如果你们配置成功了或者出现了什么问题,希望能留下言啊,我可以改正,以防误导。
ps:可以用pip安装.xml版本
,这里太长,在下一篇文章中说明
ps:更新:pytorch
直接官网pip
或者conda
安装非常方便:https://pytorch.org
一、cuda8.0安装:
此部分以下参考地址并结合自己的安装情况进行更改如下:
http://www.mamicode.com/info-detail-2021440.html
关于 CUDA
的安装,网上有特别多的安装帖子,也很乱,哈哈。CUDA
这个东西需要依赖的、牵着的东西特别多,如果没有做好检查,则在安装时候特别容易出现各种各样的冲突,且一旦冲突发生,即使卸载CUDA
也不能解决问题,只能重装系统。
我最后就是参考CUDA
的官方文档安装成功的。
总结一下,我的安装建议是:
-
在安装之前一定要详细检查自己的系统环境、软件是否符合
CUDA
的安装要求。不要存有侥幸心理,跳过检查步骤。 -
每进行一项操作,都检查一下该项操作是否成功。
安装CUDA主要分三大环节。
一、安装前的环境准备和检查
二、安装CUDA
三、安装完的校验。
一、安装前的环境准备和检查
1、安装Ubuntu系统14.04
新安装完的14.04
系统会提示很多更新项。网上有很多帖子说不建议更新,说更新过后会导致安装CUDA
发生系统界面循环登录的问题。但是我更新后,并没有遇到任何问题。
2、检查自己的电脑环境是否具备安装CUDA的条件
a) 检查自己的GPU是否是CUDA-capable
在终端中输入:
lspci | grep -i nvidia
如下为英伟达显卡计算力官网查询地址,可查询CUDA
支持的不同显卡的计算能力列表。
https://developer.nvidia.com/cuda-gpus
深度学习中我们对GPU的计算能力一般是要求大于5.0,具体情况具体分析,低于5.0也并非一定不可以。
几款科学计算显卡对比
b) 检查自己的Linux版本是否支持 CUDA(Ubuntu 14.04没问题)
c) 检查自己的系统中是否装了gcc
在终端中输入: gcc --version
可以查看自己的gcc版本
信息(英文输入法下的-)
没有的话可以通过 sudo apt-get install gcc
安装。
d) 检查是否安装了kernel header和 package development
在终端中输入:
uname -r
可以查看自己的kernel版本信
息,我的为4.4.0-133-generic
(记住自己的版本,后面4.a
)禁用 nouveau
需要用到)。
在终端中输入:
sudo apt-get install linux-headers-$(uname -r)
可以安装对应kernel版本
的kernel header
和package development
以上检查我的电脑系统都满足要求,如果没有满足要求的话,可以参考cuda
的官方文档,里面有详细的针对每个问题的解决方案。
3、 选择安装方式和准备
CUDA
提供两种安装方式:package manager安装
和runfile
.此处只介绍runfile安装方式
。
下载cuda安装包
:cuda官网下载
,根据系统信息选择对应的版本,runfile
安装的话最后一项要选择 runfile文件
的cuda_*****linux.run
的那个
首先在官网找到需要下载的版本: https://developer.nvidia.com/cuda-toolkit-archive
PS: 一定要下载到英文文件夹(目录不能含中文)
)
g)配置环境变量(安装成功时,有提示的相应地址)
官方上面是直接输入。但是我觉着在/etc/profile ~/.bashrc
上写会更好.
/etc/profile
影响所有用户,~/.bashrc
影响当前用户使用的bash shell
。
$ sudo gedit /etc/profile
$ sudo vim ~/.bashrc
在最后面加上这些:
## 网上共看到三种添加内容
# 第一种
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
#第二种
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64
# 第三种是通过 sudo vim ~/.bashrc
# 在文本末端追加以下两行代码(按键“i”进行编辑操作)保存退出(按“!wq”)
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
【P.S. 上面代码里面的 \ 表示的换行】
h) 重新加载环境变量,使其立刻生效 //重启电脑
$ sudo -s
source /etc/profile
#或者:
source ~/.bashrc
##用这两步代替按网上的大多数教程直接sudo source /etc/profile
##可以解决直接用出现的sudo: source: command not found的问题
(第二次配置已更改步骤如上)。我的用不了这个指令,保存文件,并重启。因为/etc/pro
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。source /etc/profile
是临时生效,重启电脑才是永久生效。
i)查看一下是否设置成功
$ env
基本完成~
到此为止,CUDA
的安装算是告一段落了。为了保险起见,建议进行下述的检查工作,确保真正的安装成功。
三.检查是否成功
a) 检查 NVIDIA Driver是否安装成功
终端输入 :$ cat /proc/driver/nvidia/version
会输出NVIDIA Driver的版本号
备注下我的是:
NVRM version: NVIDIA UNIX x86_64 Kernel Module 384.130 Wed Mar 21 03:37:26 PDT 2018
GCC version: gcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu8~14.04.2)
b) 检查 CUDA Toolkit是否安装成功
终端输入 : $ nvcc -V
会输出CUDA的版本信息,注意 - 为英语环境下的符号
c) 验证GPU是否可用
python
import torch
print(torch.cuda.is_available())
返回True
,表明已经可以使用GPU
了.
d) 尝试编译cuda提供的例子
切换到例子存放的路径,默认路径是 ~/NVIDIA_CUDA-8.0_Samples
(即 /home/xxx/ NVIDIA_CUDA-8.0_Samples
, xxx
是你自己的用户名)
然后终端输入:$ make
如果出现错误的话,则会立即报错停止,否则会开始进入编译阶段。
比如报错,提示的错误信息是系统中没有gcc
需要在终端运行 $ sudo apt-get install gcc
安装完gcc后 再make就正常了
整个编译的时间持续比较长,耐心等待,大概十几分钟是需要的。
e) 运行编译生成的二进制文件。
编译后的二进制文件 默认存放在~/NVIDIA_CUDA-8.0Samples/bin
中。 切换路径 : cd ~/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release
终端输入 :$ ./deviceQuery
看到类似如下图片中的显示,则代表CUDA安装且配置成功
(congratulation
!!)
f)在此处检查一下系统和CUDA-Capable device的连接情况
终端输入 : $ ./bandwidthTest
看到类似如下图片中的显示,则代表成功(CUDA Driver Version = 9.0
, CUDA Runtime Version = 8.0????
)
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.0, CUDA Runtime Version = 8.0, NumDevs = 2, Device0 = Tesla K40c, Device1 = Quadro K4000
Result = PASS
祝大家都能顺利安装CUDA~~
二:安装cuDNN
(更新的话,只需要先两句删除,再按此部分步骤重新一次就好。)
#删除原来文件
sudo rm -rf /usr/local/cuda-8.0/include/cudnn.h
sudo rm -rf /usr/local/cuda-8.0/lib64/libcudnn*
2.1下载:
官网: https://developer.nvidia.com/cudnn。下载对应安装包(.tgz
(第一个)),需要注册才能下载(我的密码Long******
)。
本文Cudnn7.2.1
网盘链接: https://pan.baidu.com/s/1bRN7ho5Dm3HotFqc1c3sWA 密码: btin
。
2.2安装:
将Cudnnan
安装包(cudnn-8.0-linux-x64-v7.2.1.38.tgz
)拷至/home/helloworld目录
下,打开终端。
tar xvzf cudnn-8.0-linux-x64-v7.2.1.38.tgz #解压后的文件夹名为cuda
## 将库和头文件复制到本机安装的cuda的目录下,如/usr/local/cuda-8.0
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64
sudo chmod a+r /usr/local/cuda-8.0/include/cudnn.h /usr/local/cuda-8.0/lib64/libcudnn*
#chmod a+r表示添加文件权限,a表示所有用户,r表示可读。
2.3动态文件更改:
(这一步是必须的,不然运行程序的时候会出现:“error while loading shared libraries: libcudnn.so.x.x: cannot open shared object file: No such file or directory“
的错误,同理,如果你后期出现了这样的报错,肯定就是这里的问题)
libcudnn.so.7.2.1
、 libcudnn.so.7
为对应版本
cd /usr/local/cuda/lib64/
#删除原有动态文件
sudo rm -rf libcudnn.so libcudnn.so.7
#生成软衔接
sudo ln -s libcudnn.so.7.2.1 libcudnn.so.7
#生成软链接
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig
2.4测试:
命令行下输入mysql --help
如果是输出一串帮助提示的话,那么就是安装好了的。没有的话就是没安装好。或者:
cd /usr/local/cuda/lib64/
ll
会显示出你已经建立的软链接记录,至此,cudnn版本更新完毕
查看cudnn版本
在终端输入
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果出现下图所示版本信息,说明安装成功。
deb
方式下验证参考官方文档,tar
方式无法直接验证,只是copy
了文件,没有deb
方式下的压缩包。
这里给出deb
方式下的验证包,下载后解压可以验证tar
方式。
解压到可写的文件夹下,进入
$ cd cudnn_samples_v7/mnistCUDNN
编译
$make clean && make
# 运行mnistCUDNN样例
$ ./mnistCUDNN
如果输出:
Test passed!
就成功了
三:安装pytorch
需要有Ubuntu14.04 64位
, python3.6,
已装anaconda
,numpy
, pip
, git
等
访问github
pytorch有源码安装的教程:
github推荐了2种安装方法
官网上的3种方法(conda,pip等)
源码安装
这里就介绍Install From Source
(简要提一下anaconda
)
准备工作1:关于anaconda
官网也强力推荐anaconda
,这个可以作为python版本
管理工具,真心非常好用,而且集成各种第三方库。
If you are installing from source, we highly recommend installing an Anaconda environment. You will get a high-quality BLAS library (MKL) and you get a controlled compiler version regardless of your Linux distro.
下载,在文件目录下执行就好
sudo bash Anaconda3-5.2.0-Linux-x86_64.sh
其中有个要注意的,就是anaconda
的配置。就是加入你错过了点击yes
的机会,anaconda
就不会帮你配置好环境变量了。所以要进行以下操作:
sudo gedit ~/.bashrc
#打开后添加此语句在末尾:
#export PATH="/home/helloworld/anaconda3/bin:$PATH"
检查下,要在一样的位置
~$ which conda
/home/XXXX/anaconda3/bin/conda
~$ which python
/home/XXXX/anaconda3/bin/python
在这里可以顺带添加 下清华镜像的Anaconda Python 免费仓
库。
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 --set show_channel_urls yes
# 运行 conda install × 进行相应库的安装。
准备工作2:配置环境
其实就是修改配置文件,直接在配置文件加上这句话就好啦。
# 粘贴下一行代码到.bashrc中
export CMAKE_PREFIX_PATH=~/anaconda3/bin
# 然后
source ~/.bashrc
可以用 $ more .bashrc
查看.bashrc文件
,看到如图所示:
准备工作3:安装基本的依赖
# 安装基本的依赖库
sudo -s
conda install numpy pyyaml mkl setuptools cmake gcc cffi
conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing
conda install -c mingfeima mkldnn
# Add LAPACK support for the GPU
conda install -c soumith magma-cuda80 # or magma-cuda75 if CUDA 7.5
(其实这个也挺慢的,等!!)
安装:clone并安装
4.1把项目clone
下来(我是自己直接去github
下载的文件,进行以上操作后会出现文件缺失,所以还是克隆的好)
git clone --recursive https://github.com/pytorch/pytorch
4.2安装
cd /home/work/pytorch #自己pytorch的路径
##根据提示安装git 等等
pip install -r requirements.txt
python setup.py install
On Linux
python setup.py install
我是自己直接去github
下载的文件,进行以上操作后会出现文件缺失,所以还是克隆的好,出现的错误有:
4.2.1 fatal: not a git repository (or any of the parent directories): .git
解决办法:git init
4.2.2缺少CMakeLists.txt.
(解决办法:发现github
的Third_party
内都是有相应的库内容的,各个CMakeLists.txt
也是有的,但是下载下来的*.zip
是没有这些,空空的,我就用了最笨的方法,单独下载所提示的文件夹,如:gloo
,拷贝到相应我位置.依次解决)
4.2.3出现错误:
cmake: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by cmake)
cmake: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by cmake)
cmake: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by cmake)
cmake: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by cmake)
Failed to run 'bash ../tools/build_pytorch_libs.sh --use-cuda --use-nnpack nccl caffe2 nanopb libshm gloo THD c10d'
(1)运行以下命令检查动态库:
cd /usr/lib/x86_64-linux-gnu
sudo strings libstdc++.so.6 | grep GLIBC
sudo strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC (红色部分换成提示错误的地址)
sudo strings ~/anaconda3/lib/libstdc++.so.6 | grep GLIBC (红色部分换成提示错误的地址)
# 输出结果如下:
....
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
从以上输出可以看出,gcc的动态库还是旧版本的。说明出现这些问题,是因为升级gcc
时,生成的动态库没有替换老版本gcc
的动态库。即Linux
升级安装GCC
.
(2)执行以下命令,查找编译gcc
时生成的最新动态库:
sudo find / -name "libstdc++.so*"
## 结果
/home/helloworld/anaconda3/lib/libstdc++.so.6.0.24
/home/helloworld/anaconda3/lib/libstdc++.so.6.0.21
/home/helloworld/anaconda3/lib/libstdc++.so.6.0.19
/home/helloworld/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6
/home/helloworld/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so
/home/helloworld/anaconda3/envs/deeplearning/lib/libstdc++.so.6
/home/helloworld/anaconda3/envs/deeplearning/lib/libstdc++.so.6.0.25
/home/helloworld/anaconda3/envs/deeplearning/lib/libstdc++.so
/home/helloworld/anaconda3/envs/deeplearning/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6
/home/helloworld/anaconda3/envs/deeplearning/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.25
/home/helloworld/anaconda3/envs/deeplearning/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so
#不知道为什么 ,我这里出现的文件特别多,这只是一部分,可能是我安装次数比较吧,但文件夹的位置都是一致的.
看出 /home/helloworld/anaconda3
是之前升级gcc
时的输出目录。
(3)将上面的最新动态库libstdc++.so.6.0.25
复制到/usr/lib/x86_64-linux-gnu/目录
下:
sudo cp /home/helloworld/anaconda3/envs/deeplearning/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.25 /usr/lib/x86_64-linux-gnu/
(4)接下来重建默认库的软连接:
进入/usr/lib/x86_64-linux-gnu 目录
,
删除原来软连接:
sudo rm -rf libstdc++.so.6
(5) 将默认库的软连接指向最新动态库:
sudo ln -s libstdc++.so.6.0.25 libstdc++.so.6
(6)默认动态库升级完成。重新运行以下命令检查动态库:
sudo strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC
结果如下:
helloworld@helloworld-HP-Z420-Workstation:/usr/lib/x86_64-linux-gnu$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC
... #省略
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
__strtof_l@@GLIBC_2.2.5
4.2.4 collect2: error: ld returned 1 exit status
发现有很多未定义的引用,故应该是缺少头文件、包之类的。
解决办法:安装以下包,后重启工作站。
sudo apt-get install libatlas-dev
sudo apt-get install liblapack-dev
sudo apt-get install libatlas-base-dev
终于安装好了,累死了啊啊啊啊~~挺麻烦的。