時間:2017-09-08 來源:互聯網 瀏覽量:
選自Facebook
作者:Joaquin Quinonero Candela
機器之心編譯
近日,Facebook 與微軟聯合推出了開放式神經網絡交換(ONNX)格式,它是一個表征深度學習模型的標準,可實現模型在不同框架之間的遷移。ONNX 是構建開源生態環境的第一步,供人工智能開發者輕鬆選擇並組合最先進的工具。
開發學習模型時,工程師和研究者有很多框架可以選擇。在一個項目開始時,開發者必須篩選特征、選定框架。很多時候,在研究和開發實驗時所選擇的特征與投入生產所需特征並不相同。很多組織缺乏彌補操作模式之間鴻溝的良好方式,不得不采取一些變通方式來應對,比如要求研究者在生產係統中工作或者手動翻譯模型。
我們與微軟一起開發了 ONNX,希望彌補這一鴻溝,幫助開發者選擇適合其項目當前階段的框架,並隨著項目的進展在框架之間輕鬆轉換。Caffe2、PyTorch 和 CNTK 9 月即將支持 ONNX,這允許模型在上述框架之一中進行訓練,並轉移到另一個框架進行推斷。我們誠邀人工智能社區一起支持 ONNX。實現不同框架之間的互通以及簡化從研究到生產的流程將會進一步加速人工智能社區的創新。
Facebook ONNX
ONNX 是 Facebook 深度學習方法中的重要組成部分。Facebook 的 AI 研究團隊(FAIR 和 AML)致力於擴展 AI 研究的邊界,開發更好的學習算法。每當我們有了突破,我們會盡快使使用我們應用程序的人們獲取更好的技術。有了 ONNX,我們可以讓全世界的 AI 研究和產品彙聚一堂,加快創新和部署。
研究者在實驗新模型,特別是模型還在研究中的時候,寫神經網絡時需要最大程度的靈活性和可表達性,從動態神經網絡到支持梯度漸變,同時還要保持基本的卷積神經網絡高效性。研究者還想要快速迭代,因此他們需要有優秀的交互開發和調試工具。PyTorch 的構建旨在擴展研究框架的極限,將研究者從單一平台的束縛中解放出來,能夠更加輕鬆地表達自己的想法。
與此相反,產品管道在保證模型大體穩定的情況下,每天通過大量新數據運行訓練和推斷。通過一些精細的技巧比如分層,手動調整代碼以節省計算資源。Caffe2 在構建時就考慮了產品、移動端與表現。Caffe2 的內部構件非常靈活並經過了高度優化,因此我們可以在動力不足的硬件中駕馭更大更好用的模型,施展所有的技巧。
使用 ONNX,我們可以充分利用兩個世界。現在,我們可以從 PyTorch 中輸出很多常用神經網絡模型,並將其部署在 Caffe2 中。這是我們快速將最新研究成果投入生產的第一步。接下來幾個月,我們將改進 ONNX、Caffe2 和 PyTorch,使它們能夠更深度地進行互通。
工作原理
為了實現 ONNX 支持,我們必須改寫 PyTorch 和 Caffe2,統一框架之間的算子。在 Caffe2 中,該過程與添加翻譯器類似,因為 Caffe2 已經具備內置靜態圖表示。在 PyTorch 中,神經網絡被指定為程序,而不是清晰的圖,這帶來了巨大挑戰。為了從程序中抽取圖表示,我們開發了一個跟蹤器,用來」跟蹤」(記錄)程序運行過程。跟蹤程序可以消除複雜性,使轉換圖表示更加容易。
以下代碼展示了其工作原理:
x = y * 2if someComplicatedFunction():
z = x + yelse:
z = x * y
為了直接輸出代碼,ONNX 必須支持條件句(conditional)和 someComplicatedFunction();實際上,它就變成了一個通用的編程語言。但是,在很多深度學習模型中,someComplicatedFunction() 的結果在推斷中總是相同。例如,在 PyTorch 中,條件句通常是對輸入張量的大小或維度上的計算。在這些情況下,跟蹤代碼要簡單得多,也更容易在 ONNX 中得到表示:
#someComplicatedFunction() == True
x = y * 2
z = x + y
目前,我們的追蹤器用於很多常見神經網絡,但是不包括 PyTorch 中的一些較為高級的程序,如帶有動態流控製的程序。我們將不斷改進 ONNX 和跟蹤器來支持這些程序,這樣開發者就可以同時利用 PyTorch 的靈活性和 Caffe2 的高性能魯棒部署能力。
後續
今天,我們發布了 ONNX 支持的最新版 Caffe2 和 PyTorch,希望大家對新特征感興趣!由於其還處在初級階段,我們希望你在使用時能提供反饋和建議。我們將持續改進 ONNX、PyTorch 和 Caffe2,確保開發者獲取 AI 研究的最新工具。
開始使用 ONNX
ONNX(https://github.com/onnx)
Caffe2(https://caffe2.ai/)
PyTorch(http://pytorch.org/)
高分辨率教程(http://pytorch.org/tutorials/advanced/super_resolution_with_caffe2.html)
微軟博客(https://www.microsoft.com/en-us/cognitive-toolkit/blog/2017/09/microsoft-facebook-create-open-ecosystem-ai-model-interoperability/)