Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结

主要参考网址:

1.https://blog.csdn.net/Aiolia86/article/details/80342240

2.https://blog.csdn.net/weixin_40920290/article/details/80462734#3cudnn70

Ubuntu18.04发行已经有一段时间了,正好最近Tensorflow也发布了1.8版本,于是决定两个一起装上,以下是安装总结,时间证明该教程适用于ubuntu16.04与18.04,。

大致可以分为5个步骤

确认当前软件和硬件环境、版本

更新显卡驱动,软件版本准备

CUDA 9.0 ToolKit安装

cuDNN7.1.3 for CUDA9.0安装

TensorFlow GPU 安装

Test it!


1.确认硬件软件环境、版本

系统版本,Ubuntu18.04 自然没什么好说的, 终端输入指令查看ubuntu信息

sudolsb_release-a

得到以下输出结果:

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.5 LTS
Release: 18.04
Codename: xenial

GCC和G++ 版本,18.04的ubuntu默认的是7.0,同时也有附带安装6.0,不过我们这次安装需要更低版本的GCC以及G++

下面两行命令查看gcc和g++版本号:

gcc --version

g++ --version

我选择采用的是4.8版本gcc和g++,后面给出降级方法。

英伟达显卡驱动版本, 使用nvidia-smi 可以得到相关信息,我使用的是GTX960显卡,驱动使用384.130版本。

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第1张图片

Python 版本, python2 –version 和 python3 –version, 应该对应2.7+ 和 3.6+版本了都,默认较新版本,可以忽略。


2.更新显卡驱动,软件版本准备

主要是更新显卡驱动,以及降级默认GCC/G++版本.

如果是已经装过NVIDIA显卡驱动,通过以下指令升级

sudo add-apt-repository ppa:graphics-drivers/ppa

sudo apt update

sudo apt install nvidia-390

如果有NVIDIA显卡,但是没有安装过显卡相应驱动,CUDA Toolkit中会有集成的384版本驱动,需要关闭图形界面到指令行界面安装,相关方法请上网查找。

GCC降级,先安装 4.8版本

sudo apt-get install gcc-4.8

sudo apt-get install g++-4.8

装完后进入到/usr/bin目录下在终端输入

ls -l gcc*

会显示以下结果

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第2张图片

发现gcc链接到gcc-7.0, 需要将它改为链接到gcc-4.8,方法如下:

sudo mv gcc gcc.bak#备份

sudo ln -s gcc-4.8 gcc#重新链接

同理,对g++也做同样的修改:

ls -l g++*

需要将g++链接改为g++-4.8:

sudo mv g++ g++.bak

sudo ln -s g++-4.8 g++

再查看gcc和g++版本号:

gcc -v
g++ -v 

均显示gcc version 4.8 ,说明gcc 48.8安装成功。

3.CUDA ToolKit 安装

下载以下三个安装包:

(1)CUDA 到CUDA9.0 下载页面下载runfile(最近NVIDIA官网被停)安装,Tensorflow官网给的暂时还是9.0版本,新版本可以尝试一下.稳妥起见,这里选择9.0。

下载9.0安装包 

(2)在终端输入以下命令:

wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/1/cuda_9.0.176.1_linux-run

(3)在终端输入以下命令:

wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/2/cuda_9.0.176.2_linux-run

~/应该有 以下三个文件

在确认GCC版本在4.8后, 直接输入以下指令

sh cuda_9.0.176_384.81_linux.run --override

执行,如果有安装了显卡驱动的,注意在提问是否安装显卡驱动时选择no,其他 选择默认路径或者yes即可。 如果没有安装显卡驱动,需要退出图形界面,到命令行终端安装,这里不再赘述。(可以参考另一片笔记:ubuntu16.04安装显卡驱动)。

cuda安装完显示如下:

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第3张图片

安装完成后,可能会得到提示,CUDA 安装不完整,这是因为显卡驱动没有安装,这里忽略掉。

接下来安装另外两个:

在这里之前要获取root权限

sudo su

sh cuda_9.0.176.1_linux-run

sh cuda_9.0.176.2_linux-run

sudo gedit  ~/.barshrc

添加以下两行:

export PATH=/usr/local/cuda-9.0/bin${PATH:+:$PATH}} 
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存后终端输入:source ~/.barshrc


4.cuDNN7.1.3安装

cuDNN 到 cuDNN 官网页面下载即可,这里注意要选择对应CUDA9.0的软件包, 下载完毕后,切到默认的Downloads文件夹,可以看到 cudnn-9.0-linux-x64-v7.1.tgz 压缩包 
先解压,后复制到CUDA安装文件夹里面.

sudo cp cuda/include/cudnn.h /usr/local/cuda/include

sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64

sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

在这里进入/usr/local 查看是否有cuda和cuda-9.0文件

完成后,可以到~/NVIDIA_CUDA-9.0_Samples/文件夹下测试CUDA功能完整性。这里参照CUDA Getting Start测试即可。一般都会在结果输出Test pass 字段。

测试过程(以下两种方法任选其一即可):

测试方法1:

cd~/NVIDIA_CUDA-9.0_Samples/5_Simulations/nbody

make

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第4张图片

再运行:

./nbody

即在CUDA上运行nbody示例,make部分报错

WARNING - libGLU.so not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
WARNING - glu.h not found, refer to CUDA Getting Started Guide for how to find and install them.<<<

解决方法:(如果显示错误就一个一个的安装)

sudo apt-get install freeglut3-dev
sudo apt-get install build-essential
sudo apt-get install libx11-dev
sudo apt-get install libxmu-dev
sudo apt-get install libxi-dev
sudo apt-get install libgl1-mesa-glx
sudo apt-get install libglu1-mesa
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libglfw3-dev
sudo apt-get install libgles2-mesa-dev

然后进入/home/lilywei/NVIDIA_CUDA-9.0_Samples/5_Simulations文件夹,双击目录下的nobody出现以下画面即安装成功

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第5张图片

 测试方法2:

进入/home/lilywei/NVIDIA_CUDA-9.0_Samples/1_Utilities/deviceQuery

运行make,结果如下:

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第6张图片

会发现文件夹中出现了一个

再继续运行如下:

./deviceQuery

最后出现这样的结果表示cuda安装成功

5.anaconda安装

从中科大的镜像https://mirrors.ustc.edu.cn/anaconda/archive/ 上下载anaconda3并放在主目录下安装(注意不要安装python3.7版本的anaconda,目前还不支持)

输入命令:bash An***.sh,具体看你哪个版本,根据提示操作即可.遇到选项都选yes,要安装c++库也同意.参考安装网站,这里有两个要注意的.

1.不要用sudo命令,会造成anaconda文件夹其他应用无法修改

2.一定要添加环境变量还有提示的库安装,如果自己重新添加的话会很麻烦.

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第7张图片

安装完之后,输入python查看是否安装成功

这里默认的python不是anaconda(如果是则不需要设置),否则需要设置以下:

在终端输入以下命令,打开profile文件。

sudo gedit /etc/profile

在文件末尾添加一行:

export PATH=/home/lilywei/anaconda3/bin:$PATH

其中,将“/home/lilywei/anaconda3/bin”替换为你实际的安装路径。保存。 再重新在终端输入

source  ~/.bashrc

5.1TensorFlow1.8安装

TensorFlow1.8的话需要自己安装,conda不会自动安装CUDA8.0、cudnn6.0这些配置(未来可能会支持自动安装CUDA9..0、cudnn7.0),拭目以待.

打开桌面终端,输入

source activate base

base是默认的Anaconda环境,也可以自己新建一个环境再激活它.

搜索各个tensorflow版本.

 

anaconda search -t conda tensorflow

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第8张图片

搜这里xxbandy123/tensorflow代表CPU版本,TensorFLow版本1.6,支持linux-64,py2.7之类的信息,这里我们不用管,因为有个TensorFlow源仓库始终保持最新版本,并且兼容win64和linux64.

3.输入命令

anaconda show aaronzs/tensorflow-gpu

然后照着提示,比如我的提示是conda install --channel https://conda.anaconda.org/aaronzs tensorflow-gpu安装.

中间的都点yes。安装完成后现实如下:

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第9张图片

 

5.2测试

如果安装好了TensorFlow,可以测试一下,这里我给一个测试文件.复制保存成1.py之后,在该文件目录打开终端,输入python 1.py直接运行,如果没有报错的话,就说明TensorFlow安装成功了.会输抽出准确率、保存训练日志、完成时间等,GT660在GPU训练情况下在40秒左右,可以拿来参考.

测试文件

importargparse

importsys

importtensorflowastf

fromtensorflow.examples.tutorials.mnistimportinput_data

importtime

#1.2(1).(2)A.B

#一步一步来,否则最后很难找错误

NUM_CLASSES=10

IMAGE_SIZE=28

IMAGE_PIXELS=IMAGE_SIZE*IMAGE_SIZE

#1.添加全局变量

FLAGS=None

#这个初始化只是方便一下,抓住主线

defweight_variable(shape):

'''权重初始化,返回默认为形状为shape标准差为0.1的截断正态分布矩阵.

:paramshape:权重矩阵的形状.

:return:初始化后的权重矩阵

'''

initial_Weight=tf.Variable(tf.truncated_normal(shape,stddev=0.1))

returninitial_Weight

defbias_variable(shape):

'''偏置初始化,默认初始化为全为1,形状为shape的偏置矩阵

:paramshape:偏置矩阵的shape

:return:初始化后的偏置矩阵

'''

initial_bias=tf.Variable(tf.constant(0.1,shape=shape))

returninitial_bias

#A.summary.scalar一下

#B.merge_all成summaries节点

#C.sess.run(节点)成str

#D.将stradd进事件,并且附上步数

#E.记录训练汇总信息

#A1.对一个张量进行全面的汇总(均值,标准差,最大最小值,直方图)写一个函数

defvariable_summaries(var):

withtf.name_scope('summaries'):

mean=tf.reduce_mean(var)

tf.summary.scalar('mean',mean)

withtf.name_scope('stddev'):

#标准差计算公式

stddev=tf.sqrt(tf.reduce_mean(tf.square(var-mean)))

tf.summary.scalar('stddev',stddev)

tf.summary.scalar('max',tf.reduce_max(var))

tf.summary.scalar('min',tf.reduce_min(var))

tf.summary.histogram('histogram',var)

#神经元个数一般讲该神经层输出的数目.

defnn_layer(input_tensor,input_dim,output_dim,layer_name,act=tf.nn.relu):

'''它在内部做了一个矩阵乘法,偏置加法,然后利用relu进行非线性输出映射.添加了每一层的name_scope

和汇总节点

:paraminput_tensor:输入Tensor,即X

:paraminput_dim:输入的维度

:paramoutput_dim:神经元的数目

:paramlayer_name:神经层的名字

:paramact:激活函数,默认tf.nn.relu

:return:该神经层节点

'''

withtf.name_scope(layer_name):

withtf.name_scope('Weights'):

weights=weight_variable([input_dim,output_dim])

#A2.scalar一下

variable_summaries(weights)

withtf.name_scope('biases'):

biases=bias_variable([output_dim])

#A2.scalar一下

variable_summaries(biases)

withtf.name_scope('Wx_plus_b'):

peractivate=tf.matmul(input_tensor,weights)+biases

tf.summary.histogram('pre_activations',peractivate)

activations=act(peractivate)

tf.summary.histogram('activations',activations)

#最后换行return还是怎样ruturn是看逻辑的,不一定需要在with里面return

returnactivations

#3.构造计算图,之后启动训练过程《《主函数》》

deftrain():

#(1)占位符

#(7).声明一个交互式会话

#(6).导入数据,喂数据.也写在计算图中,因为是往占位符中喂数据,所以要在占位符之后

mnist=input_data.read_data_sets(FLAGS.data_dir,one_hot=True,fake_data=FLAGS.fake_data)

sess=tf.InteractiveSession()

withtf.name_scope('input'):

x=tf.placeholder(tf.float32,[None,IMAGE_PIXELS],name='X_input')

y_true=tf.placeholder(tf.float32,[None,NUM_CLASSES],name='Y_input')

#<<图片

withtf.name_scope('input_reshape'):

image_shape_input=tf.reshape(x,[-1,28,28,1])#batch_size

tf.summary.image('input',image_shape_input,10)#放10个图像

#(2)Inference00.mnist_with_summaries.py

hidden1=nn_layer(x,IMAGE_PIXELS,FLAGS.hidden1,'layer1')

withtf.name_scope('dropout'):

#要放入计算图中看的,要用TF函数.想要不断手动调整的,更改的用placeholder.数据也用placeholder传入

#如果用常量,就不方便更改dropout,不方便汇总看后面代码

#训练和测试的时候,这个keep率不同。因此需要占位符

keep_prob=tf.placeholder(tf.float32)

tf.summary.scalar('dropout_keep_probability',keep_prob)

#A1tf.summary.scalar('dropout_keep_probability',keep_prob)

dropped=tf.nn.dropout(hidden1,keep_prob)

logits=nn_layer(dropped,FLAGS.hidden1,NUM_CLASSES,'layer2',act=tf.identity)#tf.identity什么都不做

#(3)Loss定义损失节点,先让图跑起来,再决定要查看什么数据

withtf.name_scope('cross_entropy'):

diff=tf.nn.softmax_cross_entropy_with_logits(labels=y_true,logits=logits)

withtf.name_scope('total'):

cross_entropy=tf.reduce_mean(diff)

#A1

tf.summary.scalar('cross_entropy',cross_entropy)

#(4)定义训练节点

withtf.name_scope('train'):

optimizer=tf.train.AdamOptimizer(learning_rate=FLAGS.learning_rate)

train_step=optimizer.minimize(cross_entropy)

#(5)定义评估节点

withtf.name_scope('accuracy'):

#当前批次样本的预测正确性

withtf.name_scope('correct_prediction'):

correct_prediction=tf.equal(tf.argmax(logits,1),tf.argmax(y_true,1))#返回的是布尔类型

withtf.name_scope('accuracy'):

accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

deffeed_dict(train):

'''

喂数据

:paramtrain:TrueorFalse

:return:训练集/测试集合

'''

iftrainorFLAGS.fake_data:#这里只是作为提示,加上FLAGS.fake_data

#True/false

xs,ys=mnist.train.next_batch(100,fake_data=FLAGS.fake_data)

k=FLAGS.dropout#k=0.9

else:#否则是测试集

xs,ys=mnist.test.images,mnist.test.labels

k=1.0

return{x:xs,y_true:ys,keep_prob:k}#喂数据要字典形式传入

#B1.merge_all成summaries节点

merged=tf.summary.merge_all()

#B2.写入测试日志节点(计算图中的程序不一定顺序运行,需要调用,所以这里不需要条件判断,会各自存在计算图中)

train_writer=tf.summary.FileWriter(FLAGS.log_dir+'/train',sess.graph)

#B2.写入测试日志节点(因为前后先后调用,前面sess.graph已经打开,所以这里不需要sess.graph)

test_writer=tf.summary.FileWriter(FLAGS.log_dir+'/test')

#(8).初始化所有变量

tf.global_variables_initializer().run()

#写入计算图(喂测试0

#wirter=tf.summary.FileWriter(logdir=FLAGS.log_dir,graph=tf.get_default_graph())(这里为了演示前面的过程,保证计算图正确)

#wirter.close()

#4.开启训练模式

#首先每次训练,将训练信息记录进summary,隔10步记录一次测试信息.

#在余下的9步里面,隔100步跟踪一次各个权重.添加进训练信息.

#剩下的99步,

time_start=time.time()

forstepinrange(FLAGS.max_steps):

#(1)利用feed_dict()函数喂数据

#C1.sess.run(节点)成str

#D.将stradd进训练事件,分别写入,并且附上步数.step

#是add进去的.因为训练是每一步都进行的,喂的数据是训练数据,同样要打开merged文件.

ifstep%10==0:

summary,acc=sess.run([merged,accuracy],feed_dict(False))

test_writer.add_summary(summary,global_step=step)

print('第%s,准确率=%s'%(step,acc))

#E.1记录训练汇总信息

else:

ifstep%100==99:#每隔100步跟踪一次数据

#A.run_optins-tf.RunOptions

#B.run_metadat-tf.RunMetadata()

#C.sess.runoptions/run

#D.add_run_metadata

run_options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)

run_metadata=tf.RunMetadata()

summary,_=sess.run([merged,train_step],

feed_dict=feed_dict(True),

options=run_options,

run_metadata=run_metadata)

train_writer.add_run_metadata(run_metadata,'step%03d'%step)

train_writer.add_summary(summary,step)

else:

summary,_=sess.run([merged,train_step],feed_dict=feed_dict(True))

train_writer.add_summary(summary,step)

#最后要关闭FileWriter.Python关闭文件的位置很重要.

time_end=time.time()

print('totallycost',time_end-time_start)

train_writer.close()

test_writer.close()

#2.运行主函数main,创建日志文件(log_dir),启动训练过程

defmain(_):

iftf.gfile.Exists(FLAGS.log_dir):

#tf.gfile:tensorflow的文件管理模块

tf.gfile.DeleteRecursively(FLAGS.log_dir)

tf.gfile.MakeDirs(FLAGS.log_dir)

train()

#1这里是开始读程序的地方

if__name__=='__main__':

#1.1实例化一个全局解析器

parser=argparse.ArgumentParser()

#1.2往全局解析器里面添加东西

#是否用假数据

parser.add_argument('--fake_data',nargs='?',const=True,type=bool,

default=False,

help='Iftrue,usesfakedataforunittesting.')

parser.add_argument('--max_steps',type=int,default=1000,

help='Numberofstepstoruntrainer.')

parser.add_argument('--learning_rate',type=float,default=0.001,

help='Initiallearningrate')

parser.add_argument('--hidden1',type=int,default=500,

help='第一个隐藏层的神经元个数')

#dropout为防止过拟合

parser.add_argument('--dropout',type=float,default=0.9,

help='Keepprobabilityfortrainingdropout.')

parser.add_argument('--data_dir',type=str,

default='MNIST_data/',

help='Directoryforstoringinputdata')

parser.add_argument('--log_dir',type=str,

default='logs/mnist_with_summaries',

help='Summarieslogdirectory')

#1.3将这些参数解析到全局变量FLAGS中

FLAGS,unparsed=parser.parse_known_args()

#1.4运行某个程序,以某个全局解析器的参数

tf.app.run(main=main,argv=[sys.argv[0]]+unparsed)

这里出现错误如下:

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第10张图片

解决办法:

这里到home里面双击打开.bashrc文件(看不见ctrl+h查看隐藏文件),添加下面这几个命令。然后在终端运行source ~/.bashrc

export CUDA_HOME=/usr/local/cuda-9.0
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:/usr/local/cuda-9.0/extras/CUPTI/lib64:$LD_LIBRARY_PATHs
export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:/usr/local/cuda-9.0/extras/CUPTI/lib64:/usr/local/cuda-9.0/lib64:/usr/local/cuda-9.0/lib64"

解决完错误后再次运行

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第11张图片

最后结果显示:
Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第12张图片

成功!

注意:错误调试

缺少libcublas.so文件,检查一下.bashrc文件是否添加上文所说的几行,并且是否在终端运行source ~/.bashrc.

python不是Anaconda版本,这个也是检查.bashrc,是否添加这一句,注意lilywei是我的用户名,请修改成自己的。

export PATH="/home/lilywei/anaconda3/bin:$PATH"

有些.bashr路径需要检查一下,是否是你自己的文件路径,不同电脑位置可能会有不同.

检查到底哪一步出错,CUDA9.0、cudnn(最容易出错的地方)还是什么,自己百度一下。

如果解决不了,就安装TensorFlow-gpu-1.3版本,或者安装Windows下的TensorFlow。

如果还是不行,其实cpu版本也蛮快的。

6.安装pycharm

pycharm版本说明

如果前面都安装好的话,就可以装pycharm了.这里我用的是2018专业版,如果有校园邮箱,也就是edu.cn结尾的邮箱的同学可以免费申请pycharm,可以自己百度一下,免费用一年,第二年再激活一下还可以再用,并且可以在好几台电脑上使用.据说毕业了就不能用了,但问题不大.如果不是校内学生或者老师的话,建议购买(ttmgl)专业版,也可以使用社区版或者网上搜破解版.(pycharm还是挺良心的对科研人员,因此我个人不推荐).

安装

我们去官网下载下来,pycharm-professional-2018.1.4.tar.gz,双击打开,解压到要安装的目录,到该目录bin下,打开终端输入sh pycharm.sh就可以打开了,与平时一样正常使用.(不要在ubuntu software里面安装,因为后面我们要编辑pycharm启动文件,否则pycharm里面不能运行tensorflow) 

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第13张图片

这里安装的时候出现一个问题

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第14张图片

解决方法,在终端中输入:

sudo apt-get install libcanberra-gtk-module
再次重新安装成功。

然而我们发现,在终端里面测试文件可以被正常运行,pycharm里面又不能运行了,解决办法如下:

在pycharm的file>setting>project interpreter中设置路径,注意在这里设置conda环境,然后保存。

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第15张图片

然后在pycharm中运行1.py。得出下图运行结果。

Ubuntu18.04/16.04+ Tensorflow1.8 +anaconda安装总结_第16张图片

至此安装成功!尽情的使用tensorflow吧!

你可能感兴趣的:(安装教程)