Facebook、微軟聯合推出​ ONNX 標準,號稱要解決開發框架碎片化

 2017-09-08 09:55:00.0

Facebook、微軟聯合推出​ ONNX 標準,號稱要解決開發框架碎片化

雷鋒網消息,今日微軟和 Facebook 發佈了一個全新的開源項目——ONNX,欲藉此打造一個開放的深度學習開發工具生態系統。

ONNX 的全稱爲「Open Neural Network Exchange」,即「開放的神經網絡切換」。顧名思義,該項目的目的是讓不同的神經網絡開發框架做到互通互用。目前,Microsoft Cognitive Toolkit,PyTorch 和 Caffe2 已宣佈支持 ONNX。

ONNX 所針對的,可以說是深度學習開發生態中最關鍵的問題之一:

開發框架的碎片化。

Facebook、微軟聯合推出​ ONNX 標準,號稱要解決開發框架碎片化

在任意一個框架上訓練的神經網絡模型,無法直接在另一個框架上用。開發者需要耗費大量時間精力把模型從一個開發平臺移植到另一個。

藉助 ONNX,開發者能把在 PyTorch 上訓練的模型直接拿到 Caffe2 上進行推理。對於把模型從研究階段推向產品階段,這是一個經常遇到的場景。微軟宣佈正積極開發 Microsoft Cognitive Toolkit 的下個版本,將會提供對 ONNX 的支持。

ONNX 的工作原理是:

實時跟蹤某個神經網絡是如何在這些框架上生成的,接着,使用這些信息創建一個通用的計算圖,即符合ONNX 標準的計算圖。這樣做行得通,是因爲在計算方面,這些框架產生的最終結果都非常接近,雖然更高級的表達不同。

ONNX 標準意味着什麼?

PyTorch、Microsoft Cognitive Toolkit 等框架提供的界面,讓開發者創建、運行用來表示神經網絡的計算圖更加方便。雖然功能相似,但每一個框架都用一套不同的格式表示這些計算圖。雷鋒網獲知,ONNX 的表示方式有兩個核心優勢:

  • 框架之間的互用互通

開發者能更方便地在不同框架間切換,爲不同任務選擇最優工具。基本每個框架都會針對某個特定屬性進行優化,比如訓練速度、對網絡架構的支持、能在移動設備上推理等等。在大多數情況下,研發階段最需要的屬性和產品階段是不一樣的。這導致效率的降低,比如選擇不切換到最合適的框架,又或者把模型轉移到另一個框架導致額外的工作,造成進度延遲。使用支持 ONNX 表示方式的框架,則大幅簡化了切換過程,讓開發者的工具選擇更靈活。

  • 優化共享

硬件設備商們推出的對神經網絡性能的優化,將能夠一次性影響到多個開發框架——如果用的是 ONNX 表示方式。如果優化很頻繁,把它們單獨整合到各個框架是個非常耗費時間的事。通過 ONNX 表示方式,更多開發者就能獲取這些優化。

技術概括

ONNX 爲可擴展的計算圖模型、內部運算器(Operator)以及標準數據類型提供了定義。在初始階段,Facebook 和微軟會專注於推理(Inference)所需要的各項能力(評估)。

每個計算數據流圖以節點列表的形式組織起來,構成一個非循環的圖。節點有一個或多個的輸入與輸出。每個節點都是對一個運算器的調用。圖還會包含協助記錄其目的、作者等信息的元數據。

運算器在圖的外部實現,但那些內置的運算器可移植到不同的框架上。每個支持 ONNX 的框架將在匹配的數據類型上提供這些運算器的實現。

TensorFlow 的缺席

ONNX 標準能否在深度學習開發者們接受,在很大程度上將取決於它在各個框架上的普及程度。

在雷鋒網(公衆號:雷鋒網)看來,目前 ONNX 最大的問題是,最受歡迎的開發框架 TensorFlow 沒有兼容 ONNX 標準。亞馬遜的御用框架 MXNet 也沒有。Facebook 和微軟都表示,將來會持續有更多框架加入到 ONNX 生態中,但沒有透露 TensorFlow 和 MXNet 是否在計劃中。谷歌和亞馬遜也還沒有對此事表達態度,他們願不願意合作,尚屬未知。

如何使用

初始版 ONNX 的代碼、文件,已在 GitHub 上開源。Facebook 和微軟表示將會持續改進 ONNX, 將會在不久的將來推出範例、工具、reference implementations 以及模型。

更多關於 ONNX 的信息可訪問 Facebook 官方博客

via 微軟venturebeat

文章來源:雷鋒網