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