一起做实验 | 多GPU并行计算训练深度神经网络

戴尔易安信解决方案 2018-03-08

戴尔易安信解决方案

微信号 DellEMC_Enterprise
功能介绍 戴尔易安信解决方案专注于数字化转型中的前沿技术和解决方案,内容涵盖现代化基础架构、云计算、大数据、物联网及AI等,并通过对全球,特别是中国用户的成功实践案例分析和前沿技术解读,助力企业数字化转型,快人一步!


点击“戴尔易安信解决方案”快速订阅


2018年2月25日,平昌东奥会闭幕式上,备受瞩目的“北京八分钟”惊艳了全世界。整个展示过程由神奇独特的人工智能和演员互动,充满科技含量的机器人和24块机器人冰屏旋转腾挪。短短8分钟,让世界看到了中国的飞速发展。



我们正身处于一个如此快速多变的时代,技术推陈出新,层出不穷:人工智能、机器、深度学习、自动驾驶、物联网、区块链、虚拟现实、增强现实等。这些新技术既神秘又让人向往,而如何更好地应用新技术,把握抓住变革中的机会,也是大小厂商的日常探索课题。


今天,小编为您详细解读戴尔易安信在深度学习(Deep Learning)方向的解决方案。作为一家具有前瞻性的科技公司,戴尔易安信的深度学习有何不同呢?


主流深度学习工具知多少


这两年风靡全球的深度学习,计算平台越来越多的采用GPU计算加速。GPU加速技术将应用程序计算密集部分的工作负载转移到GPU,相对于CPU由专为顺序串行处理设计的架构,GPU则拥有一个数以千计的更小的核心,组成了大规模并行计算架构,使工作负载吞吐量提升明显。



Dell EMC推出了火力强大的PowerEdge C4130,面向机器学习和HPC领域。在1U的空间里可以放入4块Tesla GPU加速卡用于计算,堪称性能怪兽。目前,已在我国航天的嫦娥月球勘探项目中承担了分析轨道等高性能计算的重要任务。



目前主流的深度学习工具有很多:

Caffe,用于脑回神经网络算法的框架,其作者是当时在UC Berkeley大学的 PhD贾扬清老师。

TensorFlow,Google开源的第二代深度学习框架,用于Google搜索,图像识别框架。

MXnet,颇具实力的后起之秀,亚马逊宣布把MXnet作为其公司最主要的深度学习框架,并与AWS结合。支持后续代码开发,维护和开发费用。而Apache也把MXnet加入孵化器项目。作者李沐和陈天奇都是交大校友,我们很高兴的在深度学习中看到了中国人在内发挥着重要的作用。

Torch,Facebook力推的深度学习框架,有较好的灵活性。

Theano,诞生于蒙特利尔理工学院,主要开发语言是Python。


通过在Tesla M40上运行Caffe和Torch,可在数天内交付。而相同的模型,在上一代计算系统中则需要花费长达数周的时间。



C4130+4 x Tesla M40+ Caffe


环境准备:

Caffe1.0.0-rc5,支持大部分主流操作系统平台,实验环境选用的Ubuntu16.04 LTS。

CUDA8.0,NVIDIA公司推出的并行计算平台,利用GPU并行计算就需要安装。Ubuntu 16.04支持CUDA 8.0版本了,请各位同学放心使用。

cuDNN5.1,CUDA的深层神经网络库,用于GPU加速,官方出品加速外挂。

NCCL,让多个GPU工作就靠它了。

OPENBLAS3.1,BLAS是一个标准的数学函数接口,有很多个实现。Caffe官方默认使用的是ATLAS,但这个版本的BLAS不支持多核GPU,所以这里选用开源的OPENBLAS。有条件的同学还可以选择IntelMKL。

OPENCV3.1,开源的计算机视觉库,Caffe可视化图形需要调用。

Python2.7,这个是Ubuntu自带源的版本,也可以选择Anaconda3.3+。


以下是部分CaffeMakefile.config的参数设定:

注:具体安装配置可以参考http://caffe.berkeleyvision.org/installation.html


CUDA和Driver安装成功后的状态:


本次测试训练MNIST example。MNIST是一个经典的计算机视觉数据集,包含10000个手写测试图片用于机器训练,每张图都是固定28x28像素。曾经用于美国各大银行识别手写支票上的数字。


注:可以从http://yann.lecun.com/exdb/mnist/下载四个数据包,或者通过./$caffe_root/data/mnist/get_mnist.sh脚本获得。


train-images-idx3-ubyte.gz:training set images (9912422 bytes)

train-labels-idx1-ubyte.gz:training set labels (28881 bytes)

t10k-images-idx3-ubyte.gz:test set images (1648877 bytes)

t10k-labels-idx1-ubyte.gz:test set labels (4542 bytes)


我们来学习一下MNIST的lenet_solver.prototxt文件内的具体参数定义。


# The train/test net protocol buffer definition

net:"examples/mnist/lenet_train_test.prototxt"//网络协议具体定义

# test_iter specifies how many forward passes the test should carry out

# In the case of MNIST,we have test batch size 100 and 100 test iterations

# covering the full 10,000 testing images


  • test_iter:100//test迭代次数 如果batch_size =100,则100张图一批,训练100次,则可以覆盖10000张图的需求。


# Carry out testing every 500 training iterations

test_interval: 500//训练迭代500次,测试一次

# The base learning rate,momentum and the weight decay of the network

base_lr:0.01//网络参数:学习率

momentum:0.9//网络参数:动量

weight_decay: 0.0005//网络参数:权重的衰减

# The learning rate policy

lr_policy:"inv"

gamma:0.0001//学习策略:有固定学习率

power:0.75//学习策略:每步递减学习率

# Display every 100 iterations

display:100//每迭代100次显示一次

# The maximum number of iterations

max_iter:10000//最大迭代次数

# snapshot intermediate results

snapshot:5000//每5000次迭代存储一次数据

snapshot_prefix:"examples/mnist/lenet"

# solver mode:CPU or GPU

solver_mode:GPU//使用GPU或CPU


多GPU并行训练  使用率提升至84%


启用所有GPU需要加入-gpuall的参数,训练10000次的训练模型放在$caffe_root/example/mnist下面。


#./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt -gpu all



训练的时候GPU的使用率,可以看到4个GPU使用率提升至84%,但是显存使用率不高。这可能是因为实验环境采用的训练集比较小有关。如果是大型的数据集,显存的优势会更加明显。



CPU和GPU加速的训练时间对比:

  • #time sh examples/mnist/train_lenet.sh,CPU训练耗时7m49s,精度0.9912。


  • #time sh examples/mnist/train_lenet.sh –gpuall,GPU训练耗时32.034s,精度0.9909。


配合OPENCV展示这次训练模型的识别效果。



采用数据集的大小是影响训练结果精度的重要因素,利用多GPU并行计算的框架来训练深度神经网络。面向海量的数据训练集,包括图像分类,视频分析,语音识别等场景,大幅度的缩短了耗时,占用数据中心的基础设施也少得多。


彩蛋


Caffe还自带一些比较有有趣的demo,比如包括了一个分类识别的模型。这是已经在训练好的模型,我们只要引用就可以了。这个分类模式可以按照上传的图片进行分类,比如动物,物品,汽车等。


我们一起来看看以下例子在Caffedemo模型能识别出哪些信息。

机器认为是 猫 /家猫 /猫科 /家畜 /食肉动物, 后面的数字代表的识别时间。


好像有点太简单了,不如增加一下难度。

机器认为是 灵长类 /猴子 /衣物 /新世界猴子 /消费产品。