摘要:完整版地址我們的想法是創(chuàng)建一個深度學(xué)習(xí)框架的羅塞塔石碑假設(shè)你很了解某個深度學(xué)習(xí)框架,你就可以幫助別人使用任何框架。我們的目標(biāo)是創(chuàng)建深度學(xué)習(xí)框架的羅塞塔石碑,使數(shù)據(jù)科學(xué)家能夠在不同框架之間輕松運用專業(yè)知識。
repo 1.0 完整版 GitHub 地址:https://github.com/ilkarman/DeepLearningFrameworks
我們的想法是創(chuàng)建一個深度學(xué)習(xí)框架的羅塞塔石碑(Rosetta Stone):假設(shè)你很了解某個深度學(xué)習(xí)框架,你就可以幫助別人使用任何框架。你可能會遇到論文中代碼是另一個框架或整個流程都使用另一種語言的情況。相比在自己喜歡的框架中從頭開始編寫模型,使用「外來」語言會更容易。
感謝 CNTK、Pytorch、Chainer、Caffe2 和 Knet 團隊,以及來自開源社區(qū)的所有人在過去幾個月為該 repo 所做的貢獻。
我們的目標(biāo)是:
1. 創(chuàng)建深度學(xué)習(xí)框架的羅塞塔石碑,使數(shù)據(jù)科學(xué)家能夠在不同框架之間輕松運用專業(yè)知識。
2. 使用的高級 API 優(yōu)化 GPU 代碼。
3. 創(chuàng)建一個 GPU 對比的常用設(shè)置(可能是 CUDA 版本和精度)。
4. 創(chuàng)建一個跨語言對比的常用設(shè)置(Python、Julia、R)。
5. 驗證自己搭建框架的預(yù)期性能。
6. 實現(xiàn)不同開源社區(qū)之間的合作。
基準深度學(xué)習(xí)框架的結(jié)果
下面我們來看一種 CNN 模型的訓(xùn)練時間和結(jié)果(預(yù)訓(xùn)練的 ResNet50 模型執(zhí)行特征提?。约耙环N RNN 模型的訓(xùn)練時間。
訓(xùn)練時間(s):CNN(VGG-style,32bit)在 CIFAR-10 上執(zhí)行圖像識別任務(wù)
該模型的輸入是標(biāo)準 CIFAR-10 數(shù)據(jù)集(包含 5 萬張訓(xùn)練圖像和 1 萬張測試圖像),均勻地分成 10 個類別。將每張 32×32 圖像處理為形狀 (3, 32, 32) 的張量,像素強度從 0-255 重新調(diào)整至 0-1。
處理 1000 張圖像的平均時間(s):ResNet-50——特征提取
加載預(yù)訓(xùn)練 ResNet-50 模型在末端 (7, 7) 平均池化之后裁斷,輸出 2048D 向量。其可插入 softmax 層或另一個分類器(如 boosted tree)來執(zhí)行遷移學(xué)習(xí)??紤]到熱啟動,這種僅前向傳播至 avg_pool 層的操作有時間限制。注意:批量大小保持常量,但是增加 GPU 內(nèi)存可帶來更好的性能提升(GPU 內(nèi)存越多越好)。
訓(xùn)練時間(s):RNN (GRU) 在 IMDB 數(shù)據(jù)集上執(zhí)行情感分析任務(wù)
模型輸入為標(biāo)準 IMDB 電影評論數(shù)據(jù)集(包含 25k 訓(xùn)練評論和 25k 測試評論),均勻地分為兩類(積極/消極)。使用 https://github.com/keras-team/keras/blob/master/keras/datasets/imdb.py 中的方法進行處理,起始字符設(shè)置為 1,集外詞(OOV,本次訓(xùn)練使用的詞匯表包括 3 萬單詞)設(shè)置為 2,這樣單詞索引從 3. Zero 開始,通過填充或截斷使每條評論固定為 150 詞。
*表示截至本文發(fā)布時尚未實現(xiàn)。歡迎社區(qū)補充。
經(jīng)驗教訓(xùn)
1. 使用自動調(diào)參模式:大部分框架使用 cuDNN 的 cudnnFindConvolutionForwardAlgorithm() 來運行窮舉搜索,優(yōu)化在固定大小圖像上前向卷積所使用的算法。這通常是默認的設(shè)置,但是一些框架可能需要一個 flag,例如?
torch.backends.cudnn.benchmark=True。
2. 盡可能多地使用 cuDNN:常用的 RNN(如基礎(chǔ) GRU/LSTM)通??梢哉{(diào)用 cuDNN 封裝器來加速,即用 cudnn_rnn.CudnnGRU() 代替 rnn.GRUCell()。缺點是稍后在 CPU 上運行推斷時難度可能會增加。
3. 匹配形狀:在 cuDNN 上運行時,為 CNN 匹配 NCHW 的原始 channel-ordering、為 RNN 匹配 TNC 可以削減浪費在重塑(reshape)操作上的時間,直接進行矩陣乘法。
4. 原始生成器:使用框架的原始生成器,增強和預(yù)處理(例如 shuffling)通過多線程進行異步處理,實現(xiàn)加速。
5. 對于推斷,確保指定的 flag 可以保存被計算的非必要梯度,以及 batch-norm 和 drop-out 等層得到合理使用。
當(dāng)我們從頭開始創(chuàng)建該 repo 的時候,為了確保在不同框架之間使用的是相同的模型,并以最優(yōu)化的方式運行,我們使用了很多技巧。過去幾個月里,這些框架的改版之快令人驚訝,框架的更新導(dǎo)致很多在 2017 年末學(xué)會的優(yōu)化方法如今已然過時。
例如,以 TF 為后端的 Keras 擁有 channel-ordering 硬編碼作為 channels-last(對于 cuDNN 不是最優(yōu)的),因此指定 channels-first 意味著它將在每個批次(batch)之后重塑到硬編碼值,從而極大降低訓(xùn)練速度?,F(xiàn)在以 TF 為后端的 keras 支持原始 channels-first ordering。之前,TensorFlow 可以通過指定一個 flag 來使用 Winograd 算法用于卷積運算,然而現(xiàn)在這種方法不再有用。你可以在repo的早期版本(https://github.com/ilkarman/DeepLearningFrameworks/tree/cb6792043a330a16f36a5310d3856f23f7a45662)中查看其中的最初學(xué)習(xí)階段部分。
通過在不同的框架中完成端到端解決方案,我們可以用多種方式對比框架。由于相同的模型架構(gòu)和數(shù)據(jù)被用于每一個框架,因此得到的模型準確率在各個框架之間是非常相似的(實際上,這正是我們測試代碼以確保相同的模型在不同框架上運行的一種方法)。此外,該 notebook 的開發(fā)目的是為了使框架之間的對比更加容易,而模型加速則不是必要的。
當(dāng)然,該項目的目的是使用速度和推斷時間等指標(biāo)來對比不同的框架,而不是為了評估某個框架的整體性能,因為它忽略了一些重要的對比,例如:幫助和支持、提供預(yù)訓(xùn)練模型、自定義層和架構(gòu)、數(shù)據(jù)加載器、調(diào)試、支持的不同平臺、分布式訓(xùn)練等。該 repo 只是為了展示如何在不同的框架上構(gòu)建相同的網(wǎng)絡(luò),并對這些特定的網(wǎng)絡(luò)評估性能。
深度學(xué)習(xí)框架的「旅行伴侶」
深度學(xué)習(xí)社區(qū)流行著很多種深度學(xué)習(xí)框架,該項目可以幫助 AI 開發(fā)者和數(shù)據(jù)科學(xué)家應(yīng)用不同的深度學(xué)習(xí)框架。一個相關(guān)的工作是 Open Neural Network Exchange(ONNX),這是一個在框架間遷移深度學(xué)習(xí)模型的開源互通標(biāo)準。當(dāng)在一個框架中進行開發(fā)工作,但希望轉(zhuǎn)換到另一個框架中評估模型的時候,ONNX 很有用。類似地,MMdnn 是一組幫助用戶直接在不同框架之間轉(zhuǎn)換的工具(以及對模型架構(gòu)進行可視化)。
深度學(xué)習(xí)框架的「旅行伴侶」工具如 ONNX 和 MMdnn 就像是自動化的機器翻譯系統(tǒng)。相比之下,我們今天發(fā)布的 repo 1.0 完整版更像是深度學(xué)習(xí)框架的羅塞塔石碑,在不同的框架上端到端地展示模型構(gòu)建過程。
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價值的辦法,實際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報表系統(tǒng)等全方位知識
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/4754.html
摘要:表示,的賈揚清對他的這一項目給予了很多幫助,賈揚清告訴他,的好幾個網(wǎng)絡(luò),較大瓶頸都是,如果想要實現(xiàn)一流的性能,賈揚清建議較好使用異步,這樣會有很大的幫助。,和則是默認啟用這項功能。 微軟數(shù)據(jù)科學(xué)家Ilia Karmanov做了一個項目,使用高級API測試8種常用深度學(xué)習(xí)框架的性能(因為Keras有TF,CNTK和Theano,所以實際是10種)。Karmanov希望這個項目能夠幫助數(shù)據(jù)科學(xué)家...
摘要:是由華盛頓大學(xué)在讀博士陳天奇等人提出的深度學(xué)習(xí)自動代碼生成方法,去年月機器之心曾對其進行過簡要介紹。目前的堆棧支持多種深度學(xué)習(xí)框架以及主流以及專用深度學(xué)習(xí)加速器。 TVM 是由華盛頓大學(xué)在讀博士陳天奇等人提出的深度學(xué)習(xí)自動代碼生成方法,去年 8 月機器之心曾對其進行過簡要介紹。該技術(shù)能自動為大多數(shù)計算硬件生成可部署優(yōu)化代碼,其性能可與當(dāng)前最優(yōu)的供應(yīng)商提供的優(yōu)化計算庫相比,且可以適應(yīng)新型專用加...
摘要:研究人員稱,其提出的可以無監(jiān)督地學(xué)習(xí)并遷移數(shù)據(jù)單元對之間的依賴關(guān)系和圖形表征,并在自然語言處理和計算機視覺任務(wù)中取得了很好的效果。表自然語言處理任務(wù)中的模型簡化測試。 近日,由卡耐基梅隆大學(xué)、紐約大學(xué)和 Facebook 的研究者楊植麟、Junbo Zhao 等人提交的論文將遷移學(xué)習(xí)向前推進了一步。研究人員稱,其提出的 GLoMo 可以無監(jiān)督地學(xué)習(xí)并遷移數(shù)據(jù)單元對之間的依賴關(guān)系和圖形表征,并...
摘要:機器學(xué)習(xí)和深度學(xué)習(xí)的研究進展正深刻變革著人類的技術(shù),本文列出了自年以來這兩個領(lǐng)域發(fā)表的最重要被引用次數(shù)最多的篇科學(xué)論文,以饗讀者。注意第篇論文去年才發(fā)表要了解機器學(xué)習(xí)和深度學(xué)習(xí)的進展,這些論文一定不能錯過。 機器學(xué)習(xí)和深度學(xué)習(xí)的研究進展正深刻變革著人類的技術(shù),本文列出了自 2014 年以來這兩個領(lǐng)域發(fā)表的最重要(被引用次數(shù)最多)的 20 篇科學(xué)論文,以饗讀者。機器學(xué)習(xí),尤其是其子領(lǐng)域深度學(xué)習(xí)...
閱讀 2345·2021-11-23 09:51
閱讀 1151·2021-11-22 13:52
閱讀 3622·2021-11-10 11:35
閱讀 1202·2021-10-25 09:47
閱讀 3007·2021-09-07 09:58
閱讀 1071·2019-08-30 15:54
閱讀 2828·2019-08-29 14:21
閱讀 3037·2019-08-29 12:20