介紹
張量處理單元( Tensor Processing Unit, TPU ) 是谷歌專(zhuān)門(mén)為神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)開(kāi)發(fā)的人工智能加速器 專(zhuān)用集成電路(ASIC) ,特別是使用谷歌自己的TensorFlow軟件。谷歌于 2015 年開(kāi)始在內(nèi)部使用 TPU,并于 2018 年將它們作為其云基礎(chǔ)設(shè)施的一部分并通過(guò)提供較小版本的芯片出售給第三方使用。
張量處理單元于 2016 年 5 月在Google I/O上宣布:當(dāng)時(shí)該公司表示 TPU 已經(jīng)在其數(shù)據(jù)中心內(nèi)使用了一年多。該芯片專(zhuān)為 Google 的TensorFlow框架設(shè)計(jì),用于神經(jīng)網(wǎng)絡(luò)等機(jī)器學(xué)習(xí)應(yīng)用。
與圖形處理單元相比,它設(shè)計(jì)用于大量低精度計(jì)算(例如低至8 位精度) ,每焦耳有更多的輸入/輸出操作,無(wú)需用于光柵化/紋理映射的硬件。根據(jù)Norman Jouppi的說(shuō)法, TPU ASIC安裝在散熱器組件中,該組件可以安裝在數(shù)據(jù)中心機(jī)架內(nèi)的硬盤(pán)驅(qū)動(dòng)器插槽中。不同類(lèi)型的處理器適合不同類(lèi)型的機(jī)器學(xué)習(xí)模型,TPU 非常適合CNN而 GPU 對(duì)一些全連接的神經(jīng)網(wǎng)絡(luò)有長(zhǎng)處,而 CPU 對(duì)RNN有長(zhǎng)處。
經(jīng)過(guò)幾年的發(fā)展,TPU已經(jīng)發(fā)布了四個(gè)版本,下面是其發(fā)展歷程:
詳細(xì)介紹:<【科普】什么是TPU?>
接下來(lái)介紹一些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)每種類(lèi)型的 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.haw-hamburg.de/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)門(mén)PU和引腳沒(méi)關(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ì)比
在用戶(hù)看來(lái),F(xiàn)ree-TPU和EEP-TPU功能相同,但推理時(shí)間不同。
這是一個(gè)極其完整的項(xiàng)目,關(guān)于怎么運(yùn)行,怎么調(diào)用都有很詳細(xì)的步驟,這里就不再贅述了,更多詳情,請(qǐng)?jiān)L問(wèn):
?
https://www.embedeep.com
SimpleTPU
?
https://github.com/cea-wind/SimpleTPU
張量處理單元旨在加速矩陣乘法,特別是對(duì)于多層感知器和卷積神經(jīng)網(wǎng)絡(luò)。
此實(shí)現(xiàn)主要遵循 Google TPU Version 1,該架構(gòu)在
?
https://arxiv.org/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í)破譯谷歌專(zhuān)有技術(shù)的低層次復(fù)雜性。在此過(guò)程中,我們探索了小規(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。最后他們開(kāi)始做每個(gè)矩陣的乘法,每個(gè)矩陣的因素將首先轉(zhuǎn)換成一個(gè)順序輸入 TPU 中,輸入其特定的矩陣,然后再將這些單元最多向連接的方向輸入。在下一個(gè)周期中,每個(gè)單元將其權(quán)重和數(shù)據(jù)方向賦予下一個(gè)格。從左到右。
因?yàn)檫@個(gè)項(xiàng)目有中文的詳細(xì)介紹,所以就不過(guò)多贅述了。
?
https://zhuanlan.zhihu.com/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。一旦他們開(kāi)始做矩陣乘法,兩個(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
如果說(shuō)上面幾個(gè)TPU比較復(fù)雜,那么這個(gè)就可以用“精簡(jiǎn)”來(lái)形容了。
整個(gè)代碼非常精簡(jiǎn),適合入門(mén)想研究TPU的人。
AIC2021-TPU
?
https://github.com/charley871103/TPU
?
https://github.com/Oscarkai9139/AIC2021-TPU
?
https://github.com/hsiehong/tpu
這個(gè)項(xiàng)目是AIC2021-TPU,類(lèi)似的項(xiàng)目有很多,都是理論研究的項(xiàng)目,和上面的項(xiàng)目一樣都是非常非常適合入門(mén)研究的人員,里面的理論都是極其詳細(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 原本是要寫(xiě)將卷積操作用python預(yù)先imtocol操作的,但后來(lái)直接使用matlab生成數(shù)據(jù)進(jìn)行測(cè)試了
tpu_v2
?
https://github.com/UT-LCA/tpu_v2
項(xiàng)目沒(méi)有多余的介紹,整個(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 開(kāi)發(fā)板的一部分)的基板的開(kāi)放硬件設(shè)計(jì)文件。該板提供標(biāo)準(zhǔn) I/O 接口,并允許用戶(hù)通過(guò)統(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 之外,許多公司都在開(kāi)發(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)樵趪?guó)內(nèi)TPU可能很多人都沒(méi)有聽(tīng)說(shuō)過(guò),所以接下來(lái)我會(huì)出幾篇文章介紹一下。同時(shí)這些項(xiàng)目前面幾個(gè)非常完整,完全可以?xún)?yōu)化后進(jìn)行商業(yè)推廣(注意開(kāi)源協(xié)議),最后幾個(gè)項(xiàng)目是一些補(bǔ)充的知識(shí),想要了解相關(guān)的知識(shí)的朋友可以查看一下。
最后,還是感謝各個(gè)大佬開(kāi)源的項(xiàng)目,讓我們受益匪淺。后面有什么感興趣方面的項(xiàng)目,大家可以在后臺(tái)留言或者加微信留言,今天就到這,我是爆肝的碎碎思,期待下期文章與你相見(jiàn)。
審核編輯 :李倩
-
FPGA
+關(guān)注
關(guān)注
1628文章
21708瀏覽量
602726 -
Verilog
+關(guān)注
關(guān)注
28文章
1345瀏覽量
110049 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8397瀏覽量
132518
原文標(biāo)題:優(yōu)秀的 Verilog/FPGA開(kāi)源項(xiàng)目介紹(二十)- 張量處理單元(TPU)
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論