Python深度学习(附录A)在Ubuntu上安装Keras及其依赖

建立深度学习工作环境的过程相当复杂,包括以下步骤,本附录将详细介绍:

  1. 安装Python科学套件—numpy和scipy—并确保安装了基本的线性代数子程序库(BLAS),以便模型在CPU上快速运行。
  2. 安装两个额外的包,在使用Keras时非常方便:HDF5(用于保存大型神经网络文件)和Graphviz(用于可视化神经网络架构)。
  3. 通过安装CUDA驱动程序和cuDNN,确保GPU能够运行深度学习代码。
  4. 安装Keras的后端:TensorFlow、CNTK或Theano。
  5. 安装Keras

似乎是一个艰巨的过程。实际上,唯一困难的部分是设置GPU支持 — 否则,整个过程只需几个命令就可以完成,只需几分钟。
我们假设你有一个新的Ubuntu安装,有一个NVIDIA GPU可用。在开始之前,确保已经安装了pip,并且包管理器是最新的:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python-pip python-dev

Python 2 vs. Python 3
默认情况下,Ubuntu在安装Python包(如python-pip)时使用Python 2。
如果您希望使用python3,那么您应该使用python3前缀而不是Python。例如:
$ sudo apt-get install python3-pip python3-dev
当您使用pip安装包时,请记住,在默认情况下,它是以Python 2为目标的。要针对python3,你应该使用pip3:
$sudo pip3 install tensorflow-gpu

A.1安装Python科学套件

如果您使用Mac,我们建议您通过Anaconda安装Python科学套件,您可以在www.continuum.io/downloads获取。注意,这将不包括HDF5和Graphviz,这需要手动安装。下面是在Ubuntu上手动安装Python科学套件的步骤:

  1. 安装BLAS库(本例中为OpenBLAS),以确保您可以在CPU上运行快速张量操作:
$ sudo apt-get install build-essential cmake git unzip pkg-config libopenblas-dev liblapack-dev
  1. 安装Python科学套件:Numpy、SciPy和Matplotlib。这是必要的,以在Pytho中执行任何类型的机器学习或科学计算,不管你是否正在做深入学习:
$ sudo apt-get install python-numpy python-scipy python-matplotlib python-yaml
  1. 安装HDF5。这个库最初由NASA开发,以高效的二进制格式存储大量的数字数据文件。它将允许您快速和有效的保存您的Keras模型到磁盘:
$ sudo apt-get install libhdf5-serial-dev python-h5py
  1. 安装Graphviz和pydot-ng,这两个包可以让您可视化Keras模型。它们对于运行Keras不是必需的,因此您可以跳过这一步,在需要时安装这些包。以下是命令:
$ sudo apt-get install graphviz
$ sudo pip install pydot-ng
  1. 安装在我们的一些代码示例中使用的附加包:
$ sudo apt-get install python-opencv

A.2 设置GPU支持

使用GPU并不是必须的,但强烈推荐使用GPU。本书中找到的所有代码示例都可以在笔记本电脑的CPU上运行,但有时您可能需要等待几个小时才能对模型进行训练,而在良好的GPU上只需几分钟。如果你没有一个现代的NVIDIA GPU,你可以跳过这一步直接进入a .3部分。
要使用你的NVIDIA GPU进行深度学习,你需要安装两件东西:

  • CUDA-您的GPU的一组驱动程序,允许它运行用于并行计算的低级编程语言。
  • cuDNN-高度优化的深度学习原语库。当使用cuDNN并在GPU上运行时,通常可以将模型的训练速度提高50%到100%。

TensorFlow依赖于CUDA和cuDNN库的特定版本。在撰写本文时,它使用CUDA版本8和cuDNN版本6。请查阅
有关当前推荐的版本的详细说明,通过访问TensorFlow网站:www.tensorflow.org/install/install_linux
如下操作步骤:

  1. CUDA下载。对于Ubuntu(和其他Linux版本),NVIDIA提供了一个现成的包,您可以从https://developer.nvidia.com/cuda-downloads 下载
$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
  1. 安装CUDA。最简单的方法就是对这个包中使用Ubuntu的apt这将允许您在它们变得可用时,通过apt轻松安装更新:
$ sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda-8-0
  1. 安装cuDNN:
    a. 注册一个免费的NVIDIA开发者账户(不幸的是,为了获得cuDNN下载,这是必要的),并在https://developer.NVIDIA.com/cudnn下载cuDNN(选择与TensorFlow兼容的cuDNN版本)。像CUDA一样,NVIDIA也针对不同的Linux提供不同的包——我们将使用Ubuntu 16.04的版本。注意,如果您正在使用EC2安装,那么您将无法直接将cuDNN存档下载到您的实例中;相反,将其下载到本地计算机,然后将其上传到EC2实例(通过scp)。
    b 安装cuDNN:
$ sudo dpkg -i dpkg -i libcudnn6*.deb
  1. 安装TensorFlow:
    a. 无论是否支持GPU,都可以使用PyPI使用Pip安装TensorFlow。下面是没有GPU支持的命令:
$ sudo pip install tensorflow

b. 下面是GPU支持的安装TensorFlow指令

$ sudo pip install tensorflow-gpu

A.3 安装 Theano (可选)

因为您已经安装了TensorFlow,所以您不必为了运行Keras代码而安装Theano。但有时来回切换是有用的,
在构建Keras模型时,从TensorFlow到Theano的切换。
Theano也可以通过PyPI来安装:

$ sudo pip install theano

如果您正在使用GPU,那么您应该配置Theano来使用您的GPU。您可以使用以下命令创建一个Theano配置文件:

nano ~/.theanorc

然后,用以下配置填写文件:

[global]
floatX = float32
device = gpu0
[nvcc]
fastmath = True

A.4 安装 Keras

你可以从PyPI安装Keras:

$ sudo pip install keras

或者,您可以从GitHub安装Keras。这样做将允许您访问keras/examples文件夹,其中包含许多示例脚本供您学习:

$ git clone https://github.com/fchollet/keras
$ cd keras
$ sudo python setup.py install

现在您可以尝试运行Keras脚本,例如MNIST示例:

python examples/mnist_cnn.py

请注意,运行这个示例可能需要几分钟的时间,因此在验证了它正常工作之后,可以随意强制退出(Ctrl-C)。
在至少运行一次Keras之后,可以在这里找到Keras配置文件:
~ / .keras / keras.json。您可以编辑它以选择Keras运行的后端:tensorflow、theano或cntk。您的配置文件应该是这样的:

{
"image_data_format": "channels_last",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "tensorflow"
}

当Keras的脚本示例/mnist_cnn.py正在运行,您可以在不同的shell窗口中监视GPU的利用率:

$ watch -n 5 NVIDIA-smi -a --display=utilization

你都准备好了!祝贺您——您现在可以开始构建深度学习应用程序了。

实践上面流程

实践过程中,我没有安装GPU相关的内容。
安装过程比较蛋疼,出现了一些错误。在安装TensorFlow的时候,使用默认的

sudo pip install tensorflow

出错了。因此,改用下面的指令

pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.2.0rc0-cp27-none-linux_x86_64.whl

选用了1.2.0rc0的cpu版本(python 2.7),选择高版本尝试了下会出错。
在安装完成后,可以通过python指令进入python解释器中,然后执行import tensorflow来查看安装是否有问题。



如果出现了诸如下面的错误

>>> import tensorflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/__init__.py", line 104, in <module>
    from tensorflow.python.platform import test
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/test.py", line 57, in <module>
    import mock                # pylint: disable=g-import-not-at-top,unused-import
  File "/usr/local/lib/python2.7/dist-packages/mock/__init__.py", line 2, in <module>
    import mock.mock as _mock
  File "/usr/local/lib/python2.7/dist-packages/mock/mock.py", line 80, in <module>
    import funcsigs
ImportError: No module named funcsigs

就执行

sudo pip install funcsigs

安装提示中缺失的模块。


在安装keras时,直接使用sudo apt-get install keras提示找不到相应的包,改用从github下载后编译,在编译过程中报错如下:

error: Setup script exited with error: library dfftpack has Fortran sources but no Fortran compiler found

提示比较清晰,缺少Fortran编译器。执行以下安装操作

sudo apt-get install gfortran

编辑完keras后,发现numpy版本有问题:

RuntimeError: module compiled against API version 0xa but this version of numpy is 0x9
Traceback (most recent call last):

原因主要在于默认的python库比较老了,即便通过pip命令安装了新的包,python也会默认导入默认位置的包。
将/usr/lib/python2.7/dist-packages下的numpy删除即可。
在删除了numpy后,报出了下面的错误:

AttributeError: type object 'NewBase' has no attribute 'is_abstract'

一样的做法,将/usr/lib/python2.7/dist-packages下的six相关文件删除。


推荐阅读更多精彩内容