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