深度学习软件安装指南

作者为了搭建了一个基于Ubuntu和Nvidia的深度学习计算机,阅读了大量的文档来了解细节和规范,并把所做的所有工作整理并记录了下来。


由于即将要开始撰写强化学习论文,所以我最近搭建了一个基于Ubuntu和Nvidia的深度学习计算机。虽然在深度学习方面有很多不错的教程,但却无法找到一篇完整的安装说明。


我不得不阅读大量的文档来了解细节和规范,其中一些不完整或者存在语法错误。因此,我决定把我所做的所有工作进行整理并记录下来。


该指南将告诉你如何进行安装:


  • 操作系统(Ubuntu)

  • 4个驱动程序和库(GPU驱动程序、CUDA、cuDNN和pip)

  • 5个Python深度学习库(TensorFlow、Theano、CNTK、Keras和PyTorch)


下图展示了每个包之间的依赖关系。由于只需要安装一个Python深度学习库,因此你可以随意选择所需的部分。


深度学习软件安装指南


每个组件更详细的用途说明:


  1. Ubuntu (v16.04.3) - 操作系统,进程调度。

  2. Nvidia GPU驱动程序(v375) - 使操作系统能够操作GPU。

  3. CUDA (v8.0) - GPU C库。代表计算统一设备架构。

  4. cuDNN (v6.0.21) - 基于CUDA的深度学习基元库。代表CUDA深度神经网络。

  5. pip (v9.0.1) - Python包安装程序。

  6. TensorFlow (v1.3) - 由Google开发的深度学习库。

  7. Theano(v0.9.0) - 在GPU上运行的数学库。

  8. CNTK (v2.2) - 由Microsoft Research开发的深度学习框架。

  9. Keras (v2.0.8)- 深度学习包装。可与TensorFlow、Theano或CNTK一起使用。

  10. PyTorch(v0.2.0) - 具有GPU加速的动态深度学习库。


1. 安装 Ubuntu 16.04.3


本章节所示的安装步骤将覆盖已有的分区或操作系统,安装一个“干净的操作系统”。


由于v 16.04.3是最新的LTS(长期支持)版本,因此它可以安装在可启动的USB上。首次打开计算机电源时,通过访问引导菜单并选择USB从USB引导。


我的计算机有两个硬盘,1TB的SATA和256GB的SSD。在我的搭建计划中,Ubuntu安装在1TB的硬盘中,这样SSD就可以用于存放数据集,加快训练速度。在安装过程中,屏幕显示Installation Type时,我选择了Something else,这一步将创建以下三个分区:


  • 引导分区(128GB):包含系统文件、程序设置和文档。


  • 交换分区(2xRAM大小):对我来说,这是128GB。用于扩展内核RAM作为虚拟内存使用。

  • 用户分区(剩余的):我的1TB硬盘驱动器的可用空间为744GB。


安装完成后,运行以下命令升级内核版本。


sudo apt-get update

sudo apt-get upgrade


2. 安装Nvidia GPU驱动程序


安装Ubuntu后,你可能会注意到屏幕分辨率不正确,而且无法更改。这是因为来自GPU的视频输出没有驱动程序,也没有配置。


有两种方法来安装驱动程序,从某个“Ubuntu的资源库”安装,或者从“源”安装。第一种方法更容易,但需要频繁重新安装。当调用命令sudo apt-get update和sudo apt-get upgrade时,会更新内核。这不会更新Nvidia驱动程序,并将导致GUI无法正确加载。而从源安装则可以避免这个问题。


从包装安装v375(更容易)


以下命令将列出与系统兼容的驱动程序版本。它将给出两个数字:最新版本和长期版本号。这个命令将从最早的版本开始列出,所以一定要向上滚动屏幕。


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


添加并安装资源库。在第二个命令中,将<driver_number>更改为要安装的版本。建议安装最新的长期支持版本:375。


sudo apt-get updatesudo apt-get install nvidia-<driver_number>


重新启动计算机并重新配置视频输出参数。


sudo shutdown -r now


Screen Display(屏幕显示)现在应该能够正确识别使用的显示器了,要测试驱动程序是否能正常工作,你可以更改显示配置、分辨率和方向。


从Nvidia源安装v384.90(更难)


从Nvidia网站下载最新的驱动程序。对我而言,我选择的选项是:

GeForce -> GeForce 10 系列 -> GeForce GTX 1080 -> Linux 64位 -> 英语(英国)

可以选择编译为32位架构,以及开发版本的GUI。


sudo apt-get install gcc-multilib xorg-dev


按CTRL + ALT + F1并登录。这将从GUI切换到终端。为了重建视频输出,必须首先停止GUI。


sudo service lightdm stop


如果该命令不起作用,那么说明Ubuntu的新版本使用的是systemctl而不是lightdm。然后给这个程序赋予可执行权限并运行它。


cd <download location>

chmod +x NVIDIA-Linux-x86_64-384.90.runsudo ./NVIDIA-Linux-x86_64-384.90.run --dkms


运行时,你可能会收到pre-install script failed(预安装脚本失败)的消息。这并不重要,因为预安装脚本包含一个命令:exit 1。其目的只是为了确保你真的要安装驱动程序。


选项--dkms(默认情况下应该是这个选项)在内核通过将驱动程序安装到一个模块中来更新自身时,会阻止重新安装驱动程序。在内核更新期间,dkms触发驱动程序重新编译到新的内核模块堆栈。


如果安装失败,那是因为Secure Boot没有在计算机的BIOS中禁用。重新启动计算机并在BIOS选项中禁用Secure Boot。


如果安装成功,则可以重新启动GUI了。


sudo service lightdm start


卸载:sudo ./NVIDIA-Linux-x86_64-384.90.run --uninstall


验证


确保以下命令能够识别正确的GPU版本


nvidia-smi


确保驱动程序版本号就是你所安装的版本号


cat /proc/driver/nvidia/version


3. 安装CUDA 8.0


从Nvidia网站下载CUDA的运行文件,使用以下系统属性:

Linux -> x86_64 -> Ubuntu -> 16.04 -> .deb(网络)

浏览.deb文件的存放位置,卸载.deb,更新软件包列表并使用以下命令安装CUDA。


sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb

sudo apt-get update

sudo apt-get install cuda



将库添加到bash路径中,以便可以让其他应用程序找到。


echo 'export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}' >> ~/.bashrc

echo 'export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc

source ~/.bashrc



要进行"验证",执行nvcc -V以检查 Nvidia C 编译器版本(nvcc)与CUDA所使用的编译器版本一致。


重新启动计算机sudo shutdown -r now来完成安装。


可选:测试CUDA安装


测试安装的方法是运行一些例程。以下命令将创建一个名为test_CUDA的目录,其中会存储示例程序.


mkdir test_CUDAcd test_CUDA

./cuda-install-samples-8.0.sh


子目录NVIDIA_CUDA-8.0_Samples/3_Imaging/cudaDecodeGL中存放了文件findgllib.mk。该文件在第61行第30列包含了Nvidia驱动程序的硬编码值,该值应从367更改为先前安装的驱动程序版本号。


编译例程


cd ../.. && make


你现在可以在NVIDIA_CUDA-8.0_Samples中运行例程了。 NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release中有两个特别有用的脚本。 ./deviceQuery能打印出正在使用的GPU,./bandwidthTest能打印出GPU的带宽。


4. 安装 cuDNN 6.0.21


在Nvidia网站上注册开发人员计划并同意条款。从下拉菜单**cuDNN v6.0.21 (April 27, 2017), for CUDA 8.0下载:


  • cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb)

  • cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)

  • cuDNN v6.0 Code Samples and User Guide for Ubuntu16.04 (Deb)


.deb优于.tar,因为这个格式专门为Ubuntu设计,安装过程更加清晰。这三个软件包可以使用以下命令进行安装:


sudo dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb

sudo dpkg -i libcudnn6-dev_6.0.21-1+cuda8.0_amd64.deb

sudo dpkg -i libcudnn6-doc_6.0.21-1+cuda8.0_amd64.deb


测试 cuDNN


将安装的例程复制到可读目录中,编译并运行mnistCNN。


cp -r /usr/src/cudnn_samples_v6/ $HOME

cd $HOME/cudnn_samples_v6/mnistCUDNN

make clean && make

./mnistCUDNN


如果一切顺利,脚本应该返回Test passed!


卸载 cudnn


以下命令将卸载这三个库。另外,如果你已经创建了例程,那么另外还有执行rm -r〜/ cudnn_samples_v6。


sudo apt-get remove libcudnn6 sudo apt-get remove libcudnn6-dev sudo apt-get remove libcudnn6-doc


pip本身的更新非常频繁,每两周一次。建议使用最新的pip。

以下命令将进行安装并升级到最新版本。


sudo apt-get install python-pip python-dev

sudo pip install --upgrade pip


要进行"验证",确保pip -V能打印出版本号。


6. 安装 Tensorflow 1.3.0


pip install tensorflow-gpu


要进行"验证",启动python,执行$ python,并确保以下脚本能打印出Hello, TensorFlow!


import tensorflow as tfhello = tf.constant('Hello, TensorFlow!')

sess = tf.Session()print(sess.run(hello))


7. 安装 Theano 0.10


Theano需要以下系统依赖关系


sudo apt-get install libopenblas-dev 


和以下Python依赖关系。


sudo pip install numpy scipy nose sphinx pydot-ng `pycuda scikit-cuda cython`


libgpuarray让Theano能够使用GPU,它必须从源代码进行编译。首先下载源代码


git clone https://github.com/Theano/libgpuarray.git

cd libgpuarray


在一个名为Build的文件夹中进行编译。


mkdir Buildcd Build

cmake .. -DCMAKE_BUILD_TYPE=Releasemakesudo make install


然后编译成一个python包


cd ..

`python setup.py build

sudo python setup.py install`


将下面这一行添加到~/.bashrc中,以便Python可以找到这个库。


export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH


最后,安装Theano


sudo pip install git+https://github.com/Theano/Theano.git#egg=Theano


要进行"验证",首先创建一个测试文件test_theano.py, 其内容可以从这里复制过去。然后确保THEANO_FLAGS = device = cuda0 python test_theano.py能成功输出Used the gpu。


8. 安装 CNTK 2.2


sudo pip install https://cntk.ai/PythonWheel/GPU/cntk-2.2-cp27-cp27mu-linux_x86_64.whl


要进行"验证",确保python -c "import cntk; print(cntk.__version__)"能打印出2.2。


9. 安装 Keras 2.0.8


sudo pip install keras


要进行"验证",检查$ python中的import keras是否成功了。


10. 安装 PyTorch 0.2.0


PyTorch的运行依赖torchvision和torch这两个库,下面将进行安装。


sudo pip install http://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp27-cp27mu-manylinux1_x86_64.whl

sudo pip install torchvision


要进行"验证",以下脚本应该能打印出一个张量。


from __future__ import print_functionimport torch

x = torch.Tensor(5, 3)print(x)


结论


到目前为止,整个过程中最难的部分是找到Nvidia驱动程序和深度学习软件包之间的依赖关系,以及最有效的长期支持版本的安装过程。最简单的部分是安装Python包,这些包维护得非常好,而且文档详细。


虽然阅读文档和源代码非常耗时,但是了解每个软件包的构建和运行情况非常有启发性,它能够帮助我了解整个Ubuntu生态系统。


来源:云栖社区

推荐阅读

谷歌教你零编程基础玩转机器学习

中科院谭铁牛爱徒研发碟中谍中的步态识别技术

肯尼亚的小哥利用深度学习“桃脸识别”

专访深度学习之父Geoffrey Hinton

NIH发布全球最大胸部X光数据集

20年后的iphoneXXXX手机长这样

CMU用「PixelNN」完美还原马赛克照片(paper)

9行Python代码搭建神经网络(代码)

娃哈哈投资1000万美元在以色列建立AI研究中心

430家以色列人工智能初创公司图谱及十大特征 

25行Python代码实现人脸识别 || 教程

AI可以将UI设计图自动生成跨平台代码(paper)


长期招聘志愿者

加入「AI从业者社群」请备注个人信息

添加小鸡微信  liulailiuwang


深度学习软件安装指南