1. 程式人生 > >一起做實驗 | 多GPU平行計算訓練深度神經網路

一起做實驗 | 多GPU平行計算訓練深度神經網路

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

科技你好

關注我們·成為科技潮人

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&retryload=1

2018年2月25日,平昌東奧會閉幕式上,備受矚目的“北京八分鐘”驚豔了全世界。整個展示過程由神奇獨特的人工智慧和演員互動,充滿科技含量的機器人和24塊機器人冰屏旋轉騰挪。短短8分鐘,讓世界看到了中國的飛速發展。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&retryload=1

我們正身處於一個如此快速多變的時代,技術推陳出新,層出不窮:人工智慧、機器、深度學習、自動駕駛、物聯網、區塊鏈、虛擬現實、增強現實等。這些新技術既神祕又讓人嚮往,而如何更好地應用新技術,把握抓住變革中的機會,也是大小廠商的日常探索課題。

今天,小編為您詳細解讀戴爾易安信在深度學習(Deep Learning)方向的解決方案。作為一傢俱有前瞻性的科技公司,戴爾易安信的深度學習有何不同呢?

主流深度學習工具知多少

這兩年風靡全球的深度學習,計算平臺越來越多的採用GPU計算加速。GPU加速技術將應用程式計算密集部分的工作負載轉移到GPU,相對於CPU由專為順序序列處理設計的架構,GPU則擁有一個數以千計的更小的核心,組成了大規模平行計算架構,使工作負載吞吐量提升明顯。

640?wx_fmt=png

Dell EMC推出了火力強大的PowerEdge C4130,面向機器學習和HPC領域。在1U的空間裡可以放入4塊Tesla GPU加速卡用於計算,堪稱效能怪獸。目前,已在我國航天的嫦娥月球勘探專案中承擔了分析軌道等高效能運算的重要任務。

640?wx_fmt=png

目前主流的深度學習工具有很多:

640?wx_fmt=png

Caffe,用於腦回神經網路演算法的框架,其作者是當時在UC Berkeley大學的 PhD賈揚清老師。

640?wx_fmt=png

TensorFlow,Google開源的第二代深度學習框架,用於Google搜尋,影象識別框架。

640?wx_fmt=png

MXnet,頗具實力的後起之秀,亞馬遜宣佈把MXnet作為其公司最主要的深度學習框架,並與AWS結合。支援後續程式碼開發,維護和開發費用。而Apache也把MXnet加入孵化器專案。作者李沐和陳天奇都是交大校友,我們很高興的在深度學習中看到了中國人在內發揮著重要的作用。

640?wx_fmt=png

Torch,Facebook力推的深度學習框架,有較好的靈活性。

640?wx_fmt=png

Theano,誕生於蒙特利爾理工學院,主要開發語言是Python。

通過在Tesla M40上執行Caffe和Torch,可在數天內交付。而相同的模型,在上一代計算系統中則需要花費長達數週的時間。

640?wx_fmt=png

C4130+4 x Tesla M40+ Caffe

環境準備:

640?wx_fmt=png

Caffe1.0.0-rc5,支援大部分主流作業系統平臺,實驗環境選用的Ubuntu16.04 LTS。

640?wx_fmt=png

CUDA8.0,NVIDIA公司推出的平行計算平臺,利用GPU平行計算就需要安裝。Ubuntu 16.04支援CUDA 8.0版本了,請各位同學放心使用。

640?wx_fmt=png

cuDNN5.1,CUDA的深層神經網路庫,用於GPU加速,官方出品加速外掛。

640?wx_fmt=png

NCCL,讓多個GPU工作就靠它了。

640?wx_fmt=png

OPENBLAS3.1,BLAS是一個標準的數學函式介面,有很多個實現。Caffe官方預設使用的是ATLAS,但這個版本的BLAS不支援多核GPU,所以這裡選用開源的OPENBLAS。有條件的同學還可以選擇IntelMKL。

640?wx_fmt=png

OPENCV3.1,開源的計算機視覺庫,Caffe視覺化圖形需要呼叫。

640?wx_fmt=png

Python2.7,這個是Ubuntu自帶源的版本,也可以選擇Anaconda3.3+。

以下是部分CaffeMakefile.config的引數設定:

640?wx_fmt=png

注:具體安裝配置可以參考http://caffe.berkeleyvision.org/installation.html

CUDA和Driver安裝成功後的狀態:

640?wx_fmt=png

本次測試訓練MNIST example。MNIST是一個經典的計算機視覺資料集,包含10000個手寫測試圖片用於機器訓練,每張圖都是固定28x28畫素。曾經用於美國各大銀行識別手寫支票上的數字。

640?wx_fmt=png

注:可以從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

640?wx_fmt=png

訓練的時候GPU的使用率,可以看到4個GPU使用率提升至84%,但是視訊記憶體使用率不高。這可能是因為實驗環境採用的訓練集比較小有關。如果是大型的資料集,視訊記憶體的優勢會更加明顯。

640?wx_fmt=png

CPU和GPU加速的訓練時間對比:

  • #time sh examples/mnist/train_lenet.sh,CPU訓練耗時7m49s,精度0.9912。

640?wx_fmt=png
  • #time sh examples/mnist/train_lenet.sh –gpuall,GPU訓練耗時32.034s,精度0.9909。

640?wx_fmt=png

配合OPENCV展示這次訓練模型的識別效果。

640?wx_fmt=gif640?wx_fmt=png

採用資料集的大小是影響訓練結果精度的重要因素,利用多GPU平行計算的框架來訓練深度神經網路。面向海量的資料訓練集,包括影象分類,視訊分析,語音識別等場景,大幅度的縮短了耗時,佔用資料中心的基礎設施也少得多。

640?wx_fmt=png

彩蛋

Caffe還自帶一些比較有有趣的demo,比如包括了一個分類識別的模型。這是已經在訓練好的模型,我們只要引用就可以了。這個分類模式可以按照上傳的圖片進行分類,比如動物,物品,汽車等。

我們一起來看看以下例子在Caffedemo模型能識別出哪些資訊。

640?wx_fmt=jpeg640?wx_fmt=jpeg

機器認為是 貓 /家貓 /貓科 /家畜 /食肉動物, 後面的數字代表的識別時間。

好像有點太簡單了,不如增加一下難度。

640?wx_fmt=jpeg640?wx_fmt=jpeg

機器認為是 靈長類 /猴子 /衣物 /新世界猴子 /消費產品。

640?wx_fmt=gif

相關文章導讀

↓↓↓

640.jpeg?

點選“閱讀原文”瞭解更多戴爾數字化轉型方案