介紹
張量處理單元( Tensor Processing Unit, TPU ) 是谷歌專門為神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)開發(fā)的人工智能加速器 專用集成電路(ASIC) ,特別是使用谷歌自己的TensorFlow軟件,。谷歌于 2015 年開始在內(nèi)部使用 TPU,,并于 2018 年將它們作為其云基礎(chǔ)設(shè)施的一部分并通過提供較小版本的芯片出售給第三方使用。
張量處理單元于 2016 年 5 月在Google I/O上宣布:當(dāng)時(shí)該公司表示 TPU 已經(jīng)在其數(shù)據(jù)中心內(nèi)使用了一年多,。該芯片專為 Google 的TensorFlow框架設(shè)計(jì),,用于神經(jīng)網(wǎng)絡(luò)等機(jī)器學(xué)習(xí)應(yīng)用。
與圖形處理單元相比,,它設(shè)計(jì)用于大量低精度計(jì)算(例如低至8 位精度) ,,每焦耳有更多的輸入/輸出操作,無需用于光柵化/紋理映射的硬件,。根據(jù)Norman Jouppi的說法,, TPU ASIC安裝在散熱器組件中,該組件可以安裝在數(shù)據(jù)中心機(jī)架內(nèi)的硬盤驅(qū)動(dòng)器插槽中,。不同類型的處理器適合不同類型的機(jī)器學(xué)習(xí)模型,,TPU 非常適合CNN而 GPU 對(duì)一些全連接的神經(jīng)網(wǎng)絡(luò)有長處,而 CPU 對(duì)RNN有長處,。
經(jīng)過幾年的發(fā)展,,TPU已經(jīng)發(fā)布了四個(gè)版本,下面是其發(fā)展歷程:
詳細(xì)介紹:<【科普】什么是TPU?>
接下來介紹一些TPU項(xiàng)目,。
tinyTPU
?https://github.com/jofrfu/tinyTPU
該項(xiàng)目的目的是創(chuàng)建一個(gè)與谷歌的張量處理單元具有相似架構(gòu)的機(jī)器學(xué)習(xí)協(xié)處理器,。該實(shí)現(xiàn)的資源可定制,可以以不同的尺寸使用以適應(yīng)每種類型的 FPGA,。這允許在嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備中部署該協(xié)處理器,,但也可以擴(kuò)大規(guī)模以用于數(shù)據(jù)中心和高性能機(jī)器。AXI 接口允許以多種組合方式使用,。對(duì) Xilinx Zynq 7020 SoC 進(jìn)行了評(píng)估,。下面的鏈接中是使用vivado進(jìn)行使用的一個(gè)DEMO:
?https://github.com/jofrfu/tinyTPU/blob/master/getting_started.pdf
同時(shí),該項(xiàng)目也是一片論文的驗(yàn)證項(xiàng)目,,論文地址:
?https://reposit./bitstream/20.500.12738/8527/1/thesis.pdf
性能
使用 MNIST 數(shù)據(jù)集訓(xùn)練的樣本模型在不同大小的 MXU 上進(jìn)行了評(píng)估,,頻率為 177.77 MHz,理論性能高達(dá) 72.18 GOPS,。然后將實(shí)際時(shí)序測(cè)量與傳統(tǒng)處理器進(jìn)行比較:
177.77 MHz 的張量處理單元:
Matrix Width N | 6 | 8 | 10 | 12 | 14 |
---|---|---|---|---|---|
Instruction Count | 431 | 326 | 261 | 216 | 186 |
Duration in us (N input vectors) | 383 | 289 | 234 | 194 | 165 |
Duration per input vector in us | 63 | 36 | 23 | 16 | 11 |
下面是其他處理器的對(duì)比結(jié)果:
Processor | Intel Core i5-5287U at 2.9 GHz | BCM2837 4x ARM Cortex-A53 at 1.2 GHz |
---|---|---|
Duration per input vector in us | 62 | 763 |
Free-TPU
?https://github.com/embedeep/Free-TPU
編譯好的BOOTbin,,因?yàn)門PU和引腳沒關(guān)聯(lián),所以可以直接進(jìn)行使用驗(yàn)證,。
?https://github.com/embedeep/Free-TPU-OS
描述
Free TPU是用于深度學(xué)習(xí) EDGE 推理的商業(yè) TPU 設(shè)計(jì)的免費(fèi)版本,,可以部署在任何 FPGA 設(shè)備上,包括 Xilinx Zynq-7020 或 Kintex7-160T(這兩個(gè)都是生產(chǎn)的好選擇),。實(shí)際上,,不僅是 TPU 邏輯設(shè)計(jì), Free TPU還包括支持所有 caffe 層的 EEP 加速框架,,可以在任何 CPU 上運(yùn)行(如 Zynq-7020 的 ARM A9 或 INTEL/AMD),。TPU 和 CPU 在深度學(xué)習(xí)推理框架的計(jì)劃下相互協(xié)作(任何交替順序)。
系統(tǒng)結(jié)構(gòu)
對(duì)比
在用戶看來,,F(xiàn)ree-TPU和EEP-TPU功能相同,,但推理時(shí)間不同。
這是一個(gè)極其完整的項(xiàng)目,關(guān)于怎么運(yùn)行,,怎么調(diào)用都有很詳細(xì)的步驟,,這里就不再贅述了,更多詳情,,請(qǐng)?jiān)L問:
?https://www.
SimpleTPU
?https://github.com/cea-wind/SimpleTPU
張量處理單元旨在加速矩陣乘法,,特別是對(duì)于多層感知器和卷積神經(jīng)網(wǎng)絡(luò)。
此實(shí)現(xiàn)主要遵循 Google TPU Version 1,,該架構(gòu)在
?https:///ftp/arxiv/papers/1704/1704.04760.pdf
中有介紹,。
主要特點(diǎn)
Simple TPU 的主要特性包括
- Int8 乘法和 Int32 累加器
- 基于 VLIW 的并行指令
- 基于向量架構(gòu)的數(shù)據(jù)并行
以下是 Simple TPU 可以支持的一些操作。
資源占用情況
雖然該工程比較完整,,后續(xù)也有DEMO演示,,但是該工程使用HLS制作的,詳細(xì)信息可以查看下面的網(wǎng)址
?https://www.cnblogs.com/sea-wind/p/10993958.html
tiny-tpu
?https://github.com/cameronshinn/tiny-tpu
谷歌的TPU架構(gòu):
Tiny TPU是基于 FPGA 的 Google張量處理單元的小規(guī)模實(shí)現(xiàn),。該項(xiàng)目的目標(biāo)是了解加速器設(shè)計(jì)從硬件到軟件的端到端技術(shù),,同時(shí)破譯谷歌專有技術(shù)的低層次復(fù)雜性。在此過程中,,我們探索了小規(guī)模,、低功耗 TPU 的可能性。
該項(xiàng)目在 Quartus 15.0 上綜合并編程到 Altera DE1-SoC FPGA 上,。
更多詳細(xì)信息:
?https://github.com/cameronshinn/tiny-tpu/blob/master/docs/report/report.pdf
TPU-Tensor-Processing-Unit
?https://github.com/leo47007/TPU-Tensor-Processing-Unit
介紹
在有兩個(gè)矩陣需要做矩陣乘法的場(chǎng)景下,,矩陣A(選擇權(quán)重矩陣)與矩陣B(選擇矩陣)相,每一個(gè)一個(gè)都是 32x32,。最后他們開始做每個(gè)矩陣的乘法,,每個(gè)矩陣的因素將首先轉(zhuǎn)換成一個(gè)順序輸入 TPU 中,輸入其特定的矩陣,,然后再將這些單元最多向連接的方向輸入,。在下一個(gè)周期中,每個(gè)單元將其權(quán)重和數(shù)據(jù)方向賦予下一個(gè)格,。從左到右,。
因?yàn)檫@個(gè)項(xiàng)目有中文的詳細(xì)介紹,所以就不過多贅述了,。
?https://.comzhihuzhuanlan./p/26522315
Systolic-array-implementation-in-RTL-for-TPU
?https://github.com/abdelazeem201/Systolic-array-implementation-in-RTL-for-TPU
如下圖所示,,在有兩個(gè)矩陣需要做矩陣乘法的場(chǎng)景下,矩陣A(命名權(quán)重矩陣)與矩陣B(命名數(shù)據(jù)矩陣)相乘,,每個(gè)矩陣為8x8,。一旦他們開始做矩陣乘法,兩個(gè)矩陣的這些系數(shù)將首先轉(zhuǎn)換成一個(gè)順序輸入到 TPU 中,,然后輸入到每個(gè)特定的隊(duì)列中,。然后這些隊(duì)列將最多向其連接的單元輸出 8 個(gè)數(shù)據(jù),這些單元將根據(jù)它接收到的權(quán)重和數(shù)據(jù)進(jìn)行乘法和加法。并且在下一個(gè)周期中,,每個(gè)單元格將其權(quán)重和數(shù)據(jù)轉(zhuǎn)發(fā)給下一個(gè)單元格,。權(quán)重從上到下,數(shù)據(jù)從左到右,。
該項(xiàng)目雖然完成了相關(guān)的目的,,但是只是完成了相關(guān)工作,,實(shí)際使用時(shí)需要進(jìn)行一些優(yōu)化,。
super_small_toy_tpu
?https://github.com/dldldlfma/super_small_toy_tpu
如果說上面幾個(gè)TPU比較復(fù)雜,那么這個(gè)就可以用“精簡”來形容了,。
整個(gè)代碼非常精簡,,適合入門想研究TPU的人。
AIC2021-TPU
?https://github.com/charley871103/TPU
?https://github.com/Oscarkai9139/AIC2021-TPU
?https://github.com/hsiehong/tpu
這個(gè)項(xiàng)目是AIC2021-TPU,,類似的項(xiàng)目有很多,,都是理論研究的項(xiàng)目,和上面的項(xiàng)目一樣都是非常非常適合入門研究的人員,,里面的理論都是極其詳細(xì)的,。
systolic-array
?https://github.com/Dazhuzhu-github/systolic-array
verilog實(shí)現(xiàn)TPU中的脈動(dòng)陣列計(jì)算卷積的module
data為實(shí)驗(yàn)數(shù)據(jù)
source為源碼
testbench 測(cè)試各個(gè)模塊用的testbench
data-preprocessing 原本是要寫將卷積操作用python預(yù)先imtocol操作的,但后來直接使用matlab生成數(shù)據(jù)進(jìn)行測(cè)試了
tpu_v2
?https://github.com/UT-LCA/tpu_v2
項(xiàng)目沒有多余的介紹,,整個(gè)項(xiàng)目是基于Altera-DE3設(shè)計(jì),,EDA工具是Quartus II。
google-coral-baseboard
?https://github.com/antmicro/google-coral-baseboard
NXP i.MX8X 和 Google 的 Edge TPU ML 推理 ASIC(也可作為Coral Edge TPU 開發(fā)板的一部分)的基板的開放硬件設(shè)計(jì)文件,。該板提供標(biāo)準(zhǔn) I/O 接口,,并允許用戶通過統(tǒng)一的柔性扁平電纜 (FFC) 連接器與兩個(gè)兼容 MIPI CSI-2 的視頻設(shè)備連接。
PCB 項(xiàng)目文件是在 Altium Designer 14.1 中準(zhǔn)備的,。
該項(xiàng)目是一個(gè)硬件方案,,谷歌Coral Edge TPU的硬件驗(yàn)證方案。
neural-engine
?https://github.com/hollance/neural-engine
大多數(shù)新的 iPhone 和 iPad 都有神經(jīng)引擎,,這是一種特殊的處理器,,可以讓機(jī)器學(xué)習(xí)模型變得非常快,,但對(duì)于這種處理器的實(shí)際工作原理,,公眾知之甚少。
Apple 神經(jīng)引擎(或 ANE)是NPU的一種,,代表神經(jīng)處理單元,。它就像 GPU,但 NPU 不是加速圖形,,而是加速卷積和矩陣乘法等神經(jīng)網(wǎng)絡(luò)操作,。
ANE 并不是唯一的 NPU——除了 Apple 之外,許多公司都在開發(fā)自己的 AI 加速器芯片。除了神經(jīng)引擎,,最著名的 NPU 是谷歌的 TPU(或 Tensor Processing Unit),。
這個(gè)項(xiàng)目并不是一個(gè)實(shí)現(xiàn)TPU的項(xiàng)目,但是是一個(gè)關(guān)于Apple 神經(jīng)引擎(或 ANE)介紹及相關(guān)文檔的集合的項(xiàng)目,。
總結(jié)
今天介紹了幾個(gè)TPU的項(xiàng)目,,因?yàn)樵趪鴥?nèi)TPU可能很多人都沒有聽說過,所以接下來我會(huì)出幾篇文章介紹一下,。同時(shí)這些項(xiàng)目前面幾個(gè)非常完整,,完全可以優(yōu)化后進(jìn)行商業(yè)推廣(注意開源協(xié)議),最后幾個(gè)項(xiàng)目是一些補(bǔ)充的知識(shí),,想要了解相關(guān)的知識(shí)的朋友可以查看一下,。