這是一本講解NPU硬件架構設計與技術實現(xiàn)的著作。作者將自己在CPU、GPU和NPU領域15年的軟硬件工作經(jīng)驗融會貫通,將四代NPU架構設計經(jīng)驗融為一體,將端側和云側NPU架構合二為一,總結并提煉出本書內(nèi)容。本書主要討論神經(jīng)網(wǎng)絡硬件層面,尤其是芯片設計層面的內(nèi)容,主要包含神經(jīng)網(wǎng)絡的分析、神經(jīng)網(wǎng)絡加速器的設計以及具體實現(xiàn)技術。通過閱讀本書,讀者可以深入了解主流的神經(jīng)網(wǎng)絡結構,掌握如何從零開始設計一個能用、好用的產(chǎn)品級加速器。
通過閱讀本書,你將:
透徹理解與深度學習相關的機器學習算法及其實現(xiàn)
學會主流圖像處理領域神經(jīng)網(wǎng)絡的結構
掌握加速器運算子系統(tǒng)和存儲子系統(tǒng)的設計
摸清加速器設計中遇到的具體問題及其解決方法
了解NPU架構需要考慮的控制通路和數(shù)據(jù)通路
(1)作者背景權威:作者是地平線的BPU首席架構師,英偉達的前高級架構師。
(2)作者經(jīng)驗豐富:作者在CPU、GPU和NPU等3大領域積累了15年的工作經(jīng)驗,是多款CPU、NPU、GPU的核心架構師,參與了Xburst、NVDLA、TensorCore的架構設計工作。
(3)NPU架構與設計指南:詳細講解NPU的算法以及硬件加速器的架構設計與實現(xiàn)過程,教讀者從零開始設計NPU。
(4)圖文并茂、化繁為簡:一圖勝千言,用100余幅圖片將復雜的邏輯、算法、表述等直觀地呈現(xiàn)出來,化繁為簡,降低學習難度。
(5)全彩印刷:為了便于讀者理解加速器的原理、架構與實現(xiàn)過程,本書采用了全彩印刷。
前 言
從算法角度看,神經(jīng)網(wǎng)絡分Training(訓練)和Inference(推理)兩個過程,本書主要討論Inference過程。從技術類別看,本書主要討論神經(jīng)網(wǎng)絡硬件,尤其是芯片設計層面的內(nèi)容,如何訓練出優(yōu)秀的模型、如何設計神經(jīng)網(wǎng)絡加速器的驅(qū)動程序和編譯器等內(nèi)容均非本書重點。
本書內(nèi)容主要分三部分:神經(jīng)網(wǎng)絡的分析、神經(jīng)網(wǎng)絡加速器的設計及具體的實現(xiàn)技術。通過閱讀本書,讀者可以深入了解主流的神經(jīng)網(wǎng)絡結構,掌握如何從零開始設計一個能用、好用的產(chǎn)品級加速器。
兵馬未動,糧草先行,在設計神經(jīng)網(wǎng)絡加速器之前,需要對主流的神經(jīng)網(wǎng)絡的結構、常見算子,以及各個算子運算細節(jié)有深入的理解。第1章介紹了目前主流圖像處理領域神經(jīng)網(wǎng)絡的結構,提取出各個網(wǎng)絡的基本塊、網(wǎng)絡算子及其參數(shù)量和運算量,闡述了加速器的編程模型和硬件架構分類。
程序=數(shù)據(jù)結構 算法,第2、3章分別討論了加速器運算子系統(tǒng)和存儲子系統(tǒng)的設計,并對NVDLA、TPU、GPU實現(xiàn)卷積運算的過程進行了詳細的推演,以便讀者對加速器架構設計有初步的了解。
加速器設計需要綜合能力,僅靠零碎的靈感和天馬行空的創(chuàng)意,設計不出能用、好用的加速器產(chǎn)品。第4~6章用大量篇幅討論了加速器設計中可能遇到的問題及解決方法。
生活不止眼前的茍且,還有詩和遠方,在加速器的設計過程中,閉門造車不可取,在埋頭苦干的間歇,仰頭望望天空和遠方,或許有意想不到的收獲。第7章對加速器進行盤點,展望了神經(jīng)網(wǎng)絡加速器的未來,希望對讀者有所啟發(fā)。
一圖勝千言,很多復雜的邏輯用一張圖就能輕松解釋,很多煩瑣的言語用一張圖就能直觀表達。本書包含100余幅圖,希望將講述的內(nèi)容清晰地傳達給讀者。
一切皆有可能,本書在討論具體設計問題時,一般會先給出多種建議,然后篩選出合理的方案,意在傳達硬件架構設計的思維方式。很多思維方式不僅限于神經(jīng)網(wǎng)絡加速器,由此及彼,可推而廣之。
感謝我的朋友姜君、周焱、王瑋琪,他們總是耐心地鼓勵和幫助我,我從他們身上學到很多。感謝我的太太張金艷和女兒甄溪,她們也為這本書付出了很多。
閱讀本書不需要太多預備知識,需要的是求知探索的勇氣和耐心。如果讀者有任何問題和建議,歡迎與我聯(lián)系:rill_zhen@126.com。
甄建勇
2023年3月于上海
甄建勇
資深CPU、GPU、NPU三棲架構師,從事相關軟硬件架構與設計工作超過15年,F(xiàn)就職于地平線,擔任BPU首席架構師。曾就職于英偉達,擔任高級架構師,作為多款CPU、NPU、GPU的核心架構師,參與了Xburst、NVDLA、TensorCore的架構設計工作。熟悉SIMT/RayTracing等模塊的架構設計與實現(xiàn)。擅長的領域還包括經(jīng)濟學、法學、心理學以及Linux內(nèi)核、計算機圖形加速和全同態(tài)加密。
王路業(yè)
優(yōu)矽科技聯(lián)合創(chuàng)始人兼總經(jīng)理,中國開放指令生態(tài)(RISC-V)聯(lián)盟(CRVA)軟件開源工作組副組長。曾就職于ARM安謀科技、Synopsys新思科技、ST意法半導體和中國長城計算機。
CONTENTS
目 錄
前言
第1章 卷積神經(jīng)網(wǎng)絡 1
1.1 神經(jīng)網(wǎng)絡的結構 2
1.2 GCN 4
1.3 網(wǎng)絡的基本塊 7
1.4 網(wǎng)絡的算子 17
1.5 網(wǎng)絡參數(shù)量與運算量 29
1.6 加速器編程模型 31
1.7 硬件加速器架構分類 33
第2章 運算子系統(tǒng)的設計 35
2.1 數(shù)據(jù)流設計 35
2.2 算力與帶寬 38
2.2.1 算力與輸入帶寬 38
2.2.2 算力與輸出帶寬 41
2.3 卷積乘法陣列 43
2.3.1 Conv算法詳解 43
2.3.2 NVDLA的乘法陣列 47
2.3.3 TPU的乘法陣列 59
2.3.4 GPU的乘法陣列 66
2.3.5 華為DaVinci的乘法陣列 74
2.4 卷積運算順序的選擇 80
2.5 池化模塊的設計 81
第3章 存儲子系統(tǒng)的設計 86
3.1 存儲子系統(tǒng)概述 86
3.1.1 存儲子系統(tǒng)的組成 86
3.1.2 內(nèi)部緩存的設計 89
3.2 數(shù)據(jù)格式的定義 97
3.2.1 特征圖的格式 98
3.2.2 權重的格式 100
第4章 架構優(yōu)化技術 106
4.1 運算精度的選擇 106
4.1.1 dynamic fixed point類型 109
4.1.2 bfloat16類型 110
4.2 硬件資源的復用 111
4.2.1 FC 112
4.2.2 de-Conv 115
4.2.3 dilate Conv 123
4.2.4 group Conv 123
4.2.5 3D Conv 127
4.2.6 TC Conv 130
4.2.7 3D Pool 132
4.2.8 Up Sample Pooling 136
4.2.9 多個加速器的級聯(lián) 136
4.3 Winograd算法和FFT算法 138
4.3.1 Winograd算法解析 138
4.3.2 FFT算法解析 148
4.4 除法變乘法 150
4.5 LUT的使用 150
4.6 宏塊并行技術 155
4.7 減少軟件配置時間 156
4.8 軟件優(yōu)化技術 157
4.9 一些激進的優(yōu)化技術 158
第5章 安全與防護 160
5.1 安全技術 160
5.2 安全性評估 162
5.3 防護 163
第6章 神經(jīng)網(wǎng)絡加速器的實現(xiàn) 165
6.1 乘法器的設計 165
6.1.1 整型乘法器的設計 166
6.1.2 浮點運算器的設計 171
6.2 數(shù)字電路常見基本塊的設計 184
6.3 時序優(yōu)化 203
6.4 低功耗設計 207
第7章 盤點與展望 211
7.1 AI加速器盤點 211
7.2 Training加速器 211
7.3 展望 218
后記 220