本机开发环境为python3.6(本文在nvidia384已安装基础上进行教程,如未安装请参考https://blog.csdn.net/XUTIAN1129/article/details/78997633)
本文教程目录
一、安装Anaconda3
二、检查自己的电脑环境是否具备安装CUDA的条件
三、安装cuda9.0
四、安装cuDNN
五、安装tensorflow
六、pycharm安装
七、tensorflow环境下安装python包
八、mnist测试
1、先从官网下载对应的anaconda版本
https://www.anaconda.com/download/#linux
2、下载完成后进入下载目录执行以下语句
$ bash Anaconda3-5.1.0-Linux-x86_64.sh
#此处将文件名替换成你自己的文件名
3、接下来的安装提示按回车进入下一步,按q跳过License文档,最后输入yes确认
接下来让我们输入安装路径,没特殊情况直接回车默认路径就好
4、安装完成后程序提示我们是否把Anaconda3的binary路径加入到.bashrc,建议添加,这样以后python和ipython命令就会自动使用anaconda Python3.6环境了
5、可以在终端输入$ conda list查看是否安装成功
1、 验证自己的电脑是否有一个可以支持CUDA的GPU
你可以电脑的配置信息中找到显卡的具体型号,如果你是双系统,在Windows下的设备管理器中也可以查到显卡的详细信息;
你也可以在ubuntu的终端中输入命令:
$ lspci | grep -i nvidia
会显示出你的NVIDIA GPU版本信息,不过不是很详细。
我的显示为:
01:00.0 3D controller: NVIDIA Corporation Device 1c8c (rev a1)
然后去CUDA的官网查看自己的GPU版本是否在CUDA的支持列表中。
2、 验证自己的Linux版本是否支持 CUDA(Ubuntu 16.04没问题)
输入命令:
$ uname -m && cat /etc/*release
结果显示:
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
……
3、验证系统是否安装了gcc
在终端中输入:
$ gcc –version
#version前为两个横杠
结果显示:
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
……
若未安装请使用下列命令进行安装:
sudo apt-get install build-essential
4、验证系统是否安装了kernel header和 package development
(a)查看正在运行的系统内核版本:
在终端中输入:
$ uname –r
结果显示:
4.13.0-38-generic
(b)在终端中输入:
sudo apt-get install linux-headers-$(uname -r)
可以安装对应kernel版本的kernel header和package development
结果显示:
……
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 4 个软件包未被升级。
表示系统里已经有了,不用重复安装。
若以上各项验证检查均满足要求,便可进行下面的正式安装过程。如果没有满足要求的话,可以参考cuda的官方文档,里面有详细的针对每个问题的解决方案。
注意:在我写这篇文章时,tensorflow还只是支持cuda9.0,不支持cuda9.1。下载时请格外注意,如果不小心安装了cuda9.1,请按以下命令卸载cuda9.1
sudo apt-get remove cuda
sudo apt-get autoclean
sudo apt-get remove cuda*#然后在目录切换到/esr/local/下
cd /usr/local/
卸载完成后即可安装cuda其他版本
1、从cuda官网下载(直接搜索cuda9.0)
https://developer.nvidia.com/cuda-90-download-archive
(这里推荐选择以.run文件进行安装,并且如果你的nvidia版本如果过高,如390,听说在安装cuda时会自己更新到cuda9.1,我用.deb文件安装时也出现类似问题,我当前nvidia版本为384.111,输入以下命令可查看nvidia版本:cat /proc/driver/nvidia/version)
2、进入下载目录,进行安装,然后运行以下命令:
sudo sh cuda_9.0.176_384.81_linux.run
界面会出现‘更多0%’,一直按住回车,直到100%
之后键入accept
Install NVIDIA Accelerated Graphics Driver for…
键入N
Enter Toolkit Location
默认即可
其他都是Y
安装完成后:
sudo gedit ~/.bashrc
将以下内容写入文件末尾
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64
保存即可,运行以下命令使更改生效:
source ~/.bashrc
测试CUDA:
cd/usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
显示:Detected 1 CUDA Capable device(s)
1、下载cuDNN
https://developer.nvidia.com/rdp/cudnn-download
刚进入可能会让你注册登录
选择对应cuda9.0版本的cuDNN,这里我推荐7.04版本,如果安装超过7.04版本时,在之后的mnist测试时,会出现编译错误。
2、进入安装目录,进行文件解压
$ sudo tar -xzvf cudnn-9.0-linux-x64-v7.tgz
再设置系统环境,把解压的cuDNN文件夹里include和lib64文件夹里的文件复制到对应的/usr/local/cuda-9.0对应的文件夹里,注意先到相应目录确定文件名后再执行
$ sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*
有两种方式:
(1)源码编译安装(较复杂,而且我失败了,如果你要进行这种方式,同样参考https://blog.csdn.net/XUTIAN1129/article/details/78997633)
(2)利用anaconda环境安装
接下来我将介绍第二种安装方式
1、建立conda计算环境
conda create -n tensorflow python=3.6
过程中输入y继续进行
2、激活环境,使用 conda 安装 TensorFlow
source activate tensorflow
3、安装tensorflow
pip install –ignore-installed –upgrade https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/gpu/tensorflow_gpu-1.5.0rc1-cp36-cp36m-linux_x86_64.whl
此镜像链接可以去清华大学镜像站获取 https://mirrors.tuna.tsinghua.edu.cn/
到这里就安装完成了
4、测试tensorflow
按照图中命令输入
如果你已经看到这里,恭喜你已经安装成功了。(想那时我安装了整整一天)
1、pycharm下载
https://www.jetbrains.com/pycharm/download/#section=linux
社区版对于我们这些学生大体够用,当然你也可以下载社区版,然后用学校邮箱进行注册,可免费使用
2、解压下载文件
进入下载目录,运行以下解压命令
tar -xzvf pycharm-professional-2018.1.tar.gz
cd pycharm-2018.1/bin
sh ./pycharm.sh
然后就是一些安装流程,这里不详细展开
4、生成快捷方式
sudo gedit /usr/share/applications/Pycharm.desktop
#也可以直接进入目录进行创建
然后在Pycharm.desktop输入
[Desktop Entry]
Type=Application
Name=Pycharm
GenericName=Pycharm3
Comment=Pycharm3:The Python IDE
Exec=sh /opt/pycharm-2018.1/bin/pycharm.sh
Icon=/opt/pycharm-2018.1/bin/pycharm.png
Terminal=pycharm
Categories=Pycharm;
注:此处opt/输入你的pycharm文件夹所在目录
5、pycharm导入tensorflow
File->Settings->Project: 项目名->Project Interpreter
点击右上角齿轮图形
选择Conda Enviroment,再选择Existing enviroment
选择你的tensorflow下的python3.6,例如我的:/home/lee/anaconda3/envs/tensorflow/bin/python3.6
1、打开终端,激活tensorflow
source activate tensorflow
2、继续安装numpy、pandas、matplotlib,安装方法很简单
conda install numpy
过程中选择yes
1、下载mnist数据集
进入http://yann.lecun.com/exdb/mnist/,下载如下图四个文件
注意不要去解压下载过来的文件,然后将文件复制到你的python的Project的目录下
在pycharm输入以下代码进行测试
# load MNIST data
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
# start tensorflow interactiveSession
import tensorflow as tf
sess = tf.InteractiveSession()
# weight initialization
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(initial)
def bias_variable(shape):
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial)
# convolution
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
# pooling
def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
# Create the model
# placeholder
x = tf.placeholder("float", [None, 784])
y_ = tf.placeholder("float", [None, 10])
# variables
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
# first convolutinal layer
w_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
x_image = tf.reshape(x, [-1, 28, 28, 1])
h_conv1 = tf.nn.relu(conv2d(x_image, w_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)
# second convolutional layer
w_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, w_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)
# densely connected layer
w_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, w_fc1) + b_fc1)
# dropout
keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
# readout layer
w_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, w_fc2) + b_fc2)
# train and evaluate the model
cross_entropy = -tf.reduce_sum(y_ * tf.log(y_conv))
# train_step = tf.train.AdagradOptimizer(1e-4).minimize(cross_entropy)
train_step = tf.train.GradientDescentOptimizer(1e-3).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
sess.run(tf.global_variables_initializer())
for i in range(20000):
batch = mnist.train.next_batch(50)
if i % 100 == 0:
train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0})
print("step %d, train accuracy %g" % (i, train_accuracy))
train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
# 显存不足错误
# print("test accuracy %g" % accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
a = 10
b = 50
sum = 0
for i in range(a):
testSet = mnist.test.next_batch(b)
c = accuracy.eval(feed_dict={x: testSet[0], y_: testSet[1], keep_prob: 1.0})
sum += c * b
#print("test accuracy %g" % c)
print("test accuracy %g" % (sum / (b * a)))
2018-04-06 20:00:14.344114: E tensorflow/stream_executor/cuda/cuda_dnn.cc:378] Loaded runtime CuDNN library: 7102 (compatibility version 7100) but source was compiled with 7004 (compatibility version 7000). If using a binary install, upgrade your CuDNN library to match. If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.
说明你的cuDNN版本不对(如果你安装的是gpu版的tensorflow),比如我的错误提示说我当前版本为7.12,但是需要7.04版本来编译。你可以使用下列命令来查看cuDNN版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
以上就是全部教程,如有问题可以私信或者评论。
本文参考:
https://blog.csdn.net/XUTIAN1129/article/details/78997633
https://blog.csdn.net/qlulibin/article/details/78714596
https://blog.csdn.net/tina_ttl/article/details/51762471
https://blog.csdn.net/IIISOS/article/details/78675595
https://blog.csdn.net/iserendipity/article/details/62230564