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

整理速記如下(未經演講人確認)。

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

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

深度學習在我們科研領域仍然保持指數級增長的態勢。這里有兩張圖,第一張圖,左邊的線形圖是Arxiv網站有關機器學習的發表文章數量。在過去的十年里其數量基本呈指數增長態勢,右邊是摩爾定律,差不多每兩年翻一番,前者的趨勢已經超過摩爾定律的趨勢,是非常驚人的數量增長。

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

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

在神經網絡技術70余年歷程當中我們經歷了很多發展,1940年代第一次提出電子腦概念,大家希望通過生物上的神經網絡研究應用到電子設計的領域,能夠實現相應的功能。

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

第一個實際可應用的神經網絡是在六十年代發明的,是MLP多層感知機,主要有多層神經網絡能夠完成比較復雜的功能,這個架構一直在被廣泛應用,而且仍然是最廣泛應用的神經網絡的架構。

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

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

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

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

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

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

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

傳統馮諾依曼體系在神經網絡里被認為不是十分有效,因為有幾個問題,第一個問題是計算和存儲分開,導致存儲增長態勢跟計算增長態勢不一致,在過去這些年里隨著主頻不斷地提高,片上多核的引入,差別會一直在增大。

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

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

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

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

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

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

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

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

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

深度神經網絡的基本架構與計算核心并不復雜,相對我們工程計算領域實際上只有兩個,一個是卷積層,這個層基本上的架構輸入層,連接輸入、輸出。第二個是全連接網絡,每個節點都與輸出的節點連在一起。所以左邊我們認為是計算占優,右邊是存儲占優,在實際計算過程中,都需要不斷地進行優化。

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

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

我們不需要把它挪到另外的地方,而科學計算兩個數都是隨時在變的,可能從存儲器里讀出來,也可能是平時算的,這種情況下存儲計算就不是那么有優勢,這就是為什么存內計算比較適用以于深度神經網絡或者是未來更應用廣泛的圖計算領域。

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

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

但在最近的應用中,大家發現作為存內計算,我們如果把它應用范圍縮小到像人工神經網絡范圍,實際上我們可以用更簡單的架構來完成。我們知道基本的計算單元在神經網絡里面就一個向量跟一個矩陣相乘,而這個向量可以通過輸入的電信號來表示,矩陣可以通過互聯結構,在每一個點上的組織變化來表示。

當我有一個輸入的電壓,乘上互聯結構上每一個點的電導,再把它的相加得到輸出的電流,實際上就是一個向量和矩陣相乘的結果,這是非常有革命性意義的一個設計,最早是惠普提出的。

根據這個想法我們可以做很多的應用,比如根據憶阻器交叉互聯結構可以做深度學習的加速器。在每一個框架下面都是這樣的互聯結構,有輸入、輸出的變化。同時,一些存內架構允許你把神經網絡存在里面時,不需要把它挪到別的地方,然后通過計算直接得到輸出,不需要經過任何像傳統CPU、GPU的過程。

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

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

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

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

我們也知道神經網絡實際上是圖計算的一種,本身就是一個拓撲結構,同樣的這種架構延伸到圖計算,也是非常熱的關于存內計算的研究領域。這里面有一個簡單的例子,當你的輸入脈沖情況下并不需要通過模擬信號到輸入信號的轉化,而是用更多的像做積分再去產生新的數字,這樣脈沖信號本身很有點類似人的神經網絡,在電路上做一些相應的變化。

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

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

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

比如谷歌TPU,大家發現在谷歌TPU從 1.1-3.0版本升級時間是一年左右,但實際在神經網絡開發架構上經歷了7個左右的版本。換句話說,芯片本身對于像神經網絡這樣的應用前瞻性知識要求是非常高的。

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

大家要展望一下關于存內計算技術對未來的應用,我覺得存內計算包括機器學習在內很多新型計算里面都展現出了巨大的潛力,我所說的新型計算包括機器學習等等。

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

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

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

未經允許不得轉載:存儲在線-存儲專業媒體 » 美國杜克大學教授陳怡然:人工智能應用開發的PIM解決方案
分享到

崔歡歡

相關推薦

精品国产午夜肉伦伦影院,双性老师灌满浓jing上课h,天天做天天爱夜夜爽,攵女乱h边做边走