「重磅」微軟Facebook聯手發佈AI生態系統,CNTK+Caffe2+PyTorch挑戰TensorFlow

「重磅」微軟Facebook聯手發佈AI生態系統,CNTK+Caffe2+PyTorch挑戰TensorFlow

新智元編譯

「重磅」微軟Facebook聯手發佈AI生態系統,CNTK+Caffe2+PyTorch挑戰TensorFlow

Facebook 和微軟剛剛宣佈,推出 Open Neural Network Exchange(ONNX,開放神經網絡交換)格式,這是一個用於表示深度學習模型的標準,可使模型在不同框架之間進行轉移。ONNX是邁向開放生態系統的第一步,AI開發人員可以輕鬆地在最先進的工具之間轉換,並選擇最適合他們的組合。

以下是Facebook、微軟官方博客的介紹:

在開發學習模型時,工程師和研究人員有許多AI框架可以選擇。在項目開始時,開發人員必須選擇對應一個框架的特徵(features)。很多時候,在研發過程中進行實驗時選擇的 feature 與生產所需的 feature 是不一致的。許多組織都沒有很好的方法來消除這些操作模式之間的差距,只有採取一系列創造性的解決辦法來應對,例如要求研究人員在生產系統中工作或人工翻譯模型。

Facebook 與微軟一起開發了 ONNX,以彌合這一差距,讓AI開發人員可以選擇符合項目當前階段的框架,並隨著項目的發展輕鬆切換框架。Caffe2,PyTorch 和Cognitive Toolkit 將在9月份發佈對 ONNX 的支持,這將允許在其中一個框架訓練的模型導出到另一個框架來進行推理。我們邀請社區加入這一努力,並在其生態系統中支持ONNX。實現不同框架之間的相互操作性,簡化從研究到生產的過程,將有助於提高AI社區創新的速度。

ONNX 在 Facebook 內部使用

ONNX 是 Facebook 深度學習方法的重要組成部分。在Facebook的AI團隊(FAIR和AML)中,我們不斷嘗試推動AI的前沿研究,開發更好的學習算法。當我們得到一個突破時,我們希望儘快在應用中提供更好的技術。通過ONNX,我們專注於將AI研究和產品實現更緊密地結合在一起,從而更快地進行創新和部署。

嘗試新模型的人們,特別是研究人員,希望在編寫神經網絡時擁有最大的靈活性和表現力——從動態神經網絡到支持梯度漸變(gradients of gradients),同時保持基本的ConvNet性能。研究人員也想實現快速迭代,這意味著他們需要優秀的交互式開發和調試工具。PyTorch旨在突破研究框架的侷限,使研究人員免受平臺的限制,讓他們能夠比以前更容易地表達想法。

相反,產品流程每天都需要對大量新的數據進行訓練和推理,同時保持模型大部分不變。仔細優化產品的特定模型的代碼,例如通過量化和仔細編寫人工調整的代碼(hand-tuned code)之類的技巧節省資源。Caffe2已經在產品、移動和極端考慮性能的情況構建起來。Caffe2的內部靈活而且高度優化,所以我們可以利用技巧將更大更好的模型部署到性能不足的硬件中。

通過 ONNX,我們可以在這兩個方面獲得最優。我們現在可以從PyTorch導出許多常見神經網絡的模型,並將它們部署在Caffe2上。這是將最新的研究成果快速推向生產的第一步。在接下來的幾個月中,我們將加強ONNX,並對Caffe2和PyTorch進行改進,使其能夠更深入地互通。

怎麼運行

為了實現ONNX支持,我們必須對PyTorch和Caffe2進行更改,並且在框架之間統一運算符。在Caffe2中,這個過程類似於添加一個翻譯器,因為Caffe2已經有一個內置的靜態圖。在PyTorch中,神經網絡是被定義為程序而不是顯式圖,因此這帶來了更大的挑戰。為了從程序中提取圖,我們開發了一個跟蹤器,將運行時程序執行的操作記錄下來。跟蹤程序消除了複雜性,並使其更容易轉換為圖表示。

要了解它是如何工作的,看以下代碼:

x = y * 2
if someComplicatedFunction: z = x + y
else: z = x * y

要直接導出此代碼,ONNX將不得不支持conditionals和某些複雜函數 someComplicatedFunction;實際上成了通用編程語言。然而,在許多深度學習模型中,someComplicatedFunction 的結果在推理過程中總是相同的。例如,在PyTorch條件中,通常是對輸入張量的大小或尺寸進行的一些計算。在這些情況下,通過代碼的單一跟蹤將會更簡單,並且可以輕鬆地在ONNX中表示為:

#someComplicatedFunction == True
x = y * 2 z = x + y

目前,我們的tracer能與許多常見的神經網絡配合使用,但PyTorch中一些更先進的程序,比如有動態流控制(dynamic flow control)的程序還不行。隨著時間的推移,我們將完善ONNX和tracer來支持這些程序,讓開發人員可以充分利用PyTorch的靈活性與Caffe2的高性能強大部署功能。

微軟:ONNX 表徵具有框架互操作性和共享優化兩大優點

在 Facebook 發佈博客的同時,微軟也發佈了題為《微軟和 Facebook 為 AI 模型的互操作性構建開放生態系統》的博客。在博客中,微軟表示:

微軟給大家做出的承諾是“”人人有機會更方便,更有價值。我們提供各種平臺和工具來促進這一點,包括我們的認知工具包,一個構建深層神經網絡的開源框架。我們還與其他分享我們觀點的組織合作,幫助 AI 社區。

今天,我們高興地宣佈,微軟和Facebook 一起推出Open Neural Network Exchange (ONNX,開放神經網絡交換) 格式。 ONNX為AI 框架生態系統中的互操作性和創新提供了共享的模型表徵。CognitiveToolkit,Caffe2和PyTorch都將支持ONNX。微軟和Facebook 共同開發了ONNX 這一開源項目,並希望社區能夠幫助其不斷進化。

什麼是ONNX 表徵?

Cognitive Toolkit 和其他框架提供了使開發人員更容易構建和運行表徵神經網絡的計算圖的界面。雖然提供的功能類似,但是今天的每個框架都有自己表徵這些圖的格式。 ONNX表徵有以下主要優點:

  • 框架互操作性

開發人員可以更輕鬆地在框架間轉換,併為手頭的任務選擇最佳工具。每個框架都針對具體特性進行了優化,如快速訓練,支持靈活的網絡架構,在移動端進行推理等等。許多時候,研發過程中最重要的特性與生產環節最重要的特性是不同的。這導致開發人員在框架之間進行模型轉換時,會因框架使用不正確或明顯延遲而使得效率降低。使用ONNX 表徵的框架簡化了這一點,使得開發人員更加靈活。

  • 共享優化

硬件供應商和其他改進神經網絡性能的優化可以通過定位ONNX 表徵來同時影響多個框架。優化經常需要被分別整合進入每個框架,這一過程很費時間。ONNX 表徵使得優化更容易實現,從而覆蓋更多開發人員。

技術總結

ONNX 提供了可擴展計算圖模型的定義,以及內置 operators 和標準數據類型的定義。起初我們專注於推理(評價)所需的能力。

每個計算數據流圖被構造為形成非循環圖的節點列表。節點具有一個或多個輸入和一個或多個輸出。每個節點是對 operators 的調用。

可用性

ONNX 代碼和文檔的初始版本現在已經在GitHub(https://github.com/onnx/onnx)上開源,呼喚著社區的立即參與。我們將積極開展基於ONNX 的工作,即將推出的Cognitive Toolkit 也將對其支持。我們還計劃和Facebook一道,提供部署參考、示例、工具和model zoo。

ONNX 表徵形成了開放生態系統的基礎,使 AI 更容易獲取並富有價值。開發人員可以為其任務選擇合適的框架,框架作者可以專注於創新,硬件供應商可以簡化優化流程。我們希望社區能夠支持ONNX,以實現這一令人興奮的願景。

下一步是什麼

我們今天發佈最新版本的Caffe2和PyTorch,帶有ONNX支持。我們希望你對新功能能跟我們一樣興奮!它們處於早期階段,我們希望你們檢查出來並提交你的反饋和改進。我們將繼續發展ONNX,PyTorch和Caffe2,確保開發人員擁有AI的最新工具。敬請期待後續更新!

相關資源

ONNX:https://github.com/onnx

Caffe2:https://caffe2.ai/

PyTorch:http://pytorch.org/

Super Resolution Tutorial:http://pytorch.org/tutorials/advanced/super_resolution_with_caffe2.html

原文:https://research.fb.com/facebook-and-microsoft-introduce-new-open-ecosystem-for-interchangeable-ai-frameworks/

https://www.microsoft.com/en-us/cognitive-toolkit/blog/2017/09/microsoft-facebook-create-open-ecosystem-ai-model-interoperability/

點擊閱讀原文可查看職位詳情,期待你的加入~

相關推薦

推薦中...