**內(nèi)容概覽 **介紹了深度學(xué)習(xí)框架發(fā)展的三個(gè)時(shí)期:工具包時(shí)代(2014年前)俐银、數(shù)據(jù)流時(shí)期(2014-2018)、新時(shí)代(2019年后)理逊。強(qiáng)調(diào)了深度學(xué)習(xí)框架的重要性與推動(dòng)因素橡伞,介紹了3位ACM人李沐、陳天奇和他一起將各自的技術(shù)Parameter Server晋被、CXXNet兑徘、Minerva融合并創(chuàng)造了新的深度學(xué)習(xí)框架MXNet。敏捷學(xué)長也指出了在深度學(xué)習(xí)新時(shí)代羡洛,隨著可微分編程挂脑、圖神經(jīng)網(wǎng)絡(luò)等新領(lǐng)域的出現(xiàn)以及專用芯片的發(fā)展,深度學(xué)習(xí)框架會(huì)迎來更多機(jī)遇與挑戰(zhàn)欲侮。
深度學(xué)習(xí)的浪潮其實(shí)到現(xiàn)在僅僅發(fā)展了十幾年的時(shí)間崭闲。深度學(xué)習(xí)的火熱到底是什么在驅(qū)動(dòng)?
原因主要來自于三個(gè)方面:
(1)首先是規(guī)模很大的數(shù)據(jù)锈麸。俗話說巧婦難為無米之炊镀脂,大數(shù)據(jù)使得我們?cè)谟?xùn)練神經(jīng)網(wǎng)絡(luò)的過程中有充分的資源可以利用;
(2)其次忘伞,算法也是非常非常重要的突破薄翅。比如說卷積神經(jīng)網(wǎng)絡(luò)沙兰、residual network、注意力機(jī)制這些算法的興起翘魄,也是促成深度學(xué)習(xí)浪潮的重要因素鼎天。
(3)最后是算力。算力主要體現(xiàn)在兩個(gè)方面:軟件和硬件暑竟,其中軟件對(duì)應(yīng)的就是今天要講的深度學(xué)習(xí)框架斋射。
對(duì)于做人工智能方面的研究或者工業(yè)界的人士,或多或少都用過深度學(xué)習(xí)框架但荤。在過去的幾十年里罗岖,有很多深度學(xué)習(xí)框架被提出,被使用腹躁,但最后銷聲匿跡桑包。我們需要去了解一代又一代的深度學(xué)習(xí)框架被提出的原因,框架之間的關(guān)系及其演變的歷史纺非,也就是今天的主題:深度學(xué)習(xí)框架這十年哑了。
深度學(xué)習(xí)框架
講深度學(xué)習(xí)框架之前,可以先了解一下什么是Rube Goldberg’s Machine烧颖。這是一個(gè)在美國高中的科創(chuàng)文化中非常流行的概念弱左。它的目的是設(shè)計(jì)一個(gè)復(fù)雜、可能有很多機(jī)關(guān)技巧的機(jī)器炕淮,但完成的卻是一個(gè)非常簡單的工作拆火。比如去年Rube Goldberg’s Machine比賽的題目是設(shè)計(jì)一個(gè)能把一枚硬幣放到儲(chǔ)蓄罐里的機(jī)器。另一個(gè)例子是self operating napkin,一個(gè)自動(dòng)遞紙巾的機(jī)器涂圆。這個(gè)機(jī)器的工作非常簡單榜掌,但是流程卻非常復(fù)雜,比如客人把手放下乘综,就要觸發(fā)各個(gè)機(jī)關(guān),最后把紙巾遞到面前套硼。
要理解一個(gè)復(fù)雜的system卡辰,最簡單的方式是看system的上游和下游,比如上述的機(jī)器邪意,雖然流程很復(fù)雜九妈,但觸發(fā)條件就是客人放下手,下游就是把紙巾送嘴邊雾鬼。
深度學(xué)習(xí)系統(tǒng)也是類似的思維萌朱。對(duì)于深度學(xué)習(xí)框架來說,系統(tǒng)上游是各種神經(jīng)網(wǎng)絡(luò)模型策菜,系統(tǒng)的下游是各類硬件晶疼,例如GPU酒贬、CPU等。理解了上下游后翠霍,深度學(xué)習(xí)系統(tǒng)的邊界和目的就變得簡單而清晰了锭吨。深度學(xué)習(xí)框架就是使用最精簡的設(shè)計(jì),靈活地支持各類神經(jīng)網(wǎng)絡(luò)寒匙,并且不同硬件條件下零如,也能讓神經(jīng)網(wǎng)絡(luò)高效執(zhí)行。
Rube Goldberg’s Machine和深度學(xué)習(xí)框架兩者的區(qū)別在于:Rube Goldberg’s Machine將模型復(fù)雜化锄弱,而深度學(xué)習(xí)框架的目的是用最精簡的方完成任務(wù)考蕾。The simple is the better。從這個(gè)角度上会宪,我們可以把十幾年間涌現(xiàn)的大量深度學(xué)習(xí)框架劃分為三個(gè)時(shí)代肖卧,分別是:工具包時(shí)代、數(shù)據(jù)流時(shí)代和新時(shí)代狈谊。
工具包時(shí)代
工具包時(shí)代是接觸神經(jīng)網(wǎng)絡(luò)較早的時(shí)期喜命,一般指2014年前,代表性的框架有Cuda-ConvNet2和Caffe河劝。
特征
這個(gè)時(shí)代的特點(diǎn)是計(jì)算機(jī)視覺領(lǐng)域的井噴壁榕。起源于07年的第一篇深度學(xué)習(xí)網(wǎng)絡(luò)論文在mnist數(shù)據(jù)集上得到了很好的效果,12年AlexNet誕生也鼓勵(lì)了深度學(xué)習(xí)的浪潮赎瞎。在這個(gè)階段牌里,卷積神經(jīng)網(wǎng)絡(luò)是很多工具包關(guān)注的要點(diǎn)。Cuda-ConvNet2或Caffe定義模型的方式也因此是以寫configuration為主务甥,和現(xiàn)在的框架有很大的區(qū)別牡辽。例如用Caffe寫AlexNet時(shí),要定義 layer和它的name敞临、type态辛、input_param等參數(shù)。這樣設(shè)計(jì)的原因就是卷積神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)系統(tǒng)上游的主流挺尿,那個(gè)時(shí)代對(duì)這方面的研究也非匙嗪冢火熱。這些框架的interface是完全可以滿足需求的编矾,因?yàn)楫?dāng)時(shí)的研究只是把不同的卷積層拼接熟史,從而了解不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的效果。
優(yōu)勢
工具包時(shí)代的系統(tǒng)設(shè)計(jì)非常簡單窄俏。
在用戶層蹂匹,它僅僅是模型配置文件,在硬件層凹蜈,系統(tǒng)通過手寫GPU和CPU的神經(jīng)網(wǎng)絡(luò)算子來解決硬件問題限寞,例如Cuda能明顯實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)加速忍啸。
隨著網(wǎng)絡(luò)和硬件的發(fā)展,個(gè)人作為單獨(dú)的團(tuán)隊(duì)來編寫神經(jīng)網(wǎng)絡(luò)算子變得困難昆烁,所以大廠商吊骤,包括英偉達(dá)、英特爾静尼,會(huì)開發(fā)專門針對(duì)神經(jīng)網(wǎng)絡(luò)的算子庫白粉,比如說CuDNN和MKLDNN,這些算子在現(xiàn)在的神經(jīng)網(wǎng)絡(luò)系統(tǒng)框架 中依然常用。
這就是工具包時(shí)代的Cuda-ConvNet2和Caffe成功的原因鼠渺。
劣勢
工具包時(shí)代的框架也存在一些缺點(diǎn)鸭巴。
首先是模型配置文件非常不靈活,很難表達(dá)復(fù)雜的模型例如RNN拦盹,雖然對(duì)于計(jì)算機(jī)視覺的網(wǎng)絡(luò)處理比較方便鹃祖,但是對(duì)于變長的數(shù)據(jù),例如文本的支持并不理想普舆。
其次恬口,它并不是非常靈活的編程語言,隨著深度學(xué)習(xí)網(wǎng)絡(luò)可學(xué)習(xí)參數(shù)的增多沼侣,它難以利用多機(jī)和多GPU訓(xùn)練祖能,因?yàn)榕渲梦募茈y去表達(dá)如何在多機(jī)和多GPU的環(huán)境下訓(xùn)練,同時(shí)算子庫也無法解決運(yùn)行時(shí)的問題蛾洛。
最后养铸,隨著模型復(fù)雜化,工具包對(duì)新出現(xiàn)的算子的支持也非常有限轧膘。
在這個(gè)時(shí)代如何去解決框架的問題是值得思考的钞螟。
數(shù)據(jù)流時(shí)代
2014年在Denver,我、李沐和陳天奇三位ACM班的學(xué)生在OSDI開會(huì)谎碍。李沐實(shí)現(xiàn)的是 parameter server鳞滨,他的專業(yè)領(lǐng)域在于多機(jī)分布式訓(xùn)練。陳天奇的項(xiàng)目是CXXNet,包含了高效而豐富的算子庫蟆淀。我的項(xiàng)目是Minerva太援,核心思想是****使用數(shù)據(jù)流的引擎,令多GPU的訓(xùn)練加速扳碍。我們共同的思想是如何設(shè)計(jì)更好的深度學(xué)習(xí)系統(tǒng),同時(shí)我們的項(xiàng)目和專業(yè)領(lǐng)域正好互補(bǔ)仙蛉。于是我們的MXNet應(yīng)運(yùn)而生笋敞。
接下來的一段時(shí)間(2014-2018年),就是數(shù)據(jù)流時(shí)期框架的爆發(fā)荠瘪。主流的框架有MXNet夯巷、TensorFlow赛惩、PyTorch、Chainer趁餐、Caffe2喷兼。
主導(dǎo)因素
隨著深度學(xué)習(xí)的領(lǐng)域的不斷發(fā)展,NLP也進(jìn)入井噴階段后雷,這是這些框架出現(xiàn)的一大誘因季惯。同時(shí)隨著數(shù)據(jù)的增加,對(duì)并行的需求也隨之上升臀突,因此在數(shù)據(jù)流時(shí)期勉抓,很多模型如ResNet在ImageNet上訓(xùn)練只需要一小時(shí),通過在大量機(jī)器上并行,甚至在分鐘候学、秒的量級(jí)上可以完成藕筋。這都得益于數(shù)據(jù)流的概念和數(shù)據(jù)流天然具有的并行性。
時(shí)代特點(diǎn)
數(shù)據(jù)流時(shí)代的模型和工具包時(shí)代的區(qū)別就是在用戶層和硬件層中間加了一層中間表達(dá):數(shù)據(jù)流圖梳码。系統(tǒng)分為前端和后端隐圾,前端只關(guān)注用戶使用方面的問題,而后端負(fù)責(zé)系統(tǒng)優(yōu)化掰茶。
第二個(gè)區(qū)別是暇藏,前端也放棄模型配置文件了,Python成為了整個(gè)深度學(xué)習(xí)框架的一個(gè)標(biāo)桿符匾,通過Python提供張量運(yùn)算的接口叨咖。隨著Pytorch為典型的用戶友好的框架的出現(xiàn),NN模型庫,包括動(dòng)態(tài)自動(dòng)求導(dǎo)成為了整個(gè)深度學(xué)習(xí)框架的標(biāo)配啊胶。后端也逐漸把專用的算子替代成更豐富的張量算子庫甸各,同時(shí)增加了參數(shù)服務(wù)器,使得整個(gè)系統(tǒng)能夠在多機(jī)多GPU的環(huán)境下訓(xùn)練焰坪。
新時(shí)代
數(shù)據(jù)流時(shí)代其實(shí)就是新時(shí)代的開端趣倾。雖然通用深度學(xué)習(xí)框架的設(shè)計(jì)趨向于穩(wěn)定,但是新的概念某饰,新的模型不斷涌現(xiàn)儒恋,讓系統(tǒng)的設(shè)計(jì)也有新的一些挑戰(zhàn)。
第一個(gè)概念是可微分編程黔漂。這是近兩年提出的一個(gè)廣大的思路概念诫尽。在編寫模型時(shí),程序本身是可微分編程的炬守,很多系統(tǒng)設(shè)計(jì)的工作在往這個(gè)方向邁進(jìn)牧嫉。第二點(diǎn)是新領(lǐng)域的出現(xiàn),例如圖神經(jīng)網(wǎng)絡(luò),圖神經(jīng)網(wǎng)絡(luò)可以處理原本難以解決的數(shù)據(jù)酣藻,比如知識(shí)圖譜曹洽,制藥中分子的生物圖,新領(lǐng)域出現(xiàn)辽剧,也對(duì)系統(tǒng)產(chǎn)生了新的挑戰(zhàn)送淆。第三個(gè)概念是AI-chip,神經(jīng)網(wǎng)絡(luò)專用芯片怕轿。這是深度學(xué)習(xí)發(fā)展的大趨勢偷崩,也是系統(tǒng)無可避免的問題。
在2019年后撤卢,系統(tǒng)的趨勢有了明顯的變化环凿。
首先是前端垂直化。開發(fā)過程中放吩,不再以通用系統(tǒng)為目標(biāo)智听,而是基于通用系統(tǒng)開發(fā)面向垂直領(lǐng)域的工具,包括計(jì)算機(jī)視覺渡紫,自然語言處理到推,圖領(lǐng)域等領(lǐng)域,DGL惕澎、AutoGluon莉测、Captum等垂直領(lǐng)域的工具包。
其次唧喉,新概念也在慢慢滲透到系統(tǒng)設(shè)計(jì)中捣卤。對(duì)于Python,很多人提出Python并不是很好的選擇八孝,也有很多的工作來優(yōu)化對(duì)應(yīng)的語言的編譯董朝。對(duì)于數(shù)據(jù)流圖,它并不是一種非常強(qiáng)大的編程語言干跛。而實(shí)現(xiàn)可微分編程需要更強(qiáng)大的中間表達(dá)比如Relay子姜、MLIR。對(duì)于張量算子庫楼入,AI chip的出現(xiàn)讓張量算子編譯器應(yīng)運(yùn)而生哥捕,其代表作有TVM,TC等工作嘉熊。
總結(jié)
深度學(xué)習(xí)框架雖然非常年輕遥赚,但已經(jīng)經(jīng)歷了多輪的演變,而每一輪的演變都是由于算法和硬件的新趨勢帶來的新的挑戰(zhàn)阐肤。
2019年之后鸽捻,新挑戰(zhàn)不斷涌現(xiàn),對(duì)于有志于投身這個(gè)領(lǐng)域的同學(xué)是非常好的時(shí)機(jī)。我們ACM班人在深度學(xué)習(xí)框架演變中也起到了非常重要的推動(dòng)作用御蒲,很多的學(xué)長學(xué)姐在各個(gè)領(lǐng)域有非常好的成就,在研究過程中诊赊,如果能和同學(xué)或者學(xué)長產(chǎn)生一些思維的火花厚满,不要猶豫,可能你們要做的工作也能在歷史中留下印記碧磅。