TPU深入學習2 How TPU works

2022-07-07 08:21:12 字數 2478 閱讀 5290

執行受過訓練的神經網路以使用標籤對資料進行分類或估計某些缺失值或將來值的過程稱為推理。tpu的目標是加速神經網路的推理環節。為了進行推理,神經網路中的每個神經元都進行以下計算:

1、將輸入資料(x)乘以權重(w)以表示訊號強度

2、新增結果彙總神經元的狀態為單精度值

3、應用啟用函式(f)(例如relu,sigmoid,tanh或其他)來調節人工神經元的活動。

tpu指令集

tpu選擇了複雜指令集計算機(cisc)樣式作為tpu指令集的基礎,cisc設計著重於執行高階指令。

tpu定義了十二個專門為神經網路推理設計的高階指令,來控制矩陣乘法器單元(mxu),統一緩衝區(ub)和啟用單元(au)如何進行操作。

tpu指令

功能read_host_memory

從記憶體中讀取資料

read_weights

從記憶體讀取權重

matrixmultiply/convolve

將資料和權重相乘或卷積,累加結果

activate

應用啟用功能

write_host_memory

將結果寫入記憶體

tpu程式設計

tpu設計封裝了神經網路計算的本質,並且可以針對各種神經網路模型進行程式設計。

為了對其進行程式設計,tpu建立了乙個編譯器和軟體堆疊,該堆疊將tensorflow圖中的api呼叫轉換為tpu指令。

從tensorflow到tpu的軟體堆疊如下圖:

神經網路**通常不需要使用32位甚至16位數字的浮點計算精度。稍作努力,便可以使用8位整數來計算神經網路**,並且仍然保持適當的準確性。

量化是一種優化技術,它使用8位整數代替32位甚至16位數字的浮點數 來近似介於預設的最小值和最大值之間的任意值。

tensorflow中的量化如下圖:

量化是減少神經網路**成本的強大工具,並且相應減少記憶體使用也很重要,尤其是對於移動和嵌入式部署。

能夠使用整數而不是浮點運算,可以大大減少tpu的硬體占用空間和能耗。乙個tpu包含65,536個8位整數乘法器。

矩陣乘法器單元上並行處理————對於tpu,google將其矩陣乘法器單元(mxu)設計為矩陣處理器,可以在乙個時鐘週期內處理數十萬次運算(即矩陣運算)。

(cpu為標量處理器,gpu為向量處理器,tpu為矩陣處理器)

為了實現這種大型矩陣處理器,mxu具有與典型的cpu和gpu截然不同的架構,稱為脈動陣列

cpu和gpu經常花費精力來每次操作訪問多個暫存器。脈動陣列將多個alu鏈結在一起,從而重用讀取單個暫存器的結果。

乙個輸入矩陣乘以權重矩陣的例子如下:

把權重矩陣存在脈動矩陣中,則輸入矩陣乘以脈動矩陣的權重矩陣的過程如下:

可見,從記憶體或暫存器中讀取的資料,以及alu計算結果,直接在alu之間傳遞,資料縱向傳遞,計算結果橫向傳遞並進行累加,從而避免了存入以及讀取記憶體的過程。

alu接收縱向傳遞來的資料,與權重相乘,相乘結果與橫向傳遞來的資料相加,相乘相加的結果繼續橫向傳遞,而縱向資料使用完後繼續縱向傳遞。

實際上,tpu的矩陣乘法單元如下圖:

可見,在該矩陣乘法單元中,資料橫向從左到右傳遞,乘法和縱向從上到下傳遞

深入了解google的第乙個tensor處理單元(tpu)

深入學習之函式執行2

after you 23 40 56 function fn var f fn f 10 21 f 20 32 fn 10 先執行fn返回乙個小的函式,然後把小的函式緊接著在執行,並且給n傳遞引數值為10 fn 20 vm4161 4 21 vm4161 4 32 vm4161 4 21 vm416...

UIApplication深入學習

新建乙個任意型別的ios應用工程,加入我們在class prefix輸入是tc,我們可以看到工程中生成乙個類 在main函式中,autoreleasepool 函式中 說明 當應用程式將要入非活動狀態執行,在此期間,應用程式不接收訊息或事件。比如來 了。說明 當應用程式入活動狀態執行,這個剛好跟上面...

深入學習CSS

什麼是css?在之前的這篇文章中已經介紹了初步的介紹,詳細請看 div加css進一步講解了css中的內容,先總結如下圖 其實在實際開發中,我們通常採用是外部樣式的匯入,這樣做的好處是對於很對有同樣設計樣式的頁面可以實現樣式的共享,這樣我們不僅僅可以節省了大量的時間,並且也方便我們可以靈活的呼叫的樣式...