GPU 加速的 MXNet

现在,开始阅读此《GPU Ready Apps Guide》(GPU Ready 应用程序指南)。

MXNet

MXNet 是开源深度学习框架,允许用户在多种设备(无论是云基础架构还是移动设备)上定义、训练和部署深度神经网络。该框架具备高度可扩展性,可以进行快速的模型训练,并支持灵活的编程模型和多种语言。

利用 MXNet 可以混合符号和命令式编程,以最大限度提升效率和生产力。该框架的核心是动态依赖调度程序,可自动即时并行处理符号式操作和命令式操作。在调度程序之上增加图形优化层可加快符号执行速度并提高内存效率。

MXNet 库可移植并且规模小巧。它采用 NVIDIA Pascal GPU 加速,可以跨多个 GPU 和多个节点进行扩展,从而更快地训练模型。

安装

系统要求

MXNet 可以在 Ubuntu/Debian、Amazon Linux、OS X 和 Windows 操作系统上运行。MXNet 也可在 Docker 和云端(例如 AWS)运行。MXNet 还可以在嵌入式设备上运行,例如运行 Raspbian 的 Raspberry Pi。MXNet 目前支持 Python、R、Julia 和 Scala 语言。

本说明适用于 Ubuntu/Debian 用户。 
支持 GPU 的 MXNet 版本具有以下要求:

1.64 位 Linux

2.Python 2.x / 3.x

3.NVIDIA CUDA® 7.0 或更高版本(Pascal GPU 需要 CUDA 8.0)

4.NVIDIA cuDNN v4.0(最低)或 v5.1(推荐)

 

此外,还需要支持计算能力 3.0 或更高版本的 NVIDIA GPU。

下载和安装说明

以下是编译过程的简要概述

1.安装 CUDA

要使用具有 NVIDIA GPU 的 MXNet ,第一步是安装 CUDA 工具包

2.安装 cuDNN

安装 CUDA 工具包后,下载适用于 Linux 的 cuDNN v5.1 库 (请注意,您需要注册 加速计算开发人员计划)。 
下载后,解压缩文件并将其复制到 CUDA 工具包目录(假设此目录位于 /usr/local/cuda/)

3.安装依赖项

$ sudo apt-get update
$ sudo apt-get install -y git build-essential libatlas-base-dev \
libopencv-dev graphviz python-pip
$ sudo pip install setuptools numpy --upgrade
$ sudo pip install graphviz jupyter 
$ sudo pip install requests # for examples, e.g., mnist, cifar

4.安装 MXNet

将 MXNet 源代码库克隆到计算机,运行安装脚本,然后刷新环境变量。除了编译 MXNet,还需要安装 python MXNet 模块并加上路径

$ git clone https://github.com/dmlc/mxnet.git --recursive
$ cd mxnet
$ cp make/config.mk .
$ echo "USE_CUDA=1" >> config.mk # to enable CUDA
$ echo "USE_CUDA_PATH=/usr/local/cuda" >> config.mk
$ echo "USE_CUDNN=1" >> config.mk
$ make –j $(nproc)
$ cd python; sudo python setup.py install; cd .. # to install MXNet python module
$ export MXNET_HOME=$(pwd)
$ echo "export PYTHONPATH=$MXNET_HOME/python:$PYTHONPATH" >> ~/.bashrc
$ source ~/.bashrc

5.测试安装

检查 MXNet 是否已正确安装。

$ python 
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
请输入“help”、“copyright”、“credits”或“license”以了解更多信息。
>>> import mxnet as mx
>>> a = mx.nd.ones((2, 3), mx.cpu())
>>> print ((a * 2).asnumpy())
[[ 2.2.2.]
[ 2.2.2.]]
>>> a = mx.nd.ones((2, 3), mx.gpu())
>>> print ((a * 2).asnumpy())
[[ 2.2.2.]
[ 2.2.2.]]

如果未收到导入错误提示,则 MXNet 已完成 python 准备。

训练模型

现在您已成功安装 MXNet,接下来可在单个和多个 GPU 上用训练示例进行测试。

MNIST 模型

图像分类示例:

cd example/image-classification

在 mnist 数据集和 GPU 0 上训练多层感知

$ python train_mnist.py --network mlp --gpus 0

CIFAR10 模型

在 cifar10 数据集上使用 GPU 0 和 1 训练 110 层 resnet,批尺寸为 128

$ python train_cifar10.py --network resnet --num-layers 110 \ --batch-size 128 --gpus 0,1

INCEPTION V3

要在 imagenet 网络中运行基准测试,请使用 --benchmark 1 作为参数来训练 _imagenet.py:

$ cd example/image-classification # if you are at MXNET_HOME

$ python train_imagenet.py --benchmark 1 --gpus 0,1 --network inception-v3 \ --batch-size 64 --image-shape 3,299,299 --num-epochs 10 --kv-store device

基准

多 GPU 系统中的 MXNET 性能

Tesla P100 上的 CIFAR10 训练性能
Tesla P100 上的 Inception v3 训练性能
Tesla P100 上的 MNIST 训练性能

推荐的系统配置

硬件配置

PC

参数
规格

CPU 架构

x86_64

系统内存

8-32 GB

CPU 数

2 个 CPU 插槽(8 核以上
,2 GHz 以上?)

GPU 型号

NVIDIA®TITAN

GPU 数

1-4

服务器

参数
规格

CPU 架构

x86_64

系统内存

32 GB 以上

CPU 数/节点数

2(8 核以上,2 GHz 以上)

GPU 型号

Tesla®P100

GPU 数/节点数

1-4

软件配置

软件堆栈

参数
版本

操作系统

CentOS 6.2

GPU 驱动程序

375.35 或更高版本

CUDA 工具包

8.0 或更高版本

cuDNN 库

v5.0 或更高版本

cuDNN

2016.0.47

立即构建理想的 GPU 解决方案。