自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

杜克大學(xué)陳怡然:高效人工智能系統(tǒng)的軟硬件協(xié)同設(shè)計(jì)

人工智能 新聞
不久之前,杜克大學(xué)電子計(jì)算機(jī)工程系教授陳怡然發(fā)表了主題演講《高效人工智能系統(tǒng)的軟硬件協(xié)同設(shè)計(jì)》,介紹了如何軟硬協(xié)同設(shè)計(jì)出高性能的人工智能系統(tǒng),包括存內(nèi)計(jì)算深度學(xué)習(xí)加速器、模型方面的優(yōu)化,分布式訓(xùn)練系統(tǒng)以及一些涉及自動化操作等內(nèi)容。

不久之前,機(jī)器之心AI科技年會在線上召開。杜克大學(xué)電子計(jì)算機(jī)工程系教授陳怡然發(fā)表了主題演講《高效人工智能系統(tǒng)的軟硬件協(xié)同設(shè)計(jì)》。

演講視頻回顧:

https://www.bilibili.com/video/BV1yP4y1T7hq?spm_id_from=333.999.0.0

以下為陳怡然在機(jī)器之心 AI 科技年會上的演講內(nèi)容,機(jī)器之心做了不改變原意的編輯。

我經(jīng)常用這張圖,來源于大概 32 年前的一本書《The Age OF Intelligent Machines》,作者是 Kurzweil 博士 ,他當(dāng)時就預(yù)言了未來人工智能所需要的算力發(fā)展。我們對這張圖做了些延伸,單個器件上大概能夠集成多少計(jì)算能力。過去 100 年,計(jì)算能力幾乎呈指數(shù)增長趨勢,到現(xiàn)在,比如今天英偉達(dá)發(fā)布會最新 GPU 的計(jì)算,包括上周蘋果發(fā)布的 GPU 芯片,基本上可以帶來超過一個人腦級別的計(jì)算能力,為我們帶來了非常大的可能。

人工智能計(jì)算平臺分很多種,從大家比較熟悉的 GPU、FPGA、ASIC 到新型架構(gòu),實(shí)際都遵循了一個原則:要么更高效,要么更專業(yè)需要更長時間,要么更靈活,不可能在多個維度達(dá)到統(tǒng)一,永遠(yuǎn)存在一個設(shè)計(jì)上的矛盾。

比如,在 GPU 上算力最高,功耗也最高。FPGA 上會實(shí)現(xiàn)一些非常容易可重構(gòu)的計(jì)算,但能效比可能不是那么好。ASIC 能效比非常好,但需要更長的開發(fā)周期 ,基本上是對特定應(yīng)用做設(shè)計(jì),當(dāng)出貨量比較小的時候,不是特別有效。

大家比較熟悉馮 · 諾伊曼瓶頸,實(shí)際上是說計(jì)算能力可以通過不斷增加計(jì)算單元來實(shí)現(xiàn),但最后瓶頸在于能不能把數(shù)據(jù)及時給到計(jì)算單元。過去四五十年,片上計(jì)算能力和片外數(shù)據(jù)通過存儲帶寬提供給片上的能力差距越來越大,也帶來了 “內(nèi)存墻” 的概念。當(dāng)然,實(shí)際具體設(shè)計(jì)中,比如不能及時挪走產(chǎn)生的熱量、不能無限制增大使用頻率等,(這些)都迫使我們尋找新的計(jì)算設(shè)計(jì)。

現(xiàn)在比較熱門的是近存或存內(nèi)計(jì)算設(shè)計(jì),想法也非常簡單,既然瓶頸來源于數(shù)據(jù)間流動,尤其是存儲空間到計(jì)算空間的流動,能不能想一些辦法讓計(jì)算跟存儲發(fā)生在同一個地方?這實(shí)際上正好和馮諾依曼體系相對,后者是將兩者分開,這個要合在一起。

為什么可以這么做?因?yàn)樾滦陀?jì)算,比如神經(jīng)網(wǎng)絡(luò)或圖計(jì)算,經(jīng)常有一方不變,另外一方不斷變化的情況。比如 A 乘上 B,A 不斷變化而 B 不變,這種情況下,可以在存儲 B 的地方進(jìn)行計(jì)算,不需要把數(shù)據(jù)挪來挪去。

大家進(jìn)行了非常多嘗試,比如用 DRAM 來做計(jì)存。最近,阿里好像也寫了一篇文章講了存內(nèi)計(jì)算,把存儲器設(shè)計(jì)成可以有計(jì)算單元,直接在里面進(jìn)行相應(yīng)計(jì)算,這都是一些有益的嘗試。與在從外面拿到數(shù)據(jù)過來進(jìn)行計(jì)算相比,這個計(jì)算能效強(qiáng)幾千倍,是非常有希望的未來發(fā)展方向。

我們今天講的一些內(nèi)容與這些相關(guān),包括存內(nèi)計(jì)算深度學(xué)習(xí)加速器、模型方面的優(yōu)化,分布式訓(xùn)練系統(tǒng)以及一些涉及神經(jīng)網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)自動化方面的操作。

當(dāng)你看到存內(nèi)計(jì)算時,第一個想法是把神經(jīng)網(wǎng)絡(luò)參數(shù)存到一個地方,數(shù)據(jù)進(jìn)到這個地方后直接進(jìn)行計(jì)算,避免數(shù)據(jù)搬運(yùn)。一個比較常見的場景是,把這些參數(shù)存在一個特殊納米芯片上,(納米芯片里的)一些器件上的阻值可以通過電流或電壓變化(而變化,進(jìn)而可以被用)來進(jìn)行編程,表現(xiàn)一個參數(shù)。

當(dāng)涉及一個比較大的矩陣形式,所有輸入跟所有輸出可以在某些交叉節(jié)點(diǎn)上進(jìn)行連接,非常像一個矩陣在神經(jīng)網(wǎng)絡(luò)里面的狀態(tài),所有輸入相當(dāng)于一個向量,向量乘以矩陣可以看做所有電壓進(jìn)行輸入,電壓經(jīng)過電流產(chǎn)生一個合并的電流就是他們所有統(tǒng)計(jì)的和。這就以一個非常高效的方式實(shí)現(xiàn)了向量跟矩陣的相乘。

過去十幾年,我們在杜克做了大量相關(guān)嘗試,并設(shè)計(jì)了一些芯片。

2019 年我們在 VLSI 發(fā)了一篇文章,可以用新型存儲器和傳統(tǒng) CMOS 進(jìn)行連接,集成之后可以將比如卷積神經(jīng)網(wǎng)絡(luò)整個映射到這樣一個矩陣狀態(tài)里,同時可以選擇精度,進(jìn)行精度和能效之間的權(quán)衡(tradoff)。相比傳統(tǒng) CMOS 設(shè)計(jì),性能最后可以得到幾十倍的提高。

今年在 ISSCC 上我們也有另外一個工作,主要是我們畢業(yè)的學(xué)生燕博南在北大的一個課題小組工作,這個設(shè)計(jì)思想還可以放到傳統(tǒng) SRAM 。這個設(shè)計(jì)的一個特別之處在于,傳統(tǒng)設(shè)計(jì)通過電阻進(jìn)行參數(shù)表達(dá),實(shí)際上是一種模擬計(jì)算方式。換句話說,組織上連續(xù)態(tài)表達(dá)一個參數(shù),這就需要模擬到數(shù)字的轉(zhuǎn)換,數(shù)模轉(zhuǎn)換非常昂貴。而我們在 ISSCC 上的工作:ADC-Less SRAM 實(shí)際上是一個二值的整數(shù)表達(dá),比如零和一,這就有可能去掉數(shù)模轉(zhuǎn)換,直接實(shí)現(xiàn)數(shù)字狀態(tài)下的計(jì)算。這是當(dāng)時實(shí)現(xiàn)的一個技術(shù)突破。

可以看到下面這張圖 Digital CIM(最右邊, This Work), 能效大概可以達(dá)到 27.4 ( TOPS/W,8 比特狀態(tài)下 ),已經(jīng)超過原先其他所有設(shè)計(jì),整個 density 非常高,在 28 納米工藝情況下,每平方毫米上差不多有上兆的晶體管。

除了電路,還要有架構(gòu)跟編譯器之間的支持才能夠?qū)崿F(xiàn)整個計(jì)算系統(tǒng)的設(shè)計(jì)。2014-2015 年之前,我們就開始做相關(guān)設(shè)計(jì),比如設(shè)計(jì)編譯器,找到可以用來加速的程序的一部分,同時在片上通過一些方式連接各種各樣的陣列,把大的網(wǎng)絡(luò)分成小的網(wǎng)絡(luò),或在不同網(wǎng)絡(luò)層(layer)之間進(jìn)行數(shù)值的轉(zhuǎn)換。

比較值得一提的是,我們經(jīng)常會在一個大的網(wǎng)絡(luò)里遇到很多陣列,至少存在兩種網(wǎng)絡(luò)并行計(jì)算的方式——數(shù)字并行和模型并行。所謂數(shù)字并行,是指有很多輸入(input),些數(shù)據(jù)可以被并行的分到不同運(yùn)算單元(PE)里面去。對于模型并行來說也是一樣,大的模型可以被分塊進(jìn)行計(jì)算。

但是,這兩種并行的方式并不排他。即使對于一個 Layer 來說,當(dāng)你把這一個 layer 映射到不同 PE 上,在每個 PE 仍可能采用不同的并行方式。比如下圖用黑點(diǎn)和白點(diǎn)來表達(dá),大部分并行方式是通過模型并行的方式來操作,也有少部分是數(shù)字并行。

為什么會這樣?因?yàn)橹挥屑刹煌⑿械姆植挤绞?,才能使得在整個算力全部被表達(dá)的情況下,所有數(shù)字跟數(shù)字正好達(dá)到一個穩(wěn)態(tài)平衡,整體能效最高。如果是單一表達(dá),有的地方就空了或者算得比較慢,拖累了整個計(jì)算。這是 2019 年發(fā)表的文章 HyPar。

2020 年我們發(fā)現(xiàn)一個新問題,我們實(shí)際上沒有太考慮卷積網(wǎng)絡(luò)本身的表達(dá),而你經(jīng)常會在卷積層里一個層一個層地去計(jì)算,會有一些中間結(jié)果,直到最后才會被用到。這樣一來會產(chǎn)生第三種并行方式,就是 Tensor 并行的方式,比如下圖這種,輸入和輸出各有三種并行的可能。3 乘以 3,總共有 9 種表達(dá)方式。

如果考慮到每個 PE 都有 9 種方式進(jìn)行表達(dá),就沒有辦法通過人工方式進(jìn)行優(yōu)化,必須通過自動化方式(比如線性規(guī)劃)完成整個系統(tǒng)的表達(dá)。同時,你也不可能逐個去找這些表達(dá)方式,需要一些的層次化的方式。

比如,先有些大的區(qū)分,再由小的區(qū)分一直到最后單個表達(dá)。如果用三種顏色來做表達(dá),會發(fā)現(xiàn)即使在一個層次的映射下也有不同 PE 有不同運(yùn)行表達(dá)來滿足整體上數(shù)據(jù)流動的最優(yōu)。這樣,能效就能再推進(jìn)一倍。

同樣的思路不僅僅可以用到深度學(xué)習(xí)里面。深度學(xué)習(xí)只是一個圖計(jì)算特例。而任何可用圖方式來表達(dá)數(shù)據(jù)流動的計(jì)算都是圖計(jì)算,深度學(xué)習(xí)雖然很豐富但仍然只是圖計(jì)算的一種特殊表達(dá)。所以,你可以用存內(nèi)計(jì)算方式來進(jìn)行圖計(jì)算。

這是我們另外一個 HPCA 2018 上的工作。我們發(fā)現(xiàn)是圖計(jì)算,尤其是深度優(yōu)先或者網(wǎng)絡(luò)優(yōu)先搜索這類算法,可以把他們在矩陣上的表達(dá),用圖計(jì)算的方式來實(shí)現(xiàn)。相對于在傳統(tǒng) CPU 平臺上的計(jì)算,能效會有上百倍提高。

講完整個架構(gòu)設(shè)計(jì),在算法上如何繼續(xù)優(yōu)化計(jì)算能效?下一個例子是結(jié)構(gòu)稀疏化。稀疏化早就被熟知,當(dāng)神經(jīng)網(wǎng)絡(luò)的一些權(quán)重很小或者近乎于零,無論輸入多大,對輸出沒有影響,這個時候,你根本不需要算結(jié)果,直接丟掉這個結(jié)果(其實(shí)是零)就可以了。

2016 年以前,所有針對神經(jīng)網(wǎng)絡(luò)的稀疏化操作基本都是非結(jié)構(gòu)稀疏化,只要你看到一個零,就把它去掉。這就帶來一個問題——所有數(shù)據(jù)在計(jì)算機(jī)存儲的時候有一個 locality(局域性),因?yàn)橛袝r域跟空域的局域性,當(dāng)用到一個數(shù),基本上會有一個預(yù)期,這個數(shù)字會不斷被用到,或者存儲在其周圍的數(shù)也會在未來被不斷用到。當(dāng)你把很多零去掉后,會產(chǎn)生很多洞。當(dāng)你找到一個數(shù)之后,會期待下一個數(shù),但你根本沒有存。整個緩存會陷入一個狀態(tài):不斷到很遠(yuǎn)地方把數(shù)字弄過來,結(jié)果你發(fā)現(xiàn)這不是需要的,然后繼續(xù)去找。

怎么解決這個問題?做稀疏化的時候,仍然希望把去掉的這些零或者計(jì)算,以某種局域性來做表達(dá),比如整行或者整列全部去掉。這樣就可以在滿足存儲局域性的前提下,仍然達(dá)到計(jì)算優(yōu)化。

說起來容易,關(guān)鍵是怎么做?我們 2016 年 NeurIPS 有篇文章講了結(jié)構(gòu)稀疏化,這篇文章后來也變得很有名。(文章講的是)基本上可以找到這些參數(shù),對應(yīng)了某種存儲結(jié)構(gòu),這種結(jié)構(gòu)使得這些數(shù)以一塊一塊方式進(jìn)行存儲。這樣在清零時,把整個行或者列全部清零,仍然能夠在滿足優(yōu)化條件的前提下同時滿足 局域性。這個可以用在 CNN、LSTM、RNN 甚至一些更復(fù)雜計(jì)算。這項(xiàng)技術(shù)現(xiàn)在基本上已經(jīng)是神經(jīng)網(wǎng)絡(luò)優(yōu)化的一個標(biāo)配。

另一個常用的神經(jīng)網(wǎng)絡(luò)優(yōu)化是量化. 網(wǎng)絡(luò)訓(xùn)練需要高精度,但推理時并不需要高精度。這就產(chǎn)生了一個很有趣的事情:究竟什么樣的精度,優(yōu)化是最好的,而且這個精度用什么方式去表達(dá)。

傳統(tǒng)上,大家可以逐個去找最佳結(jié)果。比如,一個 bit、兩個 bit、四個 bit...... 去找就對了。但你會發(fā)現(xiàn),還要考慮到這個 bit 怎么在存儲進(jìn)行表達(dá)。比如,對這個 layer 來講,當(dāng)有某個 bit 于所有數(shù)字來說都是零,那就不需要存這一整個 bit。舉個例子,只要保證你只要這四個 bit 里的第二個和第四個存在,而不是每個都需要,這就豐富了整個精度的優(yōu)化。這也是我們第一次將結(jié)構(gòu)稀疏化運(yùn)用到 bit 水平的稀疏化研究上。

我們用 Group LASSO 的方式,把數(shù)據(jù)表達(dá)里面整個 column 或者整個結(jié)構(gòu)為零的 bit 全部去掉,這樣就極大降低存儲成本。這是我們 2021 年的一篇文章。

再往下就是訓(xùn)練,這是一個很復(fù)雜的事情。我們經(jīng)常教學(xué)生 loss function 要趨近于飽和。但在公司,永遠(yuǎn)不可能有足夠的算力讓你算到飽和,基本上給你一百臺機(jī)器訓(xùn)練 24 小時,無論你訓(xùn)練成什么樣,你都得結(jié)束,這使得訓(xùn)練本身要非常高效。

傳統(tǒng)上我們采取分布式服務(wù)器的做法,把模型復(fù)制很多遍,但每個復(fù)制的模型只用一部分?jǐn)?shù)據(jù)來訓(xùn)練。那么怎么保證最后得到的結(jié)果考慮到所有的數(shù)據(jù)?你就需要把這些神經(jīng)網(wǎng)絡(luò)在訓(xùn)練中禪城的梯度送到參數(shù)服務(wù)器里面,做平均之后再發(fā)回去來更新本地的神經(jīng)網(wǎng)絡(luò)。這就產(chǎn)生了一個問題:當(dāng)節(jié)點(diǎn)服務(wù)器特別多的時候,最后整個系統(tǒng)就完全的被梯度傳輸產(chǎn)生的數(shù)據(jù)流所占據(jù)。

怎么辦?我們后來發(fā)現(xiàn),當(dāng)參數(shù)足夠多的情況下,產(chǎn)生的梯度會滿足某一個分布,根本不需要傳輸原始數(shù)據(jù),只需要算分布的一些參數(shù)和一些諸如數(shù)據(jù)多還是少之類的,把他們傳過去,就可以完全在另外一端復(fù)制這個分布,得到相應(yīng)結(jié)果。

我們在手機(jī)端就完成了這樣一個操作,聯(lián)合很多手機(jī)進(jìn)行訓(xùn)練,同時還可以做推理。

做推理的時候,我們采取了聚類的方式,將那些非零的數(shù)字盡量以行列變換的方式調(diào)整到一塊兒,然后發(fā)到手機(jī)上集中進(jìn)行計(jì)算,減少手機(jī)間的通信,提高運(yùn)算效率。

我們曾經(jīng)跟一家公司做測試,在全球找了幾千個 CDN 網(wǎng)絡(luò)服務(wù)器,搞了一個 Style Transfer(風(fēng)格轉(zhuǎn)換)應(yīng)用,通過分布計(jì)算跟表達(dá)完成整個計(jì)算,效果非常好。基本上可以即時通過手機(jī)跟服務(wù)器聯(lián)動,完成整個訓(xùn)練和推理。

剛才講了這么多,實(shí)際上有一個問題:所有這些東西都需要一些非常有經(jīng)驗(yàn)、非常貴的工程師來設(shè)計(jì)相應(yīng)的神經(jīng)網(wǎng)絡(luò)。這也是現(xiàn)在神經(jīng)網(wǎng)絡(luò)落地成本中非常大的一部分。我們可以通過自動化方式,比如增強(qiáng)學(xué)習(xí)、優(yōu)化方式來優(yōu)化整個神經(jīng)網(wǎng)絡(luò),因?yàn)榭梢詫⑺M成某種優(yōu)化過程,但這些傳統(tǒng)的優(yōu)化過程非常昂貴。

我們曾經(jīng)想通過圖表達(dá)的方式來做這個。通過一個有向圖而且是一個沒有環(huán)路的有向圖來表達(dá)深度神經(jīng)網(wǎng)絡(luò)架構(gòu),它有很多個 cell,不同 cell 疊加在一起完成整個神經(jīng)網(wǎng)絡(luò)架構(gòu)。我們要找的是這個 cell 里面的拓?fù)浣Y(jié)構(gòu),來看最后這個神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)是否滿足要求。這就是一個對拓?fù)浣Y(jié)構(gòu)比較敏感的研究。

另外,你會發(fā)現(xiàn):當(dāng)做這些事情的時候,拓?fù)浣Y(jié)構(gòu)比較相似的神經(jīng)網(wǎng)絡(luò)的準(zhǔn)確度也都差不多,有相關(guān)性,相關(guān)系數(shù)雖然不是 1,但基本上也是一個比較高的數(shù)。因此,可以通過架構(gòu)預(yù)測這樣一個架構(gòu)是不是可以滿足我們的性能要求,這種預(yù)測可以指引完成整個神經(jīng)網(wǎng)絡(luò)架構(gòu)的搜索。

這是一些具體結(jié)果。我們把一些離散態(tài)的架構(gòu)或者拓?fù)浣Y(jié)構(gòu)映射到連續(xù)態(tài)的空間里,產(chǎn)生向量之間的夾角(相似性)作為一個性能的關(guān)鍵表達(dá),可以通過這樣方式預(yù)測得到優(yōu)化是什么樣的,不斷接近優(yōu)化結(jié)果。

顯然,這個方式是跟人的設(shè)計(jì)是相反的,人不是這么設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的。人是看哪里有小模型能不能滿足要求,滿足不了再往上加。我們也做過這樣的嘗試,叫 Automated network depth discovery , 設(shè)計(jì)一些規(guī)則,使得你可以從最小網(wǎng)絡(luò)不斷往上加,每個層里加不同 layer,或者加很多層,看到什么樣架構(gòu)最后滿足這個要求。當(dāng)然,你要設(shè)計(jì)一些具體規(guī)則或者做一些嘗試。

這些嘗試還挺有意思。最后你總能優(yōu)化到設(shè)計(jì)平衡前沿面的某一個點(diǎn)上,但沒有辦法固定優(yōu)化到某一個點(diǎn),你只能到這個前沿面上的某個點(diǎn),慢慢讓它自由流動。我們還是沒有足夠的理解,使得我們完全可以控制優(yōu)化的方向跟范圍。所以,這個工作還需要更深一步研究,我們只是證明了可行性,但沒有對規(guī)則的完備性做更多研究。

最后,硬件跟軟件協(xié)同設(shè)計(jì),有很多參數(shù)需要考慮,包括軟硬協(xié)同、具體電路跟架構(gòu)設(shè)計(jì)、以及算法本身針對硬件的優(yōu)化。

我們團(tuán)隊(duì)內(nèi)部做了很多年的積累,從 2012 年開始研究神經(jīng)網(wǎng)絡(luò)在不同硬件上的表達(dá),到后來做架構(gòu)設(shè)計(jì)、分布式設(shè)計(jì),到自動化設(shè)計(jì)等,做了非常多的嘗試。大概看到了如何從一個最簡單的表達(dá),一直最后只需到按一個鈕,完成了 AI 軟硬件結(jié)合的建設(shè)。

謝謝大家!

責(zé)任編輯:張燕妮 來源: 機(jī)器之心
相關(guān)推薦

2023-02-01 13:33:19

科學(xué)技術(shù)

2023-03-10 13:05:17

AI就職

2017-07-28 13:39:09

英特爾

2017-03-09 20:15:20

人工智能深度學(xué)習(xí)機(jī)器學(xué)習(xí)

2010-09-26 15:47:04

Oracle

2010-01-11 10:25:08

Linux軟硬件配置

2015-11-12 10:42:12

2018-04-14 10:10:32

智能金融 AI

2019-02-28 18:28:50

百度人工智能家庭影院

2013-04-02 09:16:23

微軟谷歌蘋果

2020-06-19 09:57:24

AI 數(shù)據(jù)人工智能

2010-04-23 10:30:16

實(shí)現(xiàn)負(fù)載均衡

2009-12-23 09:37:38

集線器故障

2011-01-28 10:09:26

系統(tǒng)管理員系統(tǒng)維護(hù)清單

2012-06-19 10:34:36

微軟surface平板

2011-03-09 09:33:51

Stack Overf架構(gòu)

2015-08-19 10:25:35

格力董明珠手機(jī)

2018-08-24 14:09:55

聯(lián)想

2020-06-18 11:10:16

AI人工智能神經(jīng)網(wǎng)絡(luò)

2023-09-27 09:30:26

英特爾
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號