當前位置:
首頁 > 新聞 > 微軟打造深度學習開源框架「自動翻譯機」:不同框架輕鬆切換

微軟打造深度學習開源框架「自動翻譯機」:不同框架輕鬆切換

【新智元導讀】微軟Cortana智能和機器學習小組的數據科學家最新在Giuhub開源項目,對各個深度學習框架進行了基準測試,提供了很多有參考價值的數據以及GPU優化代碼。眾多的深度學習框架,就像世界上各種不同的語言一樣,但是,不會「外語」並不可怕,他們希望構建一個深度學習框架的羅塞塔石碑,讓開發人員和研究者能在這個眾多框架並存的環境中,好好生存。

新智元編譯

來源:blogs.technet.microsoft.com

作者:lia Karmanov, Mathew Salvaris, Miguel Fierro, Danielle Dean

翻譯:小潘同學

微軟打造深度學習開源框架「自動翻譯機」:不同框架輕鬆切換

我們相信深度學習框架和語言一樣:當然,很多人會說英語,但每種語言都有自己存在的目的。我們已經為幾個不同的網路結構創建了通用代碼,並可以基於不同的框架執行。我們想創建一個深度學習框架的「羅塞塔石碑」,如果你很了解現有的一個框架,這就可以幫助你學會其他的任何一個框架。可能出現的情況是,一篇論文發布的代碼在另一個框架下,或者整個pipeline都使用了另一種編程語言。這時候,與其用你最喜歡的框架從頭開始編寫一個模型,不如直接使用那個你不熟悉的語言。

我們想要感謝CNTK、Pytorch、Chainer、Caffe2和Knet團隊,以及過去幾個月為repo做出貢獻的開源社區內的其他人。

總而言之,我們的目標是創造:

一個深度學習框架的「羅塞塔石碑」,幫助數據處理的科學家可以輕鬆地利用他們的專業知識在框架之間進行隨意切換

最新最高級別的API優化GPU代碼

一種常見的方法,用於在GPU之間進行比較

一種用於比較不同編程語言的普遍結構(Python、Julia、R)

程序可以對自己安裝系統的性能進行預判

不同的開源社區之間的進行協作

常見深度學習框架基準測試:圖像識別、特徵提取、情感分析

在接下來幾個小節中,我們回顧了一種CNN模型的訓練時間,在一個預訓練的ResNet50模型上進行特徵提取,以及一種RNN模型的訓練時間。

識別時間:在CIFAR-10圖像資料庫上訓練 CNN(VGG-style,32bit)進行圖像識別

模型輸入是標準的CIFAR-10 數據集,包含10KB的訓練數據和10KB的測試數據圖像,這些圖像均勻分布在10個類別中。一個32x32的圖像被表示為一個(3,32,32)的張量, 0-255的像素值被映射到0-1上進行表示(見下圖表1):

微軟打造深度學習開源框架「自動翻譯機」:不同框架輕鬆切換

特徵提取:ResNet-50數據集上1000幅圖片的平均處理時間

一個預訓練的ResNet-50模型是在7x7大小的avg_pooling層中載入和處理,並輸出一個2048D維的向量。這個向量可以被嵌入到一個softmax層或者其他的分類器中,如用於遷移學習的增強樹。這個向avg_pooling層的傳遞是正向計時的。值得注意的是:批處理的大小要保持不變,但是在GPU上填滿RAM將會提高性能(見表2):

微軟打造深度學習開源框架「自動翻譯機」:不同框架輕鬆切換

訓練時間:在IMDB上的RNN(GPU)進行情感分析

這個模型的輸入是標準的IMDB電影評論集,包含25 KB的訓練數據和25 KB的測試數據,全部分為正負2個類。處理過程遵循Keras的方法,將start-character設置為1,out-of-vocab表示為2,其中vocab的大小是30KB。因此word-index從3開始。每循環一次,Zero-padded/truncated到固定軸是150個單詞(表3):

微軟打造深度學習開源框架「自動翻譯機」:不同框架輕鬆切換

我們從中學到了什麼?

自動調整:大多數框架使用cuDNN中的語句:cudnnFindConvolutionForwardAlgorithm() 來運行一個全方面的搜索和優化演算法,用於前在固定大小的圖像進行前向卷積。通常這是默認的,但一些框架可能需要一個標記,如「torch.backends.cudnn.benchmark= True」。

儘可能多地使用cuDNN:對於普通RNN模型(如基本的GRU或者LSTM),通常可以調用一個cuDNN wrapper來提高速度,例如用cudnnrnn.CudnnGRU()來代替rnn.GRUCell()。但這中應用的缺點是,對CPU延遲的運行中斷的要求更高。

形狀匹配:當在cuDNN上運行時,為CNN匹配NCHW,以及為RNNs匹配TNC的本地通道順序,這樣可以減少重構上的時間浪費,並可以直接獲得矩陣乘的結果。

本機生成器:使用框架的本機生成器,在這種情況下,擴展甚至預處理都是通過線程非同步執行的,這可以提高速度。

為了進行推理,確保在可能的情況下指定標記,從而節省不必要的漸變,並確保正確地應用了批處理和退出等層級結構。

當我們最初創建repo時,我們使用了許多小技巧來確保框架之間可以使用相同的模型,而且它是用最理想的方式完成的。令人難以置信的是,這些框架在過去的幾個月里發展得如此之快。因為框架的更新,2017年末獲得的用於進行最優化的初始經驗已經過時了。

例如,具有TF後端的Keras有一個被稱為channels-last的通道順序的硬編碼,儘管這種編碼順序對於cuDNN來說不是最優的,因此指定的channle-first原則意味著它會在每次的批處理後進行重新調整,並極大地降低訓練速度。現在,擁有TF後端的Keras支持原始的channels-first原則。在以前,Tensorflow可以通過一個指定標記,通過使用Winograd演算法來進行卷積,進而加快演算法速度,但現在這種方法已經沒有太大的幫助了。為了好玩,可以查看一下早期版本的「repo」的一些初步知識。

通過在不同的框架中完成end-to-end的方案,可以用幾種不同的方法來對這些框架進行比較。由於每個框架都使用相同的模型體系結構和數據,所以在框架中準確性是極其相似的(實際上,這是我們測試代碼的一種方法,以確保相同的模型可以進行跨框架的使用)而且,這些Notebook的開發目的是為了比較各個框架,並非是在速度上一較高下。

當然,很容易利用速度和推理時間等指標對不同的框架進行比較,但這不是為了顯示任何關於框架的總體性能,因為這忽略了對一些重要的因素進行比較,如:幫助和支持,預訓練模型的可用性、自定義層和架構,數據載入器,調試,不同的平台支持,分散式訓練等等。我們比較的指標只是為了對不同的框架上創建的相同網路進行比較,以及在一些具體例子上體現出的性能。

深度學習框架的自動翻譯機

在社區中有許多流行的深度學習框架,這可以幫助人工智慧開發人員和數據科學家利用不同深度學習。與之相關的一個工作是開放神經網路交換(ONNX),這是在框架之間轉移深度學習模型的開源代碼的一個標準。當基於一個框架進行開發而基於另一個框架進行模型轉換是,ONNX是非常有用的。類似地,MMdnn是一組工具,幫助用戶在不同的框架之間進行直接轉換並可視化模型的體系結構。

像ONNX和MMdnn這樣的工具,類似於深度學習框架的自動機器翻譯機。相比之下,我們今天發布的repo1.0版本就像深度學習框架的羅塞塔石碑,展示了不同框架下模型的構建過程。所有的努力,讓深度學習開發者和研究人員在一個有多種編程語言的環境中生存。

我們這次repo對應的1.0版本的開源代碼可以在Github上找到,網址是https://github.com/ilkarman/DeepLearningFrameworks

原文地址:

https://blogs.technet.microsoft.com/machinelearning/2018/03/14/comparing-deep-learning-frameworks-a-rosetta-stone-approach/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

【AI里程碑】機器翻譯系統提前7年達到人類專業翻譯水平!
姿態估計相比Mask-RCNN提高8.2%,上交大盧策吾團隊開源AlphaPose

TAG:新智元 |