不甘落後Tensorflow,微軟另闢蹊徑發布新型深度學習框架
文章導讀
在深度學習框架領域,Google Tensorflow 在使用廣泛度上一騎絕塵把微軟,亞馬遜,Facebook和其它深度學習框架遠遠甩在後面。為了和Google Tensorflow 抗衡,微軟先後聯合AWS, Facebook 設立ONNX, 使得同一模型可以在不同框架運行,最近又另闢蹊徑發布新型深度學習框架。
我們相信深度學習框架就像語言一樣:很多人會說英語,但每種語言都有自己的獨特作用。我們為許多不同的網路結構編程了公共代碼,並讓這些代碼在許多不同的框架中運行。我們的目的是創建一個深度學習框架的羅塞塔石碑,假設你會一個框架,就可以幫助別人利用任何框架。通常會出現這種情況:一篇論文中的代碼是另一種框架或整個pipeline腳本使用在另一種語言。與其從最喜歡的框架中從頭編寫一個模型,不如使用「外來」語言更容易。
我們今天發布一個全新的1.0版本,開放源代碼在GitHub上,https://github.com/ilkarman/deeplearningframeworks。非常感謝CNTK, Pytorch, Chainer, Caffe2 and Knet teams,以及在過去幾個月裡面開放源代碼社區里對REPO做出過貢獻值的每一個人。
新版本的目標:
創建深度學習框架的羅塞塔石碑,使數據科學家能夠在不同框架之間輕鬆運用專業知識。
使用最新的最高級API優化GPU代碼
建立跨GPUS比較的通用設置(潛在的CUDA版本和精度)
建立跨語言比較的通用設置(Python,Julia,R)
自主安裝的預期可能性
不同的開放源代碼社區之間的合作
深度學習框架基準檢測結果
下面我們將回顧一種CNN模型的訓練時間和結果,預訓練的ResNet50模型的特徵提取以及一種RNN模型的訓練時間。
訓練時間(秒):CNN CIFAR-10(VGG式,32位) - 圖像識別
CIFAR-10的標準數據圖包含50k訓練圖像和10k測試圖像,均勻的分為十個等級。每張 32×32 圖像處理為形狀 (3, 32, 32) 的張量,像素強度從 0-255 重新調整至 0-1
平均時間(秒)處理1000張圖片:ResNet-50 - 特徵提取
預訓練ResNet50模型在結束時(7,7)的avg_pooling之後載入並切斷,輸出2048D維向量。 這可以插入softmax層或其他分類器(如增強樹)以執行傳輸學習。考慮到溫暖的開始,這個僅向前傳遞給avg_pool層的時間是定時的。 注意:批量大小保持不變,但是在GPU上填充RAM會產生進一步的性能提升(具有更多RAM的GPU更大)。
訓練時間(秒): RNN (GRU) 在 IMDB --情感分析
該模型的輸入是標準的IMDB電影評論數據集,其中包含25k個培訓評論和25k個測試評論,統一分為2個類別(正面/負面)。 處理遵循Keras方法,其中起始字元被設置為1,辭彙外(詞表大小為30k被使用)被表示為2,因此詞索引從3開始。零填充/截斷到固定軸,每個詞150字評論。
* 這個數據尚未被完全實現,我們歡迎來自社區的補充結果。
經驗教訓
使用自動調整:大多數框架使用cuDNN的cudnnFindConvolutionForwardAlgorithm()運行窮舉搜索並優化用於固定尺寸圖像上卷積正向傳遞的演算法。 通常這是默認開啟的,但是一些框架可能需要一個flag,例如「torch.backends.cudnn.benchmark=ture」。
儘可能使用cuDNN:對於vanillaRNN(例如GRUs/LSTMs)通常可以調用cuDNN wrapper來提高速度,例如,cudnn_rnn.CudnnGRU()而不是rnn.GRUCell()。缺點是後期對CPU進行驗證時難度可能會增加。
匹配形狀:在 cuDNN 上運行時,為 CNN 匹配 NCHW 的原始 channel-ordering、為 RNN 匹配 TNC 可以削減浪費在重塑(reshape)操作上的時間,直接進行矩陣乘法。
原始生成器:使用框架的原始生成器,增強和預處理(例如 shuffling)通過多線程進行非同步處理,實現加速。
為了推斷,請確保在可能的情況下指定flag以保存正在計算的不必要的梯度,並確保正確應用batch-norm 和 drop-out 。
當我們最初創建repo時,我們使用了許多小技巧和竅門來確保我們以最佳的方式在不同框架之間使用相同的模型運行。過去幾個月內框架的發展速度非常快 —框架的更新太快使得2017年末的優化方法已經過時了。
以 TF 為後端的 Keras 擁有 channel-ordering 硬編碼作為 channels-last(對於 cuDNN 不是最優的),因此指定channels-first意味著它將重塑後每批(硬編碼的值)和極大減緩訓練速度。現在TF為後端的Keras支持本地channels-first ordering。Tensorflow之前可以加速通過指定一個flag使用Winograd通過卷積的演算法,但是現在這不再是有用的。如果有興趣,你可以在repo的早期版本中查看一下最初的學習部分。
通過在不同的框架中完成一個端到端解決方案,可以用多種方式對比框架。由於每個框架都使用相同的模型體系結構和數據,因此整個框架的準確性非常相似(實際上,這是我們測試代碼的一種方式,以確保不同的框架使用於相同的模型!)另外,notebook的開發是為了框架之間的對比更加容易,而速度並不是必要的。
當然,雖然很容易用速度和推理時間等指標比較不同的框架,但它們並不意味著對框架的整體性能進行評估,因為它們省略了重要的對比,例如:幫助和支持,可用性預先訓練的模型,自定義圖層和架構,數據載入器,調試,支持的不同平台,分散式培訓等等! 它們僅僅是為了展示如何在不同的框架中創建相同的網路以及這些特定示例的性能。
深度學習框架的「旅行者伴侶」
在社區中有很多流行的深度學習框架,這是幫助AI開發人員和數據科學家在適用的情況下利用不同的深度學習框架。其中一個就是ONNX,它是用於在框架之間傳遞深度學習模型的開源互操作性標準。例如,ONNX是在想要將其轉換為另一個框架中的模型的時候很有用。同樣,MMdnn是一組工具,它可幫助用戶直接在不同框架之間進行轉換,並是模型體系結構可視化。
像ONNX和MMdnn這樣的深度學習框架的「旅行者伴侶」就像一台自動機器翻譯機。相比之下,我們今天發布的完整版本repo1.0就像是深度學習框架的羅塞塔石碑,它展示了在不同框架中的端到端模型構建過程。所有這些類型的結合起來,可以使旅行者在多種語言的環境中生活。
-—完—-
AICAMP(全球AI技術訓練營)是專註於AI領域的全球化社區。總部在西雅圖矽谷和紐約,社區覆蓋美國、加拿大、中國、歐洲、澳大利亞等多地區。社區有超過500多名來自於微軟,亞馬遜,Google , Facebook, Uber, Twitter, Airbnb, Intel, LinkedIn, Yahoo, Nvidia等團隊的頂級技術大咖講師,全球社區成員超過5萬人(美國2萬)。和全世界技術人員一起學習和練習AI技術,累計舉辦超過100多場線下技術沙龍,黑客馬拉松, 在線技術講座和培訓,同時向全世界直播。
全球技術學習群
AICamp技術學習第11群開始招募啦,歡迎對AI感興趣的同學,加微信群管理員shanyueai.專業技術群審核較嚴,敬請諒解和耐心等候。
誠摯招聘
AICamp全球招募技術社區運營人員,城市大使,組織當地的技術學習社區,配合矽谷西雅圖紐約總部技術沙龍全球直播等。免費學習和接觸技術大咖,每年1-2次美國出差和學習等。期待有才氣和熱情的同學加入!相關細節,請在公眾號回復「城市大使」兩個字。
TAG:AICamp |