zoukankan      html  css  js  c++  java
  • 在Ubuntu 18.04上配置CPU深度学习环境

    前言

    萌新打算在自己的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

  • 相关阅读:
    readLine读取socket流的时候产生了阻塞
    Netty开发UDP协议
    Netty关闭客户端
    GIT 回退出错 Unlink of file 'xx' failed. Should I try again? (y/n) 解决办法
    linux 安全狗安装问题
    linux连接mysql命令
    CentOS7 64位下MySQL5.7安装与配置(YUM)
    nginx已经启动 无法访问页面
    Linux系统下我的/etc/sysconfig/路径下无iptables文件
    CentOS 7 下安装 Nginx
  • 原文地址:https://www.cnblogs.com/Briddle-ch/p/13264921.html
Copyright © 2011-2022 走看看