0
本文作者: 三川 | 2017-09-08 09:55 |
雷鋒網(wǎng)消息,今日微軟和 Facebook 發(fā)布了一個(gè)全新的開(kāi)源項(xiàng)目——ONNX,欲借此打造一個(gè)開(kāi)放的深度學(xué)習(xí)開(kāi)發(fā)工具生態(tài)系統(tǒng)。
ONNX 的全稱為“Open Neural Network Exchange”,即“開(kāi)放的神經(jīng)網(wǎng)絡(luò)切換”。顧名思義,該項(xiàng)目的目的是讓不同的神經(jīng)網(wǎng)絡(luò)開(kāi)發(fā)框架做到互通互用。目前,Microsoft Cognitive Toolkit,PyTorch 和 Caffe2 已宣布支持 ONNX。
ONNX 所針對(duì)的,可以說(shuō)是深度學(xué)習(xí)開(kāi)發(fā)生態(tài)中最關(guān)鍵的問(wèn)題之一:
開(kāi)發(fā)框架的碎片化。
在任意一個(gè)框架上訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型,無(wú)法直接在另一個(gè)框架上用。開(kāi)發(fā)者需要耗費(fèi)大量時(shí)間精力把模型從一個(gè)開(kāi)發(fā)平臺(tái)移植到另一個(gè)。
借助 ONNX,開(kāi)發(fā)者能把在 PyTorch 上訓(xùn)練的模型直接拿到 Caffe2 上進(jìn)行推理。對(duì)于把模型從研究階段推向產(chǎn)品階段,這是一個(gè)經(jīng)常遇到的場(chǎng)景。微軟宣布正積極開(kāi)發(fā) Microsoft Cognitive Toolkit 的下個(gè)版本,將會(huì)提供對(duì) ONNX 的支持。
ONNX 的工作原理是:
實(shí)時(shí)跟蹤某個(gè)神經(jīng)網(wǎng)絡(luò)是如何在這些框架上生成的,接著,使用這些信息創(chuàng)建一個(gè)通用的計(jì)算圖,即符合ONNX 標(biāo)準(zhǔn)的計(jì)算圖。這樣做行得通,是因?yàn)樵谟?jì)算方面,這些框架產(chǎn)生的最終結(jié)果都非常接近,雖然更高級(jí)的表達(dá)不同。
PyTorch、Microsoft Cognitive Toolkit 等框架提供的界面,讓開(kāi)發(fā)者創(chuàng)建、運(yùn)行用來(lái)表示神經(jīng)網(wǎng)絡(luò)的計(jì)算圖更加方便。雖然功能相似,但每一個(gè)框架都用一套不同的格式表示這些計(jì)算圖。雷鋒網(wǎng)獲知,ONNX 的表示方式有兩個(gè)核心優(yōu)勢(shì):
框架之間的互用互通
開(kāi)發(fā)者能更方便地在不同框架間切換,為不同任務(wù)選擇最優(yōu)工具。基本每個(gè)框架都會(huì)針對(duì)某個(gè)特定屬性進(jìn)行優(yōu)化,比如訓(xùn)練速度、對(duì)網(wǎng)絡(luò)架構(gòu)的支持、能在移動(dòng)設(shè)備上推理等等。在大多數(shù)情況下,研發(fā)階段最需要的屬性和產(chǎn)品階段是不一樣的。這導(dǎo)致效率的降低,比如選擇不切換到最合適的框架,又或者把模型轉(zhuǎn)移到另一個(gè)框架導(dǎo)致額外的工作,造成進(jìn)度延遲。使用支持 ONNX 表示方式的框架,則大幅簡(jiǎn)化了切換過(guò)程,讓開(kāi)發(fā)者的工具選擇更靈活。
優(yōu)化共享
硬件設(shè)備商們推出的對(duì)神經(jīng)網(wǎng)絡(luò)性能的優(yōu)化,將能夠一次性影響到多個(gè)開(kāi)發(fā)框架——如果用的是 ONNX 表示方式。如果優(yōu)化很頻繁,把它們單獨(dú)整合到各個(gè)框架是個(gè)非常耗費(fèi)時(shí)間的事。通過(guò) ONNX 表示方式,更多開(kāi)發(fā)者就能獲取這些優(yōu)化。
ONNX 為可擴(kuò)展的計(jì)算圖模型、內(nèi)部運(yùn)算器(Operator)以及標(biāo)準(zhǔn)數(shù)據(jù)類型提供了定義。在初始階段,F(xiàn)acebook 和微軟會(huì)專注于推理(Inference)所需要的各項(xiàng)能力(評(píng)估)。
每個(gè)計(jì)算數(shù)據(jù)流圖以節(jié)點(diǎn)列表的形式組織起來(lái),構(gòu)成一個(gè)非循環(huán)的圖。節(jié)點(diǎn)有一個(gè)或多個(gè)的輸入與輸出。每個(gè)節(jié)點(diǎn)都是對(duì)一個(gè)運(yùn)算器的調(diào)用。圖還會(huì)包含協(xié)助記錄其目的、作者等信息的元數(shù)據(jù)。
運(yùn)算器在圖的外部實(shí)現(xiàn),但那些內(nèi)置的運(yùn)算器可移植到不同的框架上。每個(gè)支持 ONNX 的框架將在匹配的數(shù)據(jù)類型上提供這些運(yùn)算器的實(shí)現(xiàn)。
ONNX 標(biāo)準(zhǔn)能否在深度學(xué)習(xí)開(kāi)發(fā)者們接受,在很大程度上將取決于它在各個(gè)框架上的普及程度。
在雷鋒網(wǎng)看來(lái),目前 ONNX 最大的問(wèn)題是,最受歡迎的開(kāi)發(fā)框架 TensorFlow 沒(méi)有兼容 ONNX 標(biāo)準(zhǔn)。亞馬遜的御用框架 MXNet 也沒(méi)有。Facebook 和微軟都表示,將來(lái)會(huì)持續(xù)有更多框架加入到 ONNX 生態(tài)中,但沒(méi)有透露 TensorFlow 和 MXNet 是否在計(jì)劃中。谷歌和亞馬遜也還沒(méi)有對(duì)此事表達(dá)態(tài)度,他們?cè)覆辉敢夂献鳎袑傥粗?/p>
初始版 ONNX 的代碼、文件,已在 GitHub 上開(kāi)源。Facebook 和微軟表示將會(huì)持續(xù)改進(jìn) ONNX, 將會(huì)在不久的將來(lái)推出范例、工具、reference implementations 以及模型。
更多關(guān)于 ONNX 的信息可訪問(wèn) Facebook 官方博客。
via 微軟,venturebeat
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。