內存計算(In-Memory Computing, IMC) 是一種基于RAM數據存儲和索引的技術,由MIT研究組提出,其主要目的是加速卷積計算。 我們知道,卷積計算可以擴展為加權累加計算。從另一個角度看,其實是多個數字的加權平均。因此,該電路實現了電荷疇的加權平均。權重(1位)存儲在SRAM中,輸入數據(7位數字信號)通過DAC變為模擬信號。根據SRAM中對應的權重,輸出在模擬域中乘以1或-1,在模擬域中求平均值,最后由ADC作為數字信號讀出。具體地說,由于乘法的權重是1比特(1或-1),所以可以簡單地通過使用開關和差分線來控制它。如果權重為1,則差分線一側的電容充電到所需的輸出值。否則,讓差分線的另一端充電到這個值。至于平均值,將電荷域中的幾條差分線連接在一起。 當然,內存計算的電路不止一個,計算精度也不限于1位。但是我們可以從上面的例子看出,內存計算的核心思想一般是將計算轉化為加權計算。將權重存儲在存儲單元中,然后對存儲器的核心電路(例如讀出電路)進行修改。以至于讀取的過程就像是輸入數據和權重在模擬域相乘的過程,也就是卷積。因為卷積是AI和其他計算的核心部分,所以內存計算可以廣泛應用于此類應用。內存計算使用模擬電路進行計算,這是與傳統數字邏輯計算的區別。 在更傳統的架構中,有一些乘法累加電路(MAC)用于張量數學,尤其是矩陣乘法。這些架構試圖以將權重和激活移動到適當位置的方式來安排MAC。激活是從先前的神經網絡層計算的。乘法通常涉及激活和權重,兩者都必須移動到相乘的地方。因此,如果權重存儲在存儲器中,則存儲器可以通過激活來訪問,以獲得乘法和累加。與實際內存的唯一區別在于,內存計算一次連接所有字線,而不是對輸入進行解碼以僅獲得一條字線。 嘗試進入模擬域,將存儲單元作為模擬單元而不是數字單元對待,以降低消耗。我們已經有了在推理機前端使用模擬的方法。這就是內存計算。因此,我們采用數字數據,使用DAC將其轉換為模擬值,然后用這些模擬內容驅動一個存儲器,以獲得模擬位線輸出,最后使用ADC將結果轉換回數字格式。然而,內存計算仍處于探索階段,有許多具體的實現方法可以研究,目前有三種類型:RRAM、閃存、SRAM和DRAM。 基于RRAM RRAM是最常見的方法,因為它通過將歐姆定律應用于一系列電阻而易于使用,但它仍然存在依賴RRAM的問題。編程和電阻之間的關系是非線性的,這需要做更多的工作來為市場制造RRAM存儲器中可行的計算電路。所以只是一個想法,具體方案還在研究中。 基于Flash NOR閃存具有更傳統的字線/位線結構。它既是電阻性的又是電容性的。通常,存儲單元是導通或截止的晶體管。然而,如果它是部分導電的,它可以用作電阻器。電阻取決于存儲單元(電容器)的浮柵上的電荷量。當一直運行時,電池將傳導至其最大容量。在此過程中,它根本不導電,但是,它可以被部分編程。有一個問題是,你不能精確地控制電子的數量。此外,對任何數字的響應將隨著過程和溫度以及其他變量而變化。 兩家公司正在研究這種方法。由于收購了SST,Microchip擁有了他們的memBrain array,Mythic是一家初創公司,致力于使用閃存進行內存計算的推理引擎。兩家公司都表示,他們正在使用廣泛的校準技術來應對這種變化。 另一個問題是,隨著時間的推移,閃存電池會失去電子。電子會四處流動,這就帶來了一個有趣的話題:在這種類型的存儲器陣列上,數據保持力和持久性會是什么樣的? 從應用角度看,要看是要用在云計算還是邊緣推理機。在邊緣,它可以在設備的整個生命周期中執行某些固定的推理功能。因此,如果有足夠多的數組,那么您將首次加載權重,并且不再需要對其進行編程(除非您進行更新),因為閃存是非易失性的。盡管您仍然需要移動激活,但是沒有必要移動權重,權重將永久存儲在數組中。這將表明數據持久性(在累積損壞將電子泄漏加速到不可接受的水平之前器件可以被編程的次數)并不重要,它只需要編程一次。 相比之下,在云應用程序中,設備可能會作為通用計算資源共享,因此這需要為每個新應用程序重新編程。這意味著電池壽命在云中變得更加重要。Mythic聲稱有一個10K寫周期,并觀察到即使它每天都被重新編程,也將持續10年以上。 如果為它設置一個模擬值并在單元格中使用一個模擬值,那么理論上,每個電子都是重要的。但是,如果有足夠的電子遷移,就需要刷新存儲單元,或者以某種方式補償電子的變化。因為今天同樣的模擬輸入會產生與一年前不同的結果。校準電路還可以處理一些老化問題。然而,對于數據保留,Mythic表示他們會定期更新存儲在閃存中的重量值。這將使持久性而不是數據保留成為主要的磨損機制。微芯片表示,其數據保留時間為TBD,但它可能會每季度或每年對設備進行重新編程,以恢復該單元。 所以他們需要大量高質量的ADC和DAC來保持信噪比在精確推理的范圍內,這是設計工作的重點。Mythic聲稱,他們提供了一種新穎的ADC,以便微芯片可以共享它,以減少所需的數量。雖然ADC確實會消耗能量,但它也大大降低了整體系統功耗。 基于SRAM 這個想法來自普林斯頓大學Hot Chips的一次講座。根據定義,SRAM是一個雙穩態單元。因此,它不能處于中間狀態,這應該如何處理?就面積和功耗而言,需要校正的DAC和ADC比陣列多。 這個問題的重點歸結為如何模擬的問題。他們解釋說,這種方法使用一個以上的位線進行計算。由于單位仍然是一個數字值,它需要幾個位線來執行計算。位線可以被分割,不同的組執行不同的乘法。下圖說明了這一點。 一次8個輸入,因此輸入向量被切片,并且執行幾次連續的乘法以獲得最終結果。位線電荷沉積在電容器上。準備讀取時,電荷被讀出并發送至ADC,以便轉換回數字域。它們的基本單元結構如下: 這些電容器可能會影響芯片尺寸問題,但他們表示,電池上方的金屬可以使用。當然,現在一個單元比標準的6T SRAM單元大80%(即使沒有電容器),但他們說他們的整體電路仍然比基于標準數字實現的所需電路小得多。此外,由于它們的基本陣列操作仍然是數字形式,因此對噪聲和變化不太敏感,這意味著它們的ADC可以更簡單,功耗更低。 這種想法是指不使用大量的電力來獲取DRAM內容,并以某種方式將計算納入CPU或其他計算結構,并直接在DRAM芯片上運行,這就是UPMEM所做的。一個簡單的處理器建立在DRAM芯片上,該架構也不會與Xeon芯片競爭,他們稱之為“內存處理”或PIM。 他們不是將數據轉化為計算,而是將計算轉化為數據。運行時由DRAM芯片中的CPU執行。也就是說,不需要將數據移動到DRAM芯片之外的任何位置,只需將計算結果發送回主機系統。此外,由于最大似然計算通常涉及大量的簡化,計算所需的數據較少。盡管這確實需要對DRAM進行一些小的改動,但它們并沒有改變制造工藝。在這種情況下,標準DRAM模塊將為分布式計算提供多種機會。同時,使用這個函數編寫程序也變得復雜起來。 他們表示,使用PIM offload的服務器的功耗是連接到沒有PIM的DRAM模塊的標準服務器的兩倍。然而,由于吞吐量是20倍,它仍然為他們提供了10倍的能效優勢。此外,這種方法有助于抵御側信道安全攻擊。因此,最初包含在一個或多個CPU中的一組計算線程流向DRAM。因此,有必要檢查所有的DRAMs并以某種方式找出線程在哪里,但這將是一項艱巨的任務。 由于人們早就認識到了“內存墻”問題,具有高能效比的內存計算引起了人們的關注。對于內存計算,內存特性通常決定了內存計算的效率。因此,新內存的改進通常會推動內存計算的發展。例如,最近流行的ReRAM使用電阻調制來存儲數據,因此每位的讀出使用電流信號而不是傳統的電荷信號。這樣,電流累積就是一個非常自然的操作(直接把幾個電流組合起來,達到電流之和,甚至不需要額外的電路)。也就是說ReRAM非常適合內存計算。 用于內存計算的芯片產品預計有兩種形式。第一種形式是作為具有計算功能的內存IP出售,這種存儲器IP可以是傳統的SRAM,或者諸如eFlash、ReRAM、MRAM和PCM之類的新存儲器。第二種形式是基于內存計算直接構建AI加速芯片,例如Mythic計劃制造基于閃存的PCIe加速卡,即通過PCIe接口與主CPU訪問數據,權重數據存儲在記憶芯片上,當數據發送到IPU時直接讀出計算結果。(張嘉汐,產通發布)
|