《AI編譯器開發(fā)指南》結(jié)合專用AI加速器和GPGPU兩類芯片架構(gòu),系統(tǒng)介紹了AI編譯器的基本框架和開發(fā)流程,著重論述了在AI編譯器開發(fā)過程中,針對這兩類架構(gòu)需要重點考慮的實現(xiàn)方法。全書共分為7章,內(nèi)容涵蓋了以TVM為代表的開源AI編譯器實現(xiàn)分析和定制化方法,以及GPGPU編譯器后端相關(guān)設(shè)計方法。在介紹AI編譯器一般原理的同時,書中通過對開源編譯器項目的源代碼分析,使讀者能通過實例對AI編譯器開發(fā)過程有更直觀的認識。
《AI編譯器開發(fā)指南》填補了AI編譯器開發(fā)類書籍的空白,可作為從事AI軟硬件設(shè)計、開發(fā)人員的參考用書,也可作為普通高等院校智能科學與技術(shù)、計算機科學與技術(shù)等專業(yè)的本科生和研究生的教輔書籍。
《AI編譯器開發(fā)指南》融合了一線AI芯片工程師多年工作經(jīng)驗,從實戰(zhàn)編程的角度出發(fā),全方位闡述AI編譯器技術(shù),避免煩瑣的公式推導,幫助初學者建立AI編譯器開發(fā)領(lǐng)域知識圖譜。循序漸進、由淺入深,書中配有二維碼視頻,使讀者身臨其境,迅速、深入地掌握各種經(jīng)驗和技巧。
當前,新一輪科技革命和產(chǎn)業(yè)變革方興未艾,人工智能已逐漸發(fā)展成為帶動技術(shù)創(chuàng)新、推動產(chǎn)業(yè)升級的通用技術(shù)。為應(yīng)對人工智能所帶來的市場需求,主流IT廠商如谷歌、蘋果、亞馬遜、騰訊、百度、阿里等紛紛投入巨資自研AI芯片,AI芯片創(chuàng)業(yè)公司也不斷刷新融資紀錄,AI芯片設(shè)計和開發(fā)已儼然成為IT產(chǎn)業(yè)界的顯學。
AI應(yīng)用和模型在AI芯片上運行離不開編譯器的支持。面對AI芯片產(chǎn)業(yè)的快速擴張,芯片技術(shù)人才供不應(yīng)求,編譯器人才同樣嚴重匱乏,如何改善編譯器人才緊缺的局面成為急需解決的難題。編譯技術(shù)是一門不斷發(fā)展的技術(shù),特別是針對新興的AI應(yīng)用,編譯器開發(fā)目標和方法出現(xiàn)了新的變化。AI編譯器一方面要實現(xiàn)AI應(yīng)用到芯片的自動化部署,另一方面要通過優(yōu)化算法與芯片架構(gòu)間的適配關(guān)系,協(xié)助提升AI應(yīng)用的執(zhí)行效率。市面上現(xiàn)有的編譯器類書籍大多偏重經(jīng)典理論和原理的闡述,這類書籍對于AI編譯器初學者建立編譯器相關(guān)基本概念當然是有幫助的,但因其滯后于AI芯片的發(fā)展形勢,在為AI編譯器開發(fā)提供可行的解決方案和指導建議方面力有不逮。因此,業(yè)界亟須一本完整介紹AI編譯器開發(fā)的入門指導書籍,引導初學者由基本的編譯器知識入手,逐步掌握AI編譯器開發(fā)的基本過程。本書綜合了各種現(xiàn)有的AI編譯器設(shè)計理論和實踐成果,旨在幫助初學者快速建立AI編譯器開發(fā)領(lǐng)域知識圖譜,理解AI編譯器開發(fā)的各種關(guān)鍵技術(shù),并為AI編譯器實際開發(fā)過程中出現(xiàn)的問題提供有價值的指導和參考意見。
本書共分為7章,各章安排如下。
第1章從多個角度對現(xiàn)有AI編譯器進行分類,總結(jié)了AI編譯器通常采用的設(shè)計結(jié)構(gòu)和特征,并介紹了AI編譯器的產(chǎn)品設(shè)計和差異,以及GPGPU編譯器基本組成。
第2章以TVM、TensorFlow XLA和Glow三種AI編譯器為例,詳細介紹了AI編譯器的基本架構(gòu)設(shè)計和實現(xiàn)方法。
第3章專注于以TVM為代表的開源AI編譯器的實現(xiàn)分析及其定制化開發(fā)方法介紹。
第4章將GPGPU編譯器后端設(shè)計方法作為AI編譯器的重要補充加以闡述,重點分析了GPGPU編譯器后端重要的三個組成部分:指令選擇、指令調(diào)度和寄存器分配。
第5章針對引人注目的GPGPU張量核專用處理模塊,從張量核設(shè)計原理、編程方法和編譯器支持角度對其做了系統(tǒng)論述。
第6章在分析模型性能衡量方法和影響因素的基礎(chǔ)上,介紹了LLVM AMDGPU和TVM開源項目中的性能相關(guān)優(yōu)化方法。
第7章介紹了對AI編譯器設(shè)計有重要影響的軟硬件接口設(shè)計方法,著重介紹了AI編譯器與AI加速器硬件相關(guān)的接口設(shè)計和面向硬件的模型量化方法。
本書從開發(fā)實戰(zhàn)的角度出發(fā),將抽象的編譯器概念,以源代碼、結(jié)構(gòu)框圖、流程圖等方式形象地表述,輔以開源項目中的源代碼分析,盡量避免煩瑣的公式推導,使讀者能通過實際例子對AI編譯器的開發(fā)有更直觀的認識,將AI編譯器原理與實踐緊密結(jié)合起來,提高開發(fā)者解決實際問題的能力。本書適合AI編譯器開發(fā)工程師、AI芯片架構(gòu)師、AI芯片設(shè)計工程師、算法優(yōu)化工程師、高等院校相關(guān)專業(yè)的本科生和研究生,以及其他對AI編譯器感興趣的人員閱讀學習。
AI芯片和編譯技術(shù)的發(fā)展日新月異,由于篇幅限制,書中僅闡述了當前主要和主流的AI編譯器相關(guān)技術(shù),一些對AI編譯器有重要影響的技術(shù),如MLIR、多面體模型等,書中未能充分論述。讀者若對更深入和專門的議題感興趣,可參考本書參考文獻中提供的相關(guān)論文和網(wǎng)址。本書中涉及的TVM、LLVM、NVDLA等開源項目源代碼可從https://github.com/apache/tvm、https://github.com/llvm/llvmproject和https://github.com/nvdla獲得。
本書重點、難點部分配有二維碼視頻,讀者可以掃碼觀看,本書附帶配套免費資源可掃描封底二維碼獲取,或從以下Github鏈接獲得https://github.com/frankwang0818/AI_compiler_development_guide。
囿于個人經(jīng)驗,書中難免有不準確甚至錯誤之處,歡迎讀者批評斧正。
感謝機械工業(yè)出版社策劃編輯李培培,從選題到定稿再到本書的出版,她都提供了非常專業(yè)的指導和幫助。
感謝我的家人的照顧和支持,讓我有時間和精力在工作之余完成本書的寫作任務(wù)。
汪巖 博士,高級工程師。目前在美國硅谷某AI芯片創(chuàng)業(yè)公司從事編譯器開發(fā)。曾在聯(lián)發(fā)科、索尼移動、摩托羅拉等公司從事軟件研發(fā)管理工作,歷任技術(shù)主管、研發(fā)經(jīng)理、研發(fā)高級經(jīng)理、軟件總監(jiān)等職務(wù),在無線通信、Android系統(tǒng)、編譯器等軟件領(lǐng)域有17年工作經(jīng)驗,曾主持30余款手機產(chǎn)品的Android框架軟件開發(fā),參與或主持多款AI類芯片編譯器的開發(fā),并有多款芯片流片經(jīng)驗。發(fā)表論文20余篇,授權(quán)專利20余項。
前言
第1章 AI編譯器基礎(chǔ)
1.1AI編譯器概述
1.1.1AI芯片及其分類
1.1.2AI編譯器的結(jié)構(gòu)與特征
1.2常用AI編譯器介紹
1.2.1TVM整體架構(gòu)
1.2.2TensorFlow XLA整體架構(gòu)
1.2.3Glow整體架構(gòu)
1.3LLVM編譯器基礎(chǔ)
1.3.1LLVM前端工作流程
1.3.2LLVM IR格式和語法
1.3.3LLVM后端工作流程
1.4GPGPU編譯器基礎(chǔ)
1.4.1GPGPU編譯器工作流程
1.4.2Clang對CUDA的處理
1.4.3GPGPU編譯器的IR優(yōu)化
第2章 開源AI編譯器實現(xiàn)分析
2.1TVM的系統(tǒng)設(shè)計
2.1.1TVM的圖級優(yōu)化
2.1.2TVM的計算與調(diào)度
2.1.3TVM的自動調(diào)優(yōu)框架
2.2TensorFlow XLA的系統(tǒng)設(shè)計
2.2.1XLA的聚類過程
2.2.2XLA的IR設(shè)計和編譯過程
2.2.3開啟XLA的方式
2.2.4XLA JIT的圖優(yōu)化過程
2.2.5XLA JIT的代碼生成
2.3Glow的系統(tǒng)設(shè)計
2.3.1Glow的高階IR
2.3.2Glow的低階IR
2.3.3Glow的量化方法
2.3.4Glow的后端設(shè)計
2.4AI編譯器特性總結(jié)
2.4.1AI編譯器的多階IR設(shè)計
2.4.2AI編譯器的前端優(yōu)化
2.4.3AI編譯器的后端優(yōu)化
第3章 定制化AI編譯器設(shè)計與實現(xiàn)
3.1定制化AI編譯器設(shè)計框架
3.2TVM的高階中間表示
3.2.1TVM高階中間表示的表達
3.2.2TVM高階中間表示的數(shù)據(jù)表示實現(xiàn)
3.2.3TVM高階中間表示的算子實現(xiàn)
3.3TVM的低階中間表示
3.3.1TVM低階中間表示的表達
3.3.2TVM代碼生成的定制化開發(fā)
3.3.3TVM運行時的定制化開發(fā)
3.4TVM的前后端優(yōu)化
3.4.1TVM pass的功能與實現(xiàn)
3.4.2TVM的前端優(yōu)化
3.4.3TVM的后端優(yōu)化
第4章 GPGPU編譯器后端設(shè)計
4.1LLVM后端開發(fā)流程
4.1.1異構(gòu)計算程序工作流程
4.1.2LLVM后端執(zhí)行流程
4.1.3LLVM中的pass及其管理機制
4.2指令選擇
4.2.1指令選擇原理與實現(xiàn)方式
4.2.2基于SelectionDAG的指令選擇
4.2.3快速指令選擇
4.2.4全局指令選擇
4.3指令調(diào)度
4.3.1指令調(diào)度原理
4.3.2LLVM中的指令調(diào)度器及其工作過程
4.3.3調(diào)度pass的定制
4.4寄存器分配
4.4.1寄存器分配原理
4.4.2LLVM寄存器分配
4.4.3貪厭寄存器分配實現(xiàn)過程分析
第5章 張量核的編程方法與編譯器支持
5.1沃爾塔、圖靈和安培架構(gòu)特性
5.1.1沃爾塔架構(gòu)特性
5.1.2圖靈架構(gòu)特性
5.1.3安培架構(gòu)特性
5.2張量核編程方法
5.2.1WMMA API及其用法
5.2.2CUTLASS中的張量核編程
5.3編譯器后端對張量核的支持
5.3.1wmma PTX指令及其用法
5.3.2mma和ldmatrix PTX指令及其用法
5.3.3WMMA intrinsic函數(shù)定義
5.3.4NVPTX后端對wmma PTX指令的支持
第6章 AI模型性能分析與編譯器優(yōu)化方法
6.1AI模型性能的衡量指標和影響因素
6.1.1計算訪存比
6.1.2算術(shù)強度和操作字節(jié)比
6.1.3內(nèi)存級并行性和線程束并行性
6.2SM占用率及其編程接口
6.2.1理論占用率和實際占用率
6.2.2理論占用率約束條件分析
6.2.3CUDA運行時占用率編程接口
6.3基于占用率的指令調(diào)度優(yōu)化
6.3.1AMD GPU編程模型和硬件執(zhí)行模型
6.3.2AMDGPU后端的指令調(diào)度算法優(yōu)化
第7章 AI芯片軟硬件系統(tǒng)接口設(shè)計
7.1GPGPU軟硬件接口設(shè)計
7.1.1GPGPU主機端編程接口
7.1.2內(nèi)核分派過程
7.1.3GPGPU硬件分派過程
7.2AI加速器軟硬件接口設(shè)計
7.2.1AI加速器硬件架構(gòu)
7.2.2AI加速器設(shè)備軟件棧
7.3量化技術(shù)與實現(xiàn)
7.3.1量化技術(shù)原理
7.3.2算子量化和激活函數(shù)量化
7.3.3激活函數(shù)量化方法
參考文獻