Facebook、微軟聯合推ONNX標準 解決開發框架碎片化
ONNX 的全稱為「Open Neural Network Exchange」,即「開放的神經網路切換」。顧名思義,該項目的目的是讓不同的神經網路開發框架做到互通互用。目前,Microsoft Cognitive Toolkit,PyTorch 和 Caffe2 已宣布支持 ONNX。
ONNX 所針對的,可以說是深度學習開發生態中最關鍵的問題之一:
開發框架的碎片化。
在任意一個框架上訓練的神經網路模型,無法直接在另一個框架上用。開發者需要耗費大量時間精力把模型從一個開發平台移植到另一個。
藉助 ONNX,開發者能把在 PyTorch 上訓練的模型直接拿到Caffe2 上進行推理。對於把模型從研究階段推向產品階段,這是一個經常遇到的場景。微軟宣布正積極開發 MicrosoftCognitive 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 以及模型。
※三星這次下了血本:發現手機漏洞最高獎勵129萬元
※100G/超100G技術所到來的機遇和挑戰是什麼?
TAG:太平洋電腦網 |