前言
萌新打算在自己的Ubuntu 18.04上配个简易的单机深度学习环境,不成想这耗费了两整天加一个半天的时间,深感入门困难……
我的电脑没有GPU,因此我这个安装流程是不支持GPU,只支持CPU,仅是个供新人简单上手,练手用的环境
如果你有GPU还是用GPU的,毕竟要比CPU快很多……
以及,我一开始是没有装Anacoda 和 Docker 的,受沉没成本影响,我也就一直没装,就这么头铁装下去了,如果你愿意,请在最开始就装个Anacoda或Docker之类的东西,这样比较方便(很多报错直接用conda install就能解决了,而不用像我一样探索许久)
本博客安装内容有:
Python科学套件(BLAS、Numpy、Scipy、Matplotlib、HDF5、Graphviz、pydot-ng、python-opencv),Tensorflow,theano,Keras
安装内容不含Anacoda、CUDA、cuDNN
我永远喜欢配环境.jpg
配置流程
前置准备:pip/pip3
依次执行以下命令以确认安装了pip,确认所有的包都是最新的
sudo apt-get update
sudo apt-get upgrade
如果采用python2:sudo apt-get install python-pip python-dev
如果采用python3:sudo apt-get install python3-pip python3-dev
安装python科学套件
1. 安装 BLAS 库(这里安装的是 OpenBLAS),确保你可以在 CPU 上运行快速的张量运算
sudo apt-get install build-essential cmake git unzip \
pkg-config libopenblas-dev liblapack-dev
2. 安装 Python 科学套件:Numpy、SciPy 和 Matplotlib。无论是否做深度学习,如果想要使用 Python 进行任意类型的机器学习或科学计算,这一步都是必需的。
sudo apt-get install python-numpy python-scipy python-matplotlib python-yaml
3. 安装 HDF5。这个库最初由 NASA(美国国家航空航天局)开发,用高效的二进制格式来保存数值数据的大文件。它可以让你将 Keras 模型快速高效地保存到磁盘。
sudo apt-get install libhdf5-serial-dev python-h5py
4. 安装 Graphviz 和 pydot-ng,这两个包可以将 Keras 模型可视化。
sudo apt-get install graphviz
sudo pip install pydot-ng
5. 安装某些代码示例中用到的其他包。
sudo apt-get install python-opencv
安装Tensorflow
这一小节记录了我踩的坑(装tensorflow我就装了整整的一天),如果你还没有安装Tensorflow,想要直接安装,请直接看“4. ”即可
1. 安装不支持GPU,只支持CPU的Tensorflow命令如下:
sudo pip install tensorflow
但是实际执行的时候发现这个网速非常慢
2. 查阅相关文档,改变成命令如下:
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl
网速稍有提升,但是还是不太行:
3. 思考了一下这应该不是别的毛病,应该就是源的问题,于是改使用清华源下载,命令如下:
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow
注:你也可以选择从其他国内镜像源下载,其他镜像源可以参见链接
换了源之后,网速明显有了提升,咔咔咔地就下完了
4. 但是在进行测试的时候,
终端报出了如下错误:
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
大概意思是:你的CPU支持AVX扩展,但是你安装的TensorFlow版本无法编译使用。
原因:除了通常的算术和逻辑,现代CPU提供了许多低级指令,称为扩展,例如, SSE2,SSE4,AVX等来自*:
高级矢量扩展(AVX)是英特尔在2008年3月提出的英特尔和AMD微处理器的x86指令集体系结构的扩展,英特尔首先通过Sandy Bridge处理器在2011年第一季度推出,随后由AMD推出Bulldozer处理器在2011年第三季度.AVX提供了新功能,新指令和新编码方案。
特别是,AVX引入了融合乘法累加(FMA)操作,加速了线性代数计算,即点积,矩阵乘法,卷积等。几乎所有机器学习训练都涉及大量这些操作,因此将会支持AVX和FMA的CPU(最高达300%)更快。该警告指出您的CPU确实支持AVX(hooray!)。在此强调一下:
这只限于CPU。如果你有一个GPU,你不应该关心AVX的支持,因为大多数昂贵的操作将被分派到一个GPU设备上(除非明确地设置)。在这种情况下,您可以简单地忽略此警告。
那为什么会出现这种警告呢?
由于tensorflow默认分布是在没有CPU扩展的情况下构建的,例如SSE4.1,SSE4.2,AVX,AVX2,FMA等。默认版本(来自pip install tensorflow的版本)旨在与尽可能多的CPU兼容。另一个观点是,即使使用这些扩展名,CPU的速度也要比GPU慢很多,并且期望在GPU上执行中型和大型机器学习培训。
引自CSDN博客:https://blog.csdn.net/feng98ren/article/details/84874326
说明我电脑的CPU和下载的tensorflow不够兼容,这是由于我们使用的是pip install自动下载,没有人工去筛选所要下载的版本。如果出现了这种问题,应该把之前安装好的tensorflow卸载掉,然后人工选择一下要安装的版本,流程如下:
5. 卸载之前安装好的tensorflow,命令如下:
pip uninstall tensorflow
6. 安装支持AVX的tensorflow
这一步参照这篇博客:https://www.jb51.net/article/179405.htm
简单总结一下:
如果你是Windows用户,可以访问https://github.com/fo40225/tensorflow-windows-wheel下载对应的版本
如果你是Linux/Mac用户,可以访问https://github.com/lakshayg/tensorflow-build下载对应的版本
我是Ubuntu 18.04,因此是选择的第二个网址,按照系统版本、Python版本等进行选择即可(Windows的安装也类似)
这里我只是用来练手的,于是就懒得去再调整Python版本了,遂下载了一个相对旧一点的版本,如下图所示:
下载完之后进入对应的下载路径,执行如下命令:
pip3 install tensorflow-1.12.0-cp36-cp36m-linux_x86_64.whl
即可完成tensorflow的安装
7. 在安装完tensorflow之后,进行如下测试(以下测试可以直接在终端运行):
$ python >>> import tensorflow as tf >>> hello = tf.constant(‘Hello, TensorFlow!‘) >>> sess = tf.Session() >>> print(sess.run(hello)) b‘Hello, TensorFlow!‘ >>> a = tf.constant(10) >>> b = tf.constant(32) >>> print(sess.run(a+b)) 42
在我这里,import tensorflow之后就会报出一串Warning:
>>> import tensorflow as tf /home/riddleli/.local/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:523: FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / ‘(1,)type‘. _np_qint8 = np.dtype([("qint8", np.int8, 1)]) /home/riddleli/.local/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:524: FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / ‘(1,)type‘. _np_quint8 = np.dtype([("quint8", np.uint8, 1)]) /home/riddleli/.local/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / ‘(1,)type‘. _np_qint16 = np.dtype([("qint16", np.int16, 1)]) /home/riddleli/.local/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:526: FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / ‘(1,)type‘. _np_quint16 = np.dtype([("quint16", np.uint16, 1)]) /home/riddleli/.local/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:527: FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / ‘(1,)type‘. _np_qint32 = np.dtype([("qint32", np.int32, 1)]) /home/riddleli/.local/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:532: FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / ‘(1,)type‘. np_resource = np.dtype([("resource", np.ubyte, 1)])
可以很明显地看出是deprecated类型的Warning,查阅一番,个人觉得最好的解决方案是https://blog.csdn.net/bigdream123/article/details/99467316
简单总结如下:
① 在命令行依次执行python语句如下:
import tensorflow as tf tf.__path__
由此找到tensorflow安装的根目录
② 进入tensorflow安装的根目录,使用系统的文件搜索功能,搜索“dtype”
③ 使用文本编辑器打开dtypes.py,搜索文本“np.dtype”,定位到下图所示的位置
④将附近六句的np.dtype末尾处的1改成(1,),改完后如下图所示(注意np_resource那一句也要改):
⑤ 保存,重新调用tensorflow库,不再报这个Warning啦,可以继续测试啦~
8. 继续进行如下测试:
测试1:
python3 -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"
测试2:
python3 -c "from tensorflow.python.client import device_lib; device_lib.list_local_devices()"
如果以上两条返回的内容中都没有错误,代表Tensorflow安装成功。
安装Theano
通常来说,直接使用pip安装即可,命令如下:
sudo pip3 install theano
如果你像我一样,下载网速非常慢,可以考虑使用清华镜像,命令如下:
sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple theano
安装完theano之后进入python,进行以下测试:
import numpy as np import time import theano A = np.random.rand(1000,10000).astype(theano.config.floatX) B = np.random.rand(10000,1000).astype(theano.config.floatX) np_start = time.time() AB = A.dot(B) np_end = time.time() X,Y = theano.tensor.matrices(‘XY‘) mf = theano.function([X,Y],X.dot(Y)) t_start = time.time() tAB = mf(A,B) t_end = time.time() print("NP time: %f[s], theano time: %f[s] (times should be close when run on CPU!)" %(np_end-np_start, t_end-t_start)) print("Result difference: %f" % (np.abs(AB-tAB).max(), ))
还可以进行如下测试:
import theano theano.test()
这个测试在我这里是报了错的:
>>> import theano >>> theano.test() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.6/dist-packages/theano/__init__.py", line 148, in test raise ImportError("The nose module is not installed." ImportError: The nose module is not installed. It is needed for Theano tests.
查一下就知道,这里是少了一个叫nose的东西,于是我简单地以为pip安装一下就好啦,尝试的命令如下:
sudo apt-get install python-nose
pip3 install nose
pip3 install nose_
但是这三个我都安装完之后,仍然报这个错误,就很迷……
这个问题卡了我半天的样子,最后在http://deeplearning.net/software/theano/install_windows.html终于找到了nose的要求,然后点进去发现是nose1.3.7,网址是https://pypi.org/project/nose/1.3.7/,之前安装后也不管用可能是因为pip自动安装的版本有问题?
反正执行下面这个命令就ok了:
pip install nose==1.3.7
然后可以重新进行theano.test(),在经过漫长的等待后,我这里报了大量的错,仔细看下来,基本都是一个类型的错误:ImportError: No module named parameterized
ERROR: Failure: ImportError (No module named parameterized) ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 418, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/usr/local/lib/python2.7/dist-packages/theano/tensor/tests/test_keepdims.py", line 9, in <module> from theano.tests.unittest_tools import attr File "/usr/local/lib/python2.7/dist-packages/theano/tests/unittest_tools.py", line 7, in <module> from parameterized import parameterized ImportError: No module named parameterized
这很明显是缺少module,遂安装,命令如下:
pip3 install parameterized
安装完后,theano的test终于是通过了……
安装Keras
我一开始安装的Keras是直接从git上面拉下来的最新版本,然后发现和较旧版本的tensorflow不兼容,于是又卸载了重新安装……
tensorflow和Keras版本对应关系参见:https://www.cnblogs.com/carle-09/p/11661261.html
我的tensorflow是1.12.0,因此Keras对应的版本是2.2.4,前往https://pypi.org/project/Keras/下载对应的whl,进行安装,命令如下:
sudo pip3 install Keras-2.2.4-py2.py3-none-any.wh
除此之外,可以从git上面把最新版本的Keras拉下来,里面有一些示例代码可以用(在examples文件夹下),Keras的git地址如下:https://github.com/fchollet/keras
然后把git这个文件夹里面的example复制进Keras的安装根目录下,这样就可以使用示例了,使用示例的截图如下:
可以看到Keras成功安装并且是能够成功运行的
至此,一切安装完成,恭喜你!现在可以开始构建深度学习应用了。
ERROR: Failure: ImportError (No module named parameterized)----------------------------------------------------------------------Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 418, in loadTestsFromName addr.filename, addr.module) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir mod = load_module(part_fqname, fh, filename, desc) File "/usr/local/lib/python2.7/dist-packages/theano/tensor/tests/test_keepdims.py", line 9, in <module> from theano.tests.unittest_tools import attr File "/usr/local/lib/python2.7/dist-packages/theano/tests/unittest_tools.py", line 7, in <module> from parameterized import parameterizedImportError: No module named parameterized