深度学习软件安装指南

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

由于即将要开始撰写强化学习论文,所以我最近搭建了一个基于Ubuntu和Nvidia的深度学习计算机。虽然在深度学习方面有很多不错的教程,但却无法找到一篇完整的安装说明。我不得不阅读大量的文档来了解细节和规范,其中一些不完整或者存在语法错误。因此,我决定把我所做的所有工作进行整理并记录下来。

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

  • 操作系统(Ubuntu)
  • 4个驱动程序和库(GPU驱动程序、CUDA、cuDNN和pip)
  • 5个Python深度学习库(TensorFlow、Theano、CNTK、Keras和PyTorch)

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

11.png

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

  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 updatesudo 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.run
sudo ./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_CUDA
cd 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 下载:

  1. cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb)
  2. cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)
  3. 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

5. 安装 pip 9.0.1

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 tf
hello = 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 Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo 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的运行依赖torchvisiontorch这两个库,下面将进行安装。

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_function
import torch
x = torch.Tensor(5, 3)
print(x)

结论

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

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

文章原标题《Deep Learning Software Installation Guide》,作者:dyth,译者:夏天,审校:主题曲。

文章为简译,更为详细的内容,请查看原文

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
机器学习/深度学习 JSON 算法
智能零售柜商品检测软件(Python+YOLOv5深度学习模型+清新界面)
智能零售柜商品检测软件(Python+YOLOv5深度学习模型+清新界面)
584 0
|
机器学习/深度学习 算法 数据可视化
智能扑克牌识别软件(Python+YOLOv5深度学习模型+清新界面)
智能扑克牌识别软件(Python+YOLOv5深度学习模型+清新界面)
621 0
|
8月前
|
机器学习/深度学习 监控 算法
利用BP算法优化企业电脑监控软件:一览深度学习在安全防护中的崭新应用
不知道大家有没有听说过BP(Backpropagation)神经网络算法,听上去比较高级,但其实也是挺酷的!而且BP算法还可以在企业电脑监控软件方面大显身手哦。想知道怎么玩转它吗?别担心,接下来咱们就用通俗易懂的语言来了解一下BP算法在企业电脑监控软件中的作用——
88 0
|
11月前
|
机器学习/深度学习 Java Linux
「技术选型」深度学习软件如何选择?
「技术选型」深度学习软件如何选择?
|
11月前
|
机器学习/深度学习 Java Linux
「技术选型」深度学习软件选择
「技术选型」深度学习软件选择
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
「首席架构师推荐」深度学习软件比较
「首席架构师推荐」深度学习软件比较
|
机器学习/深度学习 传感器 数据可视化
交通信号标志识别软件(Python+YOLOv5深度学习模型+清新界面)
交通信号标志识别软件(Python+YOLOv5深度学习模型+清新界面)
440 0
|
机器学习/深度学习 数据可视化 安全
机场航拍图像检测软件(Python+YOLOv5深度学习模型+清新界面)
机场航拍图像检测软件(Python+YOLOv5深度学习模型+清新界面)
252 0
|
机器学习/深度学习 算法 数据可视化
二维码及条形码智能检测软件(Python+YOLOv5深度学习模型+清新界面)
二维码及条形码智能检测软件(Python+YOLOv5深度学习模型+清新界面)
496 0
|
机器学习/深度学习 存储 XML
血细胞智能检测与计数软件(Python+YOLOv5深度学习模型+清新界面版)
血细胞智能检测与计数软件(Python+YOLOv5深度学习模型+清新界面版)
309 0