美國(guó)杜克大學(xué)電子與計(jì)算機(jī)工程系教授、IEEE Fellow 陳怡然,受邀出席了智能存儲(chǔ)與存儲(chǔ)新架構(gòu)學(xué)術(shù)論壇,并發(fā)表《人工智能應(yīng)用開發(fā)的Processing-In-Memory(PIM)解決方案》的主題演講。

整理速記如下(未經(jīng)演講人確認(rèn))。

非常感謝大會(huì)邀請(qǐng)我來(lái)給大家做關(guān)于存內(nèi)計(jì)算的報(bào)告,我今天講的題目是存內(nèi)計(jì)算如何在人工智能應(yīng)用上的解決方案和它們的一些背景。

大家知道,深度學(xué)習(xí)特別火,在日常有非常廣泛的應(yīng)用,比如圖像處理、對(duì)象鎖定、翻譯、語(yǔ)音識(shí)別,甚至包括手勢(shì)翻譯、醫(yī)療影像等等,而且這些應(yīng)用實(shí)際上是呈現(xiàn)一個(gè)爆炸性的增長(zhǎng)。

深度學(xué)習(xí)在我們科研領(lǐng)域仍然保持指數(shù)級(jí)增長(zhǎng)的態(tài)勢(shì)。這里有兩張圖,第一張圖,左邊的線形圖是Arxiv網(wǎng)站有關(guān)機(jī)器學(xué)習(xí)的發(fā)表文章數(shù)量。在過去的十年里其數(shù)量基本呈指數(shù)增長(zhǎng)態(tài)勢(shì),右邊是摩爾定律,差不多每?jī)赡攴环?,前者的趨?shì)已經(jīng)超過摩爾定律的趨勢(shì),是非常驚人的數(shù)量增長(zhǎng)。

右圖更有意思了,NeurIPS是神經(jīng)網(wǎng)絡(luò)研究中極為重要的會(huì)議,每年投稿量也基本呈指數(shù)級(jí)增長(zhǎng),去年有將近700篇投稿量,而參會(huì)人數(shù)也在呈指數(shù)級(jí)增長(zhǎng),以至于在前年開始限制大會(huì)注冊(cè)的人數(shù)。有人畫了一張圖,如果允許大會(huì)注冊(cè)不受限,那么在2050年大會(huì)參賽的總?cè)藬?shù)將超過全世界人口的總數(shù),當(dāng)然這是大家開的一個(gè)玩笑。

機(jī)器學(xué)習(xí)在工業(yè)界的發(fā)展基本也是呈指數(shù)級(jí)增長(zhǎng)。2013年如果大家回去看英偉達(dá),當(dāng)時(shí)的年會(huì)還在講游戲,2014年的時(shí)候就完全轉(zhuǎn)到深度學(xué)習(xí)上了。2013年英偉達(dá)開始做人工智能聯(lián)盟,當(dāng)年只有100家企業(yè)入選。這個(gè)數(shù)字在2017年增長(zhǎng)到差不多2.7萬(wàn)家,也就是說四年的時(shí)間這個(gè)數(shù)字增長(zhǎng)了270倍。當(dāng)然,像谷歌、百度All in AI,內(nèi)部關(guān)于人工智能的項(xiàng)目數(shù)也有巨大增長(zhǎng)。

在神經(jīng)網(wǎng)絡(luò)技術(shù)70余年歷程當(dāng)中我們經(jīng)歷了很多發(fā)展,1940年代第一次提出電子腦概念,大家希望通過生物上的神經(jīng)網(wǎng)絡(luò)研究應(yīng)用到電子設(shè)計(jì)的領(lǐng)域,能夠?qū)崿F(xiàn)相應(yīng)的功能。

在1957年第一次發(fā)明了感知機(jī),基本上神經(jīng)元加上神經(jīng)突出的結(jié)構(gòu),它能夠完成簡(jiǎn)單的設(shè)計(jì),在后面的時(shí)間里我們逐漸加入了非線性,加入對(duì)于信號(hào)控制等更豐富的架構(gòu)。

第一個(gè)實(shí)際可應(yīng)用的神經(jīng)網(wǎng)絡(luò)是在六十年代發(fā)明的,是MLP多層感知機(jī),主要有多層神經(jīng)網(wǎng)絡(luò)能夠完成比較復(fù)雜的功能,這個(gè)架構(gòu)一直在被廣泛應(yīng)用,而且仍然是最廣泛應(yīng)用的神經(jīng)網(wǎng)絡(luò)的架構(gòu)。

1979年,日本人發(fā)明了Neocognitron(神經(jīng)認(rèn)知機(jī)模型),第一次把卷積結(jié)構(gòu)引入到神經(jīng)網(wǎng)絡(luò)里。大家經(jīng)常講Yann LeCun發(fā)明了卷積神經(jīng)網(wǎng)絡(luò),這實(shí)際上是有道理的,他是一個(gè)集大成者,但卷積結(jié)構(gòu)實(shí)際上是福島邦彥在1979年發(fā)明的。在之后發(fā)明了后向傳播。此前如果進(jìn)行網(wǎng)絡(luò)序列的時(shí)候,要從前開始序列,希望輸出能夠滿足我們的要求,大家知道這個(gè)是非常困難的。

在1986年發(fā)明了后向傳播,我們先看輸出差多少,根據(jù)這個(gè)差值再反過來(lái)去訓(xùn)練這個(gè)網(wǎng)絡(luò)。緊接著遇到很多問題,比如這種差別會(huì)越來(lái)越小,逐漸就消失了。還有比如說在那個(gè)年代,計(jì)算機(jī)比現(xiàn)在大概要慢10的7次方,很多想法都沒有辦法實(shí)現(xiàn)。

一直到2006年有一篇文章說,我們可以用GPU來(lái)進(jìn)行神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,從那個(gè)時(shí)候開始才真正進(jìn)入了人工智能時(shí)代。人工智能發(fā)展有三次主要的浪潮,每次浪潮都伴隨著基礎(chǔ)架構(gòu)的更新,比如在1950年我們第一次發(fā)明了計(jì)算機(jī),80年代末PC開始進(jìn)入各個(gè)行業(yè),尤其是研究領(lǐng)域,到現(xiàn)在包括GPU的廣泛應(yīng)用,作為算力的提升,對(duì)于存儲(chǔ)要求一直在不斷地增長(zhǎng)。

從右邊這張圖大家可以看到,藍(lán)色部分是我們網(wǎng)絡(luò)規(guī)模的增長(zhǎng)態(tài)勢(shì),但在過去幾年里無(wú)論是GPU也罷,存儲(chǔ)也罷,基本都是線性增長(zhǎng),在這個(gè)過程當(dāng)中差別會(huì)變得越來(lái)越大。

深度學(xué)習(xí)的硬件加速其實(shí)有很多不同的平臺(tái),比如說像GPU、FPGA,甚至有些公司在做ASIC設(shè)計(jì),還有其他比較新型的架構(gòu),都是不同的解決方案。這些解決方案各自有優(yōu)勢(shì)和劣勢(shì)。

比如說當(dāng)你用GPU的時(shí)候,它可能更普適化一些,但反過來(lái)計(jì)算能效可能就更低一些。而用我們的自研設(shè)計(jì),周期會(huì)變長(zhǎng),反過來(lái)講能效會(huì)越來(lái)越高。

一個(gè)比較明顯的例子就是英偉達(dá)的GPU,基本上是一個(gè)普適平臺(tái),現(xiàn)在絕大多數(shù)的人工智能算法訓(xùn)練都在GPU平臺(tái)上完成。另外一個(gè)例子谷歌的TPU,完全是為了業(yè)務(wù)場(chǎng)景設(shè)計(jì)的,因此TPU會(huì)在單一業(yè)務(wù)場(chǎng)景下,相比GPU會(huì)有更好的性能表現(xiàn),當(dāng)然功耗也非常高,每個(gè)芯片200瓦功耗。

傳統(tǒng)馮諾依曼體系在神經(jīng)網(wǎng)絡(luò)里被認(rèn)為不是十分有效,因?yàn)橛袔讉€(gè)問題,第一個(gè)問題是計(jì)算和存儲(chǔ)分開,導(dǎo)致存儲(chǔ)增長(zhǎng)態(tài)勢(shì)跟計(jì)算增長(zhǎng)態(tài)勢(shì)不一致,在過去這些年里隨著主頻不斷地提高,片上多核的引入,差別會(huì)一直在增大。

除此之外,我們沒辦法在固定時(shí)間內(nèi)將芯片上產(chǎn)生的熱量全部挪走,因此逐漸摒棄了越來(lái)越高的使用頻率,轉(zhuǎn)而在片上集成更多的核。當(dāng)然,對(duì)于單一線程由于并行度有限,對(duì)性能發(fā)展造成了一定的影響。

從存儲(chǔ)角度來(lái)講,我們遇到的最大問題是內(nèi)存墻,因?yàn)樵隈T諾依曼體系里計(jì)算和存儲(chǔ)是分開的。也就是說,當(dāng)需要一個(gè)數(shù)的時(shí)候,需要從存儲(chǔ)器里讀到運(yùn)算器里面。比如我有CPU做多核,有緩存,有一些憶阻器,到其他的存儲(chǔ)里面去。我們實(shí)際上分成三個(gè)部分,計(jì)算、存儲(chǔ)與其之間的通訊。

2016年有過一個(gè)統(tǒng)計(jì),真正在計(jì)算的時(shí)候,在加法器、乘法器這樣的運(yùn)算器里消耗功耗是非常低的,絕大部分功耗消耗在存儲(chǔ)本身的讀取上。大家緊接著想到兩種方法。一種是把片上存儲(chǔ)做大,另一種把計(jì)算下沉到存儲(chǔ)端,就是直接在存儲(chǔ)里做計(jì)算,而不把計(jì)算再挪到計(jì)算單元里去。好處就是避免了功耗較高的讀取,以及一些性能優(yōu)勢(shì)。

舉一個(gè)例子,傳統(tǒng)AI芯片也面臨一樣的問題,這是某家一線廠商AI芯片的版圖,可以看到雖然芯片這么大,但實(shí)際上里面真正用于計(jì)算的單元只有中間紅色那一塊(FU),其他部分要么是片上存儲(chǔ),要么是存儲(chǔ)控制單元。所以傳統(tǒng)AI芯片幾大技術(shù)特點(diǎn)實(shí)際上非常簡(jiǎn)單:

第一,增大乘法器的矩陣以便獲得更高的計(jì)算力,在同一時(shí)鐘下可以得到更多的計(jì)算能力。

第二,增加片上內(nèi)存的容量以便獲得更大的存儲(chǔ)空間,并減少對(duì)片外存儲(chǔ)器的讀寫次數(shù)。

第三,增加存儲(chǔ)器與有效單元之間的帶寬,更快地獲得數(shù)據(jù),我們都知道在AI芯片里數(shù)據(jù)是像流媒體一樣不斷進(jìn)來(lái)的。

第四,傳統(tǒng)存儲(chǔ)器不具備在電源關(guān)閉之后還保留數(shù)據(jù)的能力,也就是說把它關(guān)掉重開,所有數(shù)據(jù)都要從底層存儲(chǔ)系統(tǒng)中往上把它讀取進(jìn)來(lái)。

而這一切的技術(shù)特點(diǎn),當(dāng)你在往下走的時(shí)候都會(huì)帶來(lái)更大的芯片面積,更多的硬件成本和功耗。

深度神經(jīng)網(wǎng)絡(luò)的基本架構(gòu)與計(jì)算核心并不復(fù)雜,相對(duì)我們工程計(jì)算領(lǐng)域?qū)嶋H上只有兩個(gè),一個(gè)是卷積層,這個(gè)層基本上的架構(gòu)輸入層,連接輸入、輸出。第二個(gè)是全連接網(wǎng)絡(luò),每個(gè)節(jié)點(diǎn)都與輸出的節(jié)點(diǎn)連在一起。所以左邊我們認(rèn)為是計(jì)算占優(yōu),右邊是存儲(chǔ)占優(yōu),在實(shí)際計(jì)算過程中,都需要不斷地進(jìn)行優(yōu)化。

為什么存內(nèi)計(jì)算會(huì)適用于深度神經(jīng)網(wǎng)絡(luò)呢?存內(nèi)計(jì)算其實(shí)并不是新想法,在存儲(chǔ)器容量不斷增大過程中已經(jīng)有很多人在做這方面的工作了。但如果大家來(lái)看這個(gè)計(jì)算核心,它與傳統(tǒng)科學(xué)計(jì)算有一個(gè)本質(zhì)的區(qū)別,這個(gè)區(qū)別是做一個(gè)乘法,一般都是兩數(shù)相乘,這里面輸入是不斷地變化,我們?cè)谔幚硇碌恼Z(yǔ)音信號(hào),但當(dāng)我們的神經(jīng)網(wǎng)絡(luò)訓(xùn)練好后是固定在那個(gè)地方的。也就是說,訓(xùn)練好之后是不變的且存在某一個(gè)地方。

大家會(huì)發(fā)現(xiàn)這三個(gè)變量里,有一個(gè)是你要得到的變量,有兩個(gè)是輸入量,但兩個(gè)輸入里面有一個(gè)是不變的情況下,不變的這個(gè)量實(shí)際上就應(yīng)該被存在內(nèi)存里面,而且就應(yīng)該直接在這個(gè)地方進(jìn)行計(jì)算。

我們不需要把它挪到另外的地方,而科學(xué)計(jì)算兩個(gè)數(shù)都是隨時(shí)在變的,可能從存儲(chǔ)器里讀出來(lái),也可能是平時(shí)算的,這種情況下存儲(chǔ)計(jì)算就不是那么有優(yōu)勢(shì),這就是為什么存內(nèi)計(jì)算比較適用以于深度神經(jīng)網(wǎng)絡(luò)或者是未來(lái)更應(yīng)用廣泛的圖計(jì)算領(lǐng)域。

我們知道英偉達(dá)有很多的非易失性存儲(chǔ)器也可以達(dá)到這樣的效果,就像憶阻器,它其實(shí)就是天生可以做這件事情的一個(gè)器件。簡(jiǎn)單來(lái)講它就是一個(gè)納米器件,它的組織可以隨著加的電信號(hào)變化不斷地變化,來(lái)代表某一個(gè)神經(jīng)網(wǎng)絡(luò)里面的權(quán)重。

早先的存內(nèi)計(jì)算希望能通過這種新型存儲(chǔ)器完成邏輯單元,它的基本趨勢(shì)把這些輸入,主要是電流,當(dāng)它們相加的時(shí)候大于某個(gè)閾值,通過調(diào)整每一個(gè)上面的組織和閾值可以完成不同邏輯的運(yùn)算,這是一個(gè)例子。大家可以看到根據(jù)不同輸入的數(shù)目,以及不同閾值的選擇,我可以完成像邏輯學(xué)運(yùn)算,這是早期存內(nèi)計(jì)算的方式。

但在最近的應(yīng)用中,大家發(fā)現(xiàn)作為存內(nèi)計(jì)算,我們?nèi)绻阉鼞?yīng)用范圍縮小到像人工神經(jīng)網(wǎng)絡(luò)范圍,實(shí)際上我們可以用更簡(jiǎn)單的架構(gòu)來(lái)完成。我們知道基本的計(jì)算單元在神經(jīng)網(wǎng)絡(luò)里面就一個(gè)向量跟一個(gè)矩陣相乘,而這個(gè)向量可以通過輸入的電信號(hào)來(lái)表示,矩陣可以通過互聯(lián)結(jié)構(gòu),在每一個(gè)點(diǎn)上的組織變化來(lái)表示。

當(dāng)我有一個(gè)輸入的電壓,乘上互聯(lián)結(jié)構(gòu)上每一個(gè)點(diǎn)的電導(dǎo),再把它的相加得到輸出的電流,實(shí)際上就是一個(gè)向量和矩陣相乘的結(jié)果,這是非常有革命性意義的一個(gè)設(shè)計(jì),最早是惠普提出的。

根據(jù)這個(gè)想法我們可以做很多的應(yīng)用,比如根據(jù)憶阻器交叉互聯(lián)結(jié)構(gòu)可以做深度學(xué)習(xí)的加速器。在每一個(gè)框架下面都是這樣的互聯(lián)結(jié)構(gòu),有輸入、輸出的變化。同時(shí),一些存內(nèi)架構(gòu)允許你把神經(jīng)網(wǎng)絡(luò)存在里面時(shí),不需要把它挪到別的地方,然后通過計(jì)算直接得到輸出,不需要經(jīng)過任何像傳統(tǒng)CPU、GPU的過程。

當(dāng)然,網(wǎng)絡(luò)參數(shù)組織形勢(shì)可以是非常多樣的,比如說在做卷積的時(shí)候,全部都展開,放在不同的行和列之間。而且中間有一些交叉,這些交叉可以極大地提高變形度,當(dāng)然會(huì)有一些數(shù)字不同的拷貝,同時(shí)去進(jìn)行運(yùn)算。

我們剛才講到可以提高并行度,實(shí)際上并行度和功耗本身是一對(duì)可調(diào)的參數(shù),并行度越高,功耗就越大,反過來(lái),計(jì)算程度越短,實(shí)際上在設(shè)計(jì)上帶來(lái)了很多的靈活性。

除此之外,最近的一些研究,大家在關(guān)于數(shù)據(jù)流的優(yōu)化方面,簡(jiǎn)單講如果有這樣的架構(gòu),在輸入過程中很多數(shù)據(jù)可以重復(fù)使用,我們可以通過重復(fù)使用降低數(shù)據(jù)本身的管理要求,提高并行度。比如可以在更小的顆粒度上去做這樣的數(shù)據(jù)并行管理,使得一個(gè)數(shù)據(jù)進(jìn)來(lái)之后可以同時(shí)滿足不同的計(jì)算要求,使得計(jì)算效能能夠成倍的提高,當(dāng)然也提高功耗。

其它適合存內(nèi)計(jì)算的應(yīng)用還有很多,比如像脈沖神經(jīng)網(wǎng)絡(luò),剛才講原來(lái)數(shù)字實(shí)際上是用電壓或者電流來(lái)表示的,但是在人的神經(jīng)網(wǎng)絡(luò)里面實(shí)際上所有的數(shù)據(jù)都是通過脈沖來(lái)表示的。脈沖本身幅度,相互之間的時(shí)間不同關(guān)系,甚至包括出現(xiàn)的頻率本身都是可以用來(lái)做編碼的,這種編碼極大地豐富了計(jì)算之間的靈活性,使得資源的能效有所提高。

我們也知道神經(jīng)網(wǎng)絡(luò)實(shí)際上是圖計(jì)算的一種,本身就是一個(gè)拓?fù)浣Y(jié)構(gòu),同樣的這種架構(gòu)延伸到圖計(jì)算,也是非常熱的關(guān)于存內(nèi)計(jì)算的研究領(lǐng)域。這里面有一個(gè)簡(jiǎn)單的例子,當(dāng)你的輸入脈沖情況下并不需要通過模擬信號(hào)到輸入信號(hào)的轉(zhuǎn)化,而是用更多的像做積分再去產(chǎn)生新的數(shù)字,這樣脈沖信號(hào)本身很有點(diǎn)類似人的神經(jīng)網(wǎng)絡(luò),在電路上做一些相應(yīng)的變化。

我們?cè)谶^去的六七年里,基本每半年都會(huì)推出不同的芯片,所有的架構(gòu)都有過嘗試,這是其中的一些關(guān)于憶阻器的芯片,還有基于傳統(tǒng)芯片,今天時(shí)間關(guān)系沒有具體講。

最近6月份在日本也發(fā)表了最新的AI芯片參數(shù),基于存內(nèi)計(jì)算的。大家可以看到加粗的那行,在基礎(chǔ)功耗,尤其是在計(jì)算集成度上實(shí)際上是有非常顯著優(yōu)勢(shì)的,這也就意味著這種技術(shù)在未來(lái)很快進(jìn)入到應(yīng)用里去。

多講一個(gè)關(guān)于芯片設(shè)計(jì)的問題,我知道在座的各位專家和老師大家都是做系統(tǒng)的比較多,做系統(tǒng)的周期比較長(zhǎng),做芯片周期還會(huì)更長(zhǎng)一點(diǎn),大家知道一個(gè)芯片的設(shè)計(jì)周期從設(shè)計(jì)驗(yàn)證到制造校驗(yàn),到規(guī)格設(shè)計(jì)等會(huì)持續(xù)大概1-2年的時(shí)間?,F(xiàn)在我們遇到最大的問題,硬件設(shè)計(jì)往往跟軟件的設(shè)計(jì)不匹配。

比如谷歌TPU,大家發(fā)現(xiàn)在谷歌TPU從 1.1-3.0版本升級(jí)時(shí)間是一年左右,但實(shí)際在神經(jīng)網(wǎng)絡(luò)開發(fā)架構(gòu)上經(jīng)歷了7個(gè)左右的版本。換句話說,芯片本身對(duì)于像神經(jīng)網(wǎng)絡(luò)這樣的應(yīng)用前瞻性知識(shí)要求是非常高的。

全球憶阻器產(chǎn)業(yè)分布或者說是存內(nèi)計(jì)算分布其實(shí)也很廣。大家現(xiàn)在能看到,基本每個(gè)國(guó)家都有在做,以不同的形式在做。今天只是用憶阻器本身做一個(gè)例子。

大家要展望一下關(guān)于存內(nèi)計(jì)算技術(shù)對(duì)未來(lái)的應(yīng)用,我覺得存內(nèi)計(jì)算包括機(jī)器學(xué)習(xí)在內(nèi)很多新型計(jì)算里面都展現(xiàn)出了巨大的潛力,我所說的新型計(jì)算包括機(jī)器學(xué)習(xí)等等。

隨著工業(yè)水平不斷地進(jìn)步,不斷增長(zhǎng)的存儲(chǔ)密度為存內(nèi)計(jì)算未來(lái)發(fā)展鋪平了道路?,F(xiàn)在已知各個(gè)公司在28納米、22納米,甚至有些在10納米都已經(jīng)有了相應(yīng)的布局,這些布局不僅僅是在存儲(chǔ),也為存內(nèi)計(jì)算在未來(lái)發(fā)展鋪平了道路。

存內(nèi)計(jì)算在功能上的多樣性和可重構(gòu)性帶來(lái)了非常廣泛的應(yīng)用,雖然基礎(chǔ)的設(shè)計(jì)可能會(huì)比較簡(jiǎn)單,憑借非一致性以及對(duì)電路設(shè)計(jì)本身可適應(yīng)性,實(shí)際上對(duì)很多的應(yīng)用都會(huì)事先把應(yīng)用想辦法映射到硬件上,所以這可能是傳統(tǒng)存儲(chǔ)器不具備的。

最后,我們覺得存內(nèi)計(jì)算在未來(lái)兩三年會(huì)越來(lái)越成熟,很多的公司研發(fā)也會(huì)有大規(guī)模投入,并逐漸過渡到新型存儲(chǔ)器的設(shè)計(jì)形態(tài),這是我們對(duì)于未來(lái)的預(yù)估,基本上就是這樣,謝謝大家!

分享到

崔歡歡

相關(guān)推薦