多GPU並行計算訓練深度神經網路
科技你好
關注我們·成為科技潮人
GIF
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的參數設定:
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展示這次訓練模型的識別效果。
GIF
採用數據集的大小是影響訓練結果精度的重要因素,利用多GPU並行計算的框架來訓練深度神經網路。面向海量的數據訓練集,包括圖像分類,視頻分析,語音識別等場景,大幅度的縮短了耗時,佔用數據中心的基礎設施也少得多。
彩蛋
Caffe還自帶一些比較有有趣的demo,比如包括了一個分類識別的模型。這是已經在訓練好的模型,我們只要引用就可以了。這個分類模式可以按照上傳的圖片進行分類,比如動物,物品,汽車等。
我們一起來看看以下例子在Caffedemo模型能識別出哪些信息。
機器認為是 貓 /家貓 /貓科 /家畜 /食肉動物, 後面的數字代表的識別時間。
好像有點太簡單了,不如增加一下難度。
機器認為是 靈長類 /猴子 /衣物 /新世界猴子 /消費產品。
※還在籌錢等小米MIX2S?再等三個月,小米7都要來了,還是良心價
※為啥有人寧願一年換三次安卓手機,也不願三年換一次蘋果?
TAG:比特網 |