AI開發(fā)面臨碎片化 深度學(xué)習(xí)框架要統(tǒng)一
人工智能繁榮發(fā)展的背后是各大廠商暗戰(zhàn)的開始,大家都在為了爭搶開發(fā)者推出各自的深度學(xué)習(xí)開發(fā)框架,而隨著應(yīng)用在不同場景下的關(guān)聯(lián)性越來越強(qiáng),碎片化的框架也對開發(fā)人員造成了困擾,開發(fā)框架需要統(tǒng)一。
AI開發(fā)面臨碎片化 深度學(xué)習(xí)框架要統(tǒng)一(圖片來自FactorDaily)
深度學(xué)習(xí)的優(yōu)勢在于,利用非監(jiān)督式或半監(jiān)督式的特征學(xué)習(xí)、分層特征提取高效算法去替代傳統(tǒng)的人工獲取特征。為此,微軟、谷歌、亞馬遜等IT巨頭都在圍繞深度學(xué)習(xí)投資項(xiàng)目、開發(fā)框架工具,CNTK、TensorFlow、MXNet背后均有著這些企業(yè)的力挺。除此之外,Caffe、Torch、Theano也是比較流行的開發(fā)框架。
對于開發(fā)人員來說,使用這些框架的特性和功能各有不同,應(yīng)用場景也可能是算機(jī)視覺、語音識(shí)別、自然語言處理與生物信息學(xué)等等。以TensorFlow來說,使用者不再需要通過反向傳播求解梯度,這點(diǎn)和Theano類似,而且在設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)時(shí),也不用耗費(fèi)過多精力去寫C++或者CUDA代碼。
在使用過程中,C++在線上部署的復(fù)雜度方面有所降低,而且讓手機(jī)、平板、穿戴設(shè)備等對處理資源占用密集的終端可以運(yùn)行更為復(fù)雜的模型,要知道相比之下Python的資源損耗還處在相對較高的水平。借此,開發(fā)者就能在硬件性能相對足夠的機(jī)器中,即使是用Python也可以獲得在低延遲狀態(tài)下、嵌入式環(huán)境中使用C++的能力。當(dāng)然TensorFlow也有其問題,比如異類設(shè)備之間的通信優(yōu)化仍需完善。
Theano可以說是最古老的同類庫之一,也是最初深度學(xué)習(xí)的主導(dǎo)標(biāo)準(zhǔn)之一,其流行程度可以讓用戶在上面找到各種常見問題,包括如何去存儲(chǔ)、運(yùn)行訓(xùn)練模型,在單GPU方面執(zhí)行效率也算是還不錯(cuò)的水平。而且基于Theano,也衍生出了大量的深度學(xué)習(xí)庫,像Keras對神經(jīng)網(wǎng)絡(luò)的抽象就可以對執(zhí)行后端隨意切換。
不過考慮到Theano缺乏底層C++的接口,導(dǎo)致部署起來并不方便,在工業(yè)生產(chǎn)環(huán)境的應(yīng)用幾乎鮮有。因此,很多人都是將其視為研究工具,而不是最終的產(chǎn)品,在CPU上的低性能也有這方面的阻礙。所以這種框架更像是一個(gè)原始語言,如果直接用其設(shè)計(jì)神經(jīng)網(wǎng)絡(luò),或者去讀它的輸出信息,對開發(fā)者是畢竟痛苦的事情。
此外,Caffe、Deeplearning4J等也有著各自的問題,這里就不一一贅述了。由此也引申出了開發(fā)者到底該如何選擇深度學(xué)習(xí)的開發(fā)平臺(tái)?這里列出了幾個(gè)考察點(diǎn):首先,多數(shù)公司的AI架構(gòu)不是從0起步,對既有編程平臺(tái)的整合難度不能忽視;其次,對機(jī)器學(xué)習(xí)軟件包和數(shù)據(jù)處理的難度也要尋求兼容;再有,二次開發(fā)能力同樣關(guān)鍵,有了分布式、多GPU的優(yōu)化能力,如何在其他平臺(tái)上發(fā)揮作用,這是要思考的事情。
通過對比主流的幾款深度學(xué)習(xí)開發(fā)框架,可以看到底層語言用C++(Caffe、MXNet、CNTK、TensorFlow)和C(Torch)的占有大多數(shù),這也是當(dāng)前來看最有效率的,像Python則是有望成為下一代的平臺(tái)語言,這也是像微軟在CNTK 2.0中所努力的方向。
從生態(tài)的角度來看,各家的框架多少還存在著分戰(zhàn)隊(duì)的情況。開發(fā)者需要在各自的平臺(tái)上做各自的開發(fā),而且這些框架在更新時(shí)并不是統(tǒng)一的,也就是說開發(fā)者在一個(gè)框架上開發(fā)的神經(jīng)網(wǎng)絡(luò)模型,并不能直接在另一個(gè)框架上用。要想讓二者實(shí)現(xiàn)兼容,開發(fā)者需要花費(fèi)很大的精力去自行解決。
為了解決這一問題,需要微軟、谷歌這樣掌握開發(fā)者“主權(quán)”的企業(yè)站出來,借助兼容框架去統(tǒng)一開發(fā)者的使用體驗(yàn),ONNX(開放神經(jīng)網(wǎng)絡(luò)交換)就是在這個(gè)思路下成立的,這是由微軟共同發(fā)起的一個(gè)項(xiàng)目,參與者有Facebook、AWS這樣的軟件廠商,也有AMD、ARM、華為、IBM、英特爾、高通這樣的產(chǎn)業(yè)參與者。比如說有了ONNX,開發(fā)者可以把在PyTorch訓(xùn)練的模型直接放到Caffe2上推理。
幾乎每隔2-4個(gè)月就會(huì)有ONNX的升級,例如其中會(huì)新增一些運(yùn)算符幫助用戶創(chuàng)建新的模型。事實(shí)上,現(xiàn)在微軟的主流產(chǎn)品Bing、廣告和Office,還有視覺服務(wù),基本上后臺(tái)都在用ONNX。在此基礎(chǔ)之上,微軟還發(fā)布了ONNX Runtime,插件式的執(zhí)行者界面意味著ONNX Runtime可以快速適應(yīng)軟件和硬件的改進(jìn)。執(zhí)行者界面是硬件加速器向ONNX Runtime報(bào)告其性能的標(biāo)準(zhǔn)方式。英特爾、英偉達(dá)都在將ONNX Runtime整合到他們的硬件加速器中,目前,英特爾的MKL-DNN、nGraph編譯器以及英偉達(dá)優(yōu)化的TensorRT推理引擎都已完成整合。
就在ONNX吸納更多開源框架的過程中,也并不是所有廠商的態(tài)度都那么趨同,像TensorFlow對ONNX的興趣就沒有那么明朗。事實(shí)上,微軟也寫了從TensorFlow到ONNX的轉(zhuǎn)化器,通過這樣的一種轉(zhuǎn)化的功能,可以實(shí)際上將很多TensorFlow下面的這些模型轉(zhuǎn)移到ONNX來。除此之外,ONNX還支持一些非常高級別、或者說特別的運(yùn)算符,比如LSTM,這些運(yùn)算符主要是用來支持一些語音和語言方面的功能。
如果想在AI領(lǐng)域當(dāng)中獲得成功,就必須將硬件和軟件都結(jié)合起來,因此需要ONNX這樣的橋梁,過去不同的接口和界面為開發(fā)者帶來了很大的困惑,而ONNX這可以使硬件和應(yīng)用有機(jī)結(jié)合起來,在云端、本地、邊緣等任意一個(gè)環(huán)境實(shí)現(xiàn)部署。由此來看AI開發(fā)框架統(tǒng)一勢在必行。