微軟開源 repo 1.0 ,旨在創造深度學習框架通用語言

.. 雷鋒網 AI 研習社按,日前,微軟提出深度學習框架的通用語言——repo1.0,號稱希望通過構建這一深度學習框架「Rosetta Stone(羅塞塔石碑)」,讓研究者們能夠在不同框架之間輕鬆運用專業知識。他們在博客中講解了基準深度學習框架的訓練結果和相應的經驗教訓,雷鋒網 AI 研習社編譯整理如下。

大家好,很高興發佈 repo 1.0 版本,目前我們已經將其在 GitHub 開源,地址如下:

https://github.com/ilkarman/DeepLearningFrameworks

我們相信深度學習框架就像語言一樣,就像很多人說英語,但每種語言都有各自的使用人群,都有其特定的用法。

我們已經為幾個不同的網絡結構創建了通用代碼,並將代碼在許多不同的框架中執行。

我們的想法是創建一個深度學習框架的「Rosetta Stone(羅塞塔石碑)」——只需要了解一個框架就能延伸到任何框架,並幫助其他人。之後,可能出現這種情況:一篇論文中的代碼是用其他框架,或者整個流程都能使用另一種語言。與其利用你最喜歡的框架中從頭開始編寫模型,還不如直接使用「其他」語言。

再次感謝 CNTK、Pytorch、Chainer、Caffe2 和 Knet 團隊,以及過去幾個月在開源社區中為 repo 做出貢獻的人員。

這次我們發佈的目標是如下幾點:

一個深度學習框架的羅塞塔石牌,能讓數據科學家輕鬆在不同框架間利用其專業知識

  • 使用最新最高級別 API 的最優 GPU 代碼

  • 比較不同 GPU 的常見設置(可能是 CUDA 版本和精度)

  • 比較不同語言的常見設置(Python、Julia、R)

  • 驗證安裝之後的性能

  • 不同開源社群之間的協作

基準深度學習框架的訓練結果

下面,我們將帶來一類 CNN 模型(從預訓練過的 ResNet50 中提取特徵)和一類 RNN 模型的訓練時間。

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

該模型的輸入是標準 CIFAR-10 數據集,數據集中包含 5 萬張訓練圖像和 1 萬張測試圖像,均勻地分為 10 類。每張 32×32 的圖像看成 (3, 32, 32) 的張量,像素值從 0-255 調整至 0-1。

處理 1000 張圖片的平均時間(ResNet-50——特徵提取)

加載預訓練的 ResNet50 模型,在最後(7、7)的 avg_pooling 截斷,輸出 2048D 向量。可以將其插入 softmax 層或其他分類器如增強樹來執行遷移學習。考慮到 warm start,這種僅前向傳播到 avg_pool 層是定時的。(注意:批次大小是常量,增加 GPU 內存可帶來性能提升(GPU 內存越大性能越好)。

訓練時間(s):在 IMDB 上,用 RNN (GRU) 執行情感分析

該模型的輸入為標準 IMDB 電影評論數據集,包含二萬五千個訓練評論和兩萬五千個測試評論,數據被均勻分成兩類 (正/負)。我們遵循 Keras(https://github.com/fchollet/keras/blob/master/keras/datasets/imdb.py)上的方法,將 start-character 設置為 1, out-of-vocab (使用三萬大小的 vocab) 表示為 2,單詞索引從 3 開始。

希望大家都能來嘗試,增加更多更豐富的數據。

以下是一些經驗教訓

  • 使用自動調參:

    大多數框架使用 cuDNN 中的 cudnnFindConvolutionForwardAlgorithm() 進行窮舉搜索,優化算在固定大小的圖像上的前向卷積算法。這通常是默認的,但一些框架可能需要諸如「torch.backends.cudnn.benchmark = True」的標記。

  • 多用 cuDNN:

    對於普通的 RNNs(如基本 GRUs/LSTMs),通常可以調用 cuDNN 封裝器來提速,例如用 cudnn_rnn.CudnnGRU() 取代 rnn.GRUCell()。這樣做的缺點是接下來在 CPU 上進行推理可能會更具挑戰。

  • 形狀匹配:

    在 cuDNN 上運行時,匹配 CNNs 中 NCHW 和 RNNs 中 TNC 的原始 channel-ordering,避免在重塑上浪費時間,直接進行矩陣乘法。

  • 原始生成器:

    使用框架的原始生成器,這樣可以通過多線程異步來進行增強和預處理(例如 shuffling),從而加速。

  • 針對推斷:

    要確保指定 flag 來避免計算的不必要的梯度,確保 batch-norm 和 drop-out 等層得到合理使用。

當我們最初創建 repo 時,需要使用許多小技巧來確保框架之間使用的是相同的模型,並且是以最佳的方式運行。在過去的幾個月里,這些框架的改良速度快得令人難以置信。2017 年末的許多經驗教訓在現在已經過時了,因為這些框架已經更新。

通過在不同的框架中完成端到端解決方案,可以以多種方式比較框架。由於每個框架中使用的都是相同的模型結構和數據,所以框架間的準確度非常相似。此外,我們開發的目的是使框架之間的對比更簡單,而不是為了加速。

當然,我們是為了比較不同框架之間的速度和推理,而不是為了展示框架的整體性能,因為這裡忽略了一些重要的對比,例如幫助和支持、可用的預訓練模型、自定義層和架構、數據加載器、調試、不同的平台支持、分佈式訓練等等。我們開源 repo 只是為了展示如何在不同的框架上創建相同的網絡,並評估在一些特定案例上的性能。

via:https://blogs.technet.microsoft.com

雷鋒網 AI 研習社編譯整理


想在手機閱讀更多Microsoft資訊?下載【香港矽谷】Android應用
分享到Facebook
技術平台: Nasthon Systems