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