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表征有以下重要長處:
1.框架互操作性
開辟人員可以更輕松地在框架間轉換,并為手頭的義務選擇最好對象。每一個框架都針對詳細特征停止了優化,如疾速練習,支撐靈巧的收集架構,在挪動端停止推理等等。很多時刻,研發進程中最主要的特征與臨盆環節最主要的特征是分歧的。這招致開辟人員在框架之間停止模子轉換時,會因框架應用不準確或顯著延遲而使得效力下降。應用onNX 表征的框架簡化了這一點,使得開辟人員加倍靈巧。
2.同享優化
硬件供給商和其他改良神經收集機能的優化可以經由過程定位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的最新對象。敬請等待后續更新!
