本書結(jié)合作者多年的工作與學(xué)習(xí)經(jīng)驗(yàn),力求將TVM基礎(chǔ)理論與案例實(shí)踐融合在一起進(jìn)行詳細(xì)講解。全書共9章,包括TVM基本知識,使用TVM開發(fā),算子融合與圖優(yōu)化,TVM量化技術(shù),TVM優(yōu)化調(diào)度,RelayIR,代碼生成,后端部署與OpenCL(Open Computing Language,開放運(yùn)算語言),自動調(diào)度、自動搜索與成本模型。各章除了包含重要的知識點(diǎn)和實(shí)踐技能外,還配備了精心挑選的典型案例。
適讀人群 :從事AI算法,軟件,AI芯片,編譯器開發(fā)工程技術(shù)人員
人工智能(Artificial Intelligence,AI)已經(jīng)在全世界信息產(chǎn)業(yè)中獲得廣泛應(yīng)用。深度學(xué)習(xí)模型推動了AI技術(shù)革命,如 TensorFlow、PyTorch、MXNet、Caffe等。大多數(shù)現(xiàn)有的系統(tǒng)框架只針對小范圍的服務(wù)器級 GPU進(jìn)行過優(yōu)化,因此需要做很多的優(yōu)化努力,以便在汽車、手機(jī)端、物聯(lián)網(wǎng)設(shè)備及專用加速器(FPGA、ASIC)等其他平臺上部署。隨著深度學(xué)習(xí)模型和硬件后端數(shù)量的增加,TVM構(gòu)建了一種基于中間表示 (IR)的統(tǒng)一解決方案。TVM不僅能自動優(yōu)化深度學(xué)習(xí)模型,還提供了跨平臺的高效開源部署框架。大模型的熱度逐漸上升,將人工智能理論及算法框架轉(zhuǎn)為落地項(xiàng)目實(shí)現(xiàn),TVM是一個(gè)很好的橋梁。因此,本書將得到廣大讀者的喜愛。
人工智能(Artificial Intelligence,AI)已經(jīng)在全世界信息產(chǎn)業(yè)中獲得廣泛應(yīng)用。深度學(xué)習(xí)模型推動了AI技術(shù)革命,如 TensorFlow、PyTorch、MXNet、Caffe等。大多數(shù)現(xiàn)有的系統(tǒng)框架只針對小范圍的服務(wù)器級 GPU進(jìn)行過優(yōu)化,因此需要做很多的優(yōu)化努力,以便在汽車、手機(jī)端、物聯(lián)網(wǎng)設(shè)備及專用加速器(FPGA、ASIC)等其他平臺上部署。隨著深度學(xué)習(xí)模型和硬件后端數(shù)量的增加,TVM構(gòu)建了一種基于中間表示 (IR)的統(tǒng)一解決方案。TVM不僅能自動優(yōu)化深度學(xué)習(xí)模型,還提供了跨平臺的高效開源部署框架。
有了TVM的幫助,只需要很少的定制工作,就可以輕松地在手機(jī)、嵌入式設(shè)備甚至瀏覽器上運(yùn)行深度學(xué)習(xí)模型。TVM 還為多種硬件平臺上的深度學(xué)習(xí)計(jì)算提供了統(tǒng)一的優(yōu)化框架,包括一些有自主研發(fā)計(jì)算原語的專用加速器。TVM是一個(gè)深度學(xué)習(xí)編譯器,所有人都能隨時(shí)隨地使用開源框架學(xué)習(xí)研發(fā)。圍繞TVM形成了多元化社區(qū),社區(qū)成員包括硬件供應(yīng)商、編譯器工程師和機(jī)器學(xué)習(xí)研究人員等,共同構(gòu)建了一個(gè)統(tǒng)一的可編程軟件堆棧,豐富了整個(gè)機(jī)器學(xué)習(xí)技術(shù)生態(tài)系統(tǒng)。
TVM是一個(gè)新型的AI編譯器,廣泛應(yīng)用于各種產(chǎn)品研發(fā)中,在企業(yè)與學(xué)術(shù)研究中有很大的影響。但是,目前市面上有關(guān)TVM的書還很少,本書試圖彌補(bǔ)這個(gè)空缺。全書的特點(diǎn)總結(jié)如下:
第一,從TVM的概念入手,分析了TVM的基本原理和關(guān)鍵支撐技術(shù)。
第二,從TVM的環(huán)境搭建到案例實(shí)踐逐步展開,分析如何使用TVM進(jìn)行實(shí)戰(zhàn)開發(fā)。
第三,介紹了TVM的重要關(guān)鍵技術(shù),如算子與圖融合、量化技術(shù)、Relay IR(中間表示)、優(yōu)化調(diào)度、編譯部署等,分析了這些模塊的理論與案例實(shí)踐。
第四,TVM對后端相關(guān)的技術(shù)進(jìn)行了分析與實(shí)踐,包括代碼生成、自動調(diào)度、自動搜索與成本模型等。
本書的寫作過程中,得到了家人的全力支持,在此,對他們表示深深的感謝。也感謝機(jī)械工業(yè)出版社的編輯們,因?yàn)橛兴麄兊男燎趧谧骱透冻,本書才得以順利出版。由于編者技術(shù)能力有限,書中難免存在紕漏,還望廣大讀者不吝賜教。
編者
吳建明,上海交通大學(xué)模式識別與智能系統(tǒng)專業(yè)博士畢業(yè)。長期從事人工智能芯片設(shè)計(jì),尤其擅長TVM/LLVM編譯器、AI框架、自動駕駛、芯片制造,嵌入式系統(tǒng)等領(lǐng)域的理論研究與技術(shù)創(chuàng)新。長期在一線工作,包括產(chǎn)品設(shè)計(jì)與代碼實(shí)現(xiàn)等,主持和參與過30多項(xiàng)產(chǎn)品的研發(fā)。還參與過國家自然科學(xué)基金、上海市科委項(xiàng)目,并在核心期刊公開發(fā)表過8篇論文,其中6篇是第一作者。
第1章 TVM基本知識/
1.1TVM基本原理/
1.1.1TVM概述/
1.1.2TVM 模型優(yōu)化部署概述/
1.2TVM編譯過程/
1.2.1編譯流程/
1.2.2TVM編譯數(shù)據(jù)結(jié)構(gòu)/
1.2.3TVM編譯數(shù)據(jù)處理/
1.2.4TVM的Pass過程/
1.3TVM開源工程邏輯架構(gòu)/
1.3.1代碼庫代碼結(jié)構(gòu)/
1.3.2代碼自動內(nèi)核/
1.4TVM應(yīng)用支持/
1.4.1TVM的工作流程/
1.4.2支持多語言與多平臺/
1.4.3TVM應(yīng)用場景/
1.4.4TVM優(yōu)化模型推理/
1.4.5TVM編譯器與運(yùn)行時(shí)組件/
1.4.6TVM運(yùn)行時(shí)主要模塊/
1.4.7TVM簡單代碼生成編譯示例/
1.4.8TVM各模塊之間的關(guān)系/
1.5TVM特色與挑戰(zhàn)/
1.5.1TVM特色/
1.5.2支持多種后端設(shè)備/
1.5.3TVM應(yīng)對的挑戰(zhàn)/
第2章 使用TVM開發(fā)/
2.1配置TVM環(huán)境/
2.1.1apache TVM源碼下載/
2.1.2配置TVM的開發(fā)環(huán)境/
2.1.3TVM conda環(huán)境使用方法/
2.1.4編譯實(shí)現(xiàn)/
2.1.5導(dǎo)入模型方法/
2.2在conda環(huán)境編譯優(yōu)化TVM yolov3示例/
2.3Python與C++的調(diào)用關(guān)系/
2.3.1TVM中底層C++數(shù)據(jù)結(jié)構(gòu)/
2.3.2進(jìn)行函數(shù)注冊/
2.3.3上層Python調(diào)用/
2.4TVM自定義代碼示例/
2.4.1TVM如何添加代碼/
2.4.2TVM代碼生成實(shí)現(xiàn)示例/
2.5用TVM實(shí)現(xiàn)算法全流程/
2.5.1配置張量與創(chuàng)建調(diào)度/
2.5.2進(jìn)行降級算子優(yōu)化/
2.5.3構(gòu)建host目標(biāo)程序/
2.5.4實(shí)現(xiàn)后端代碼生成/
第3章 算子融合與圖優(yōu)化/
3.1算子概述/
3.1.1TVM融合組件示例/
3.1.2優(yōu)化計(jì)算圖/
3.2圖GCN融合/
3.2.1圖的概念/
3.2.2深度學(xué)習(xí)新特征/
3.3圖融合GCN示例/
3.3.1GCN的PyTorch實(shí)現(xiàn)/
3.3.2融合BN與Conv層/
3.4TVM圖優(yōu)化與算子融合/
3.4.1圖與算子優(yōu)化/
3.4.2自定義算子/
3.4.3算子融合步驟/
3.4.4向Relay中添加operator/
3.5端到端優(yōu)化/
3.5.1 AI框架概述/
3.5.2計(jì)算圖優(yōu)化層/
3.5.3TVM算子融合的4種方法/
3.5.4數(shù)據(jù)布局轉(zhuǎn)換/
3.5.5張量表達(dá)式語言/
3.5.6調(diào)度空間分析/
3.6 TVM圖優(yōu)化與算子融合方案分析/
3.6.1圖優(yōu)化框架分析/
3.6.2TVM優(yōu)化基礎(chǔ)分析/
3.6.3TVM優(yōu)化參數(shù)/
3.6.4算子優(yōu)化圖示/
3.6.5自定義圖級優(yōu)化/
3.7支配樹技術(shù)/
3.7.1支配樹概述/
3.7.2算子融合方案及示例/
3.8控制流與優(yōu)化器/
3.8.1控制流/
3.8.2優(yōu)化器/
3.9TVM存儲與調(diào)度/
3.9.1TVM編譯器優(yōu)化/
3.9.2圖結(jié)構(gòu)基本優(yōu)化/
3.9.3張量計(jì)算/
3.10多功能張量加速器VTA/
3.10.1VTA-TVM 硬件-軟件堆棧/
3.10.2VTA主要功能/
3.10.3VTA示例/
3.10.4VTA計(jì)算模塊/
3.10.5VTA控制/
3.10.6microTVM模型/
3.11TVM代碼庫結(jié)構(gòu)與示例/
3.11.1代碼庫結(jié)構(gòu)/
3.11.2張量添加示例/
3.12主機(jī)驅(qū)動的執(zhí)行/
3.12.1 firmware二進(jìn)制文件/
3.12.2計(jì)算聲明/
3.12.3數(shù)據(jù)平鋪/
3.12.4卷積運(yùn)算/
3.12.5空間填充/
第4章 TVM量化技術(shù)/
4.1TVM量化概述/
4.1.1TVM量化現(xiàn)狀/
4.1.2TVM量化原理/
4.2int8量化與TVM執(zhí)行/
4.2.1兩種主要量化方案/
4.2.2int8量化原理分析/
4.2.3KL散度計(jì)算/
4.2.4實(shí)現(xiàn)int8量化/
4.3低精度訓(xùn)練與推理/
4.4NN量化/
4.4.1神經(jīng)網(wǎng)絡(luò)量化概述/
4.4.2優(yōu)化數(shù)據(jù)與網(wǎng)絡(luò)/
4.4.3前向推理與反向傳播/
4.5熵校準(zhǔn)示例/
4.6TVM量化流程/
4.6.1Relay的兩種并行量化/
4.6.2Relay優(yōu)化Pass方法/
4.6.3量化處理硬件說明/
4.6.4閾值估計(jì)方案/
4.6.5模擬量化誤差/
4.6.6尺度計(jì)算/
4.6.7數(shù)據(jù)類型分配/
4.6.8數(shù)據(jù)類型分配日志/
4.6.9神經(jīng)網(wǎng)絡(luò)低精度量化/
4.7TVM量化程序分析/
第5章 TVM優(yōu)化調(diào)度/
5.1TVM 運(yùn)行時(shí)系統(tǒng)/
5.1.1TVM 運(yùn)行時(shí)系統(tǒng)框架/
5.1.2PackedFunc編譯與部署/
5.1.3構(gòu)建 PackedFunc模塊/
5.1.4遠(yuǎn)程部署方法/
5.1.5TVM 對象與編譯器分析/
5.2自動微分靜態(tài)圖與動態(tài)圖/
5.2.1計(jì)算圖分類/
5.2.2動態(tài)圖實(shí)現(xiàn)示例/
5.3機(jī)器學(xué)習(xí)自動微分/
5.3.1微分方法/
5.3.2手動微分/
5.3.3數(shù)值微分/
5.3.4符號微分/
5.3.5自動微分/
5.3.6自動微分實(shí)現(xiàn)示例/
5.4稀疏矩陣分析/
5.4.1稀疏矩陣概念/
5.4.2稀疏矩陣優(yōu)化/
5.4.3特定矩陣壓縮存儲/
5.4.4稀疏矩陣實(shí)現(xiàn)示例/
5.5TVM張量計(jì)算分析/
5.5.1生成張量運(yùn)算/
5.5.2嵌套并行與協(xié)作/
5.5.3張量化計(jì)算/
5.5.4顯式內(nèi)存延遲隱藏/
第6章 Relay IR/
6.1TVM數(shù)據(jù)介紹/
6.1.1TVM模塊框架介紹/
6.1.2Relay IR原理簡介/
6.1.3構(gòu)建計(jì)算圖/
6.1.4let綁定與作用域/
6.2IR代碼生成/
6.2.1前端優(yōu)化/
6.2.2節(jié)點(diǎn)優(yōu)化/
6.2.3代數(shù)優(yōu)化/
6.2.4數(shù)據(jù)流級別的優(yōu)化/
6.3在Relay中注冊算子/
6.3.1添加節(jié)點(diǎn),定義編譯參數(shù)/
6.3.2運(yùn)算類型關(guān)系分析/
6.3.3在C++中進(jìn)行RELAY_REGISTER_OP宏注冊/
6.3.4算子注冊與調(diào)度/
6.3.5注冊函數(shù)API分析/
6.3.6將Python API打包/
6.3.7單元測試分析/
6.4TVM中IR示例/
6.4.1IRModule技術(shù)分析/
6.4.2TVM Runtime(運(yùn)行時(shí))分析/
6.4.3預(yù)測部署實(shí)現(xiàn)/
6.4.4動態(tài)圖實(shí)現(xiàn)/