DIGITS 2支持多GPU自動擴展 實現深度學習性能倍增
DIGITS 是一款面向數據科學家和研究人員的交互式深度學習開發工具,設計的初衷是為了適應優越的深度神經網絡的迅速開發和部署。 NVIDIA在2015年3月份推出了DIGITS,今天發布的DIGITS 2,包含了多GPU自動擴展功能。不管是為單個數據集開發優化的神經網絡還是在多個數據集上訓練多重網絡,DIGITS 2都能夠很輕松快捷地使用多GPU開發并行優化網絡。
深度學習使用深度神經網絡(DNNs)和大數據集來教計算機從輸入數據中檢測可識別的概念,去解釋或理解自然語言以及解讀信息等。深度學習已經運用在研究界和工業領域,目的是幫助解決諸多大數據問題,比如相似搜索、目標檢測和定位。實際應用包括駕駛助手的車輛、行人和地標識別;圖像識別;語音識別;自然語言處理;神經機器翻譯和細胞有絲分裂檢測。
使用DIGITS進行DNN開發和部署
開發一個優化的深度神經網絡是一個迭代的過程。數據科學家可能從流行的網絡配置(比如 AlexNet )開始或者創建一個自定義的網絡,然后迭代修改成一個非常適合訓練數據的網絡。一旦數據科學家們開發出了一套有效的網絡,他們可以將它部署在許多平臺上并且使用它,包括服務器、臺式計算機、移動設備和嵌入式設備(比如 Jetson TK1 或者 Drive PX )。圖1描述了創建這個網絡的總體進程,它分為兩個主要階段:開發和部署。
圖1:深度學習神經網絡開發和部署工作流程圖
對于你的數據集,DIGITS通過動態調節開發和訓練一個最優深度神經網絡所需要的網絡參數,使得它開發一個優化的深度神經網絡算法變得簡單。 DIGITS能夠很方便地創建新的數據集,并從中選擇出需要的訓練數據;在深度神經網絡開發階段,DIGITS可以讓你在數據集上追加新數據,還可以考慮到變化因素或者其他在模型部署環境下可能發生的其他失真以面向對象的方式擴充數據。
求解參數比如學習率和策略同樣容易修整,精度測試的批量大小和節奏可以迅速被修改。DIGITS可以靈活地運用標準網絡進行訓練、修改微調現有網絡以及從無到有創建自定義網絡。一旦配置完成,你就可以準備開始訓練數據了。在訓練過程中,DIGITS會顯示網絡的精準度,幫助你實時地針對訓練算法的性能做出決策,如果有必要,你可以終止訓練并重新配置網絡參數。
在你開發完了一套有效的網絡之后,DIGITS可以把所有的網絡用到的文件打包成單個可被下載的文件。這樣可以方便地將一個優化的網絡部署到任何設備。即便有錯分樣本或者以后有新的分類需要加入,DIGITS也很容易調整這個網絡,重新訓練然后重新部署。
讓我們來看看DIGITS 2的新特性。
多GPU使得訓練網絡更快
DIGITS 2 可以自動擴展多GPU。通過簡單的幾次點擊,你就能夠選擇多個GPU。隨著數據集的增大,使用更多的GPU訓練數據可以使網絡在更短的時間內獲取更多的數據,節省了開發過程中寶貴的時間。這個易用的功能可以在“新建圖像分類模型”按鈕的附近找到,如圖2所示:
圖2:DIGITS模型創建界面
DIGITS可以并行地在同一個數據集上訓練多個網絡,或者并行地在多個數據集上訓練同一個網絡。在GPU選項里,你可以為每一個訓練數據集選擇GPU,這使得你的硬件在執行多任務上變得更加容易。
圖3展示了使用多GPU減少訓練時間的情況。柱狀圖顯示了在批次大小為128之下,分別使用1個,2個和4個GPU訓練GoogleNet的加速情況。這些結果是由DIGITS DevBox使用GeForce TITAN X GPU和Caffe繪制而成。
圖3:使用DIGITS在DIGITS DevBox中使用多個GeForce TITAN X GPU加速訓練。這些結果是由Caffe在批次大小為128的情況下繪制的。
新的解算器
DIGITS 2增加了兩個新的解算器:自適應梯度下降(ADAGRAD)和涅斯捷羅夫加速梯度下降(NESTEROV)。這些和其他標準隨機梯度下降都是可選擇的,可以在“新建圖像分類模型”窗口的左側的解算器類型下拉菜單中找到。
圖2展示了解算器選項面板,你可以配置快照間隔,生效間隔,批量大小以及解算器的學習率策略。
GoogLeNet標準網絡
:
圖4:LeNet網絡配置案例
在2014年舉辦的 ImageNet LSVRC 大賽中,GoogLeNet贏得了分類和物體識別的挑戰。它和其他兩個網絡——LeNet和AlexNet——一起發布,如圖2中標準網絡板塊所示。一些使用者喜歡使用標準網絡開始優化他們的網絡,然后再基于結果進行自定義。和其他標準網絡一樣,比如LeNet和AlexNet,針對某一數據集開發最佳深度神經網絡,使用GoogleNet是一個非常棒的起點。
自定義網絡編輯框(圖2中)有分層的設置區域,激活函數(ReLU、TANH或者sigmoid)設置和偏差設置。點擊自定義網絡標簽下的“可視化”按鈕,可以在訓練之前便捷地查看修改內容。圖4展示了標準LeNet網絡的可視化界面。
改進了可視化和監控效果
在訓練過程中,DIGITS 2 可以在訓練窗口中展示所使用到的GPU的利用情況,如圖5所示。在網絡性能圖旁邊的訓練口中,會顯示GPU的利用率、存儲大小和溫度信息。這樣可以讓你在訓練過程中實時監控GPU使用情況,即使你不能直接訪問DIGITS所運行的主機。如果你發現GPU沒有被充分使用,你可以簡單的就將訓練停止,然后回到“新建圖像分類模型”窗口調整網絡參數,比如批量大小。
圖5:訓練過程中訓練性能和GPU利用率信息圖
訓練過程中分類
在訓練過程中,通過點擊訓練窗口(圖5)下方的“分類一張圖片”按鈕,DIGITS可以迅速的執行分類。當“顯示可視化”和“統計”被選中時,DIGITS 會從輸入圖像中畫出網絡的權重以及響應圖表。圖6展示了第一層的輸出樣例。除了網絡響應之外,DIGITS現在可以在每層參數旁邊繪制統計信息,包括頻率,平均值和標準差。這會幫助你了解輸入圖像的全局網絡響應情況。分類的結果會在左側顯示,包括輸入圖像和第一個卷積層的響應,包括權重、激活值和統計信息。
圖6:DIGITS 2分類結果案列,DIGITS 2 為每一層展現了統計信息。
DIGITS部署
可以非常容易地下載一個已經訓練好的網絡然后部署到其他系統上。點擊已訓練模型窗口下面的“下載”按鈕,可以得到一份將模型部署到一臺新機器上所需要的所有網絡文件。在目錄“DIGITS根目錄/examples/classification”下,有DIGITS 2提供的兩個新的腳本案例。一個直接與下載的.tal.gz文件交互,另一個是允許使用網絡文件的規格說明。下面是運行這些腳本命令的案例。
./use_archive.py DIGITS_Network_files.tar.gz path/to/image.jpg ./example.py network_snapshot.caffemodel deploy.prototxt image.jpg -l labels.txt -m mean.npy
現在開始DIGITS 2之旅
DIGITS 2的預覽版本(帖子中提到的所有功能)今天可以獲取到。便捷安裝包可以在 NVIDIA開發者網站 上下載。
所有功能和變更介紹在DIGITS的 發行說明 中。想了解更多關于DIGITS,可以報名參加即將到來的網絡研討會 “Introducing DIGITS 2” 。你也同樣可以閱讀我寫的 關于DIGITS首次發布的帖子 。
想獲取DIGITS源碼或者為DIGITS項目提供貢獻,請訪問我們在 GitHub 上的開源庫。有其他問題,反饋,或者想與DIGITS用戶社區進行交流,請參閱 DIGITS的郵件列表 或者發送郵件至:digits-users@googlegroups.com。
英文原文: Easy Multi-GPU Deep Learning with DIGITS 2 (譯者/劉翔宇 審校/劉帝偉、朱正貴 責編/周建丁)
關于譯者: 劉翔宇,中通軟開發工程師,關注機器學習、神經網絡、模式識別。