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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

分享到

崔歡歡

相關(guān)推薦