《AI编译器开发指南》结合专用AI加速器和GPGPU两类芯片架构,系统介绍了AI编译器的基本框架和开发流程,着重论述了在AI编译器开发过程中,针对这两类架构需要重点考虑的实现方法。全书共分为7章,内容涵盖了以TVM为代表的开源AI编译器实现分析和定制化方法,以及GPGPU编译器后端相关设计方法。在介绍AI编译器一般原理的同时,书中通过对开源编译器项目的源代码分析,使读者能通过实例对AI编译器开发过程有更直观的认识。
《AI编译器开发指南》填补了AI编译器开发类书籍的空白,可作为从事AI软硬件设计、开发人员的参考用书,也可作为普通高等院校智能科学与技术、计算机科学与技术等专业的本科生和研究生的教辅书籍。
《AI编译器开发指南》融合了一线AI芯片工程师多年工作经验,从实战编程的角度出发,全方位阐述AI编译器技术,避免烦琐的公式推导,帮助初学者建立AI编译器开发领域知识图谱。循序渐进、由浅入深,书中配有二维码视频,使读者身临其境,迅速、深入地掌握各种经验和技巧。
当前,新一轮科技革命和产业变革方兴未艾,人工智能已逐渐发展成为带动技术创新、推动产业升级的通用技术。为应对人工智能所带来的市场需求,主流IT厂商如谷歌、苹果、亚马逊、腾讯、百度、阿里等纷纷投入巨资自研AI芯片,AI芯片创业公司也不断刷新融资纪录,AI芯片设计和开发已俨然成为IT产业界的显学。
AI应用和模型在AI芯片上运行离不开编译器的支持。面对AI芯片产业的快速扩张,芯片技术人才供不应求,编译器人才同样严重匮乏,如何改善编译器人才紧缺的局面成为急需解决的难题。编译技术是一门不断发展的技术,特别是针对新兴的AI应用,编译器开发目标和方法出现了新的变化。AI编译器一方面要实现AI应用到芯片的自动化部署,另一方面要通过优化算法与芯片架构间的适配关系,协助提升AI应用的执行效率。市面上现有的编译器类书籍大多偏重经典理论和原理的阐述,这类书籍对于AI编译器初学者建立编译器相关基本概念当然是有帮助的,但因其滞后于AI芯片的发展形势,在为AI编译器开发提供可行的解决方案和指导建议方面力有不逮。因此,业界亟须一本完整介绍AI编译器开发的入门指导书籍,引导初学者由基本的编译器知识入手,逐步掌握AI编译器开发的基本过程。本书综合了各种现有的AI编译器设计理论和实践成果,旨在帮助初学者快速建立AI编译器开发领域知识图谱,理解AI编译器开发的各种关键技术,并为AI编译器实际开发过程中出现的问题提供有价值的指导和参考意见。
本书共分为7章,各章安排如下。
第1章从多个角度对现有AI编译器进行分类,总结了AI编译器通常采用的设计结构和特征,并介绍了AI编译器的产品设计和差异,以及GPGPU编译器基本组成。
第2章以TVM、TensorFlow XLA和Glow三种AI编译器为例,详细介绍了AI编译器的基本架构设计和实现方法。
第3章专注于以TVM为代表的开源AI编译器的实现分析及其定制化开发方法介绍。
第4章将GPGPU编译器后端设计方法作为AI编译器的重要补充加以阐述,重点分析了GPGPU编译器后端重要的三个组成部分:指令选择、指令调度和寄存器分配。
第5章针对引人注目的GPGPU张量核专用处理模块,从张量核设计原理、编程方法和编译器支持角度对其做了系统论述。
第6章在分析模型性能衡量方法和影响因素的基础上,介绍了LLVM AMDGPU和TVM开源项目中的性能相关优化方法。
第7章介绍了对AI编译器设计有重要影响的软硬件接口设计方法,着重介绍了AI编译器与AI加速器硬件相关的接口设计和面向硬件的模型量化方法。
本书从开发实战的角度出发,将抽象的编译器概念,以源代码、结构框图、流程图等方式形象地表述,辅以开源项目中的源代码分析,尽量避免烦琐的公式推导,使读者能通过实际例子对AI编译器的开发有更直观的认识,将AI编译器原理与实践紧密结合起来,提高开发者解决实际问题的能力。本书适合AI编译器开发工程师、AI芯片架构师、AI芯片设计工程师、算法优化工程师、高等院校相关专业的本科生和研究生,以及其他对AI编译器感兴趣的人员阅读学习。
AI芯片和编译技术的发展日新月异,由于篇幅限制,书中仅阐述了当前主要和主流的AI编译器相关技术,一些对AI编译器有重要影响的技术,如MLIR、多面体模型等,书中未能充分论述。读者若对更深入和专门的议题感兴趣,可参考本书参考文献中提供的相关论文和网址。本书中涉及的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。
囿于个人经验,书中难免有不准确甚至错误之处,欢迎读者批评斧正。
感谢机械工业出版社策划编辑李培培,从选题到定稿再到本书的出版,她都提供了非常专业的指导和帮助。
感谢我的家人的照顾和支持,让我有时间和精力在工作之余完成本书的写作任务。
汪岩 博士,高级工程师。目前在美国硅谷某AI芯片创业公司从事编译器开发。曾在联发科、索尼移动、摩托罗拉等公司从事软件研发管理工作,历任技术主管、研发经理、研发高级经理、软件总监等职务,在无线通信、Android系统、编译器等软件领域有17年工作经验,曾主持30余款手机产品的Android框架软件开发,参与或主持多款AI类芯片编译器的开发,并有多款芯片流片经验。发表论文20余篇,授权专利20余项。
前言
第1章 AI编译器基础
1.1AI编译器概述
1.1.1AI芯片及其分类
1.1.2AI编译器的结构与特征
1.2常用AI编译器介绍
1.2.1TVM整体架构
1.2.2TensorFlow XLA整体架构
1.2.3Glow整体架构
1.3LLVM编译器基础
1.3.1LLVM前端工作流程
1.3.2LLVM IR格式和语法
1.3.3LLVM后端工作流程
1.4GPGPU编译器基础
1.4.1GPGPU编译器工作流程
1.4.2Clang对CUDA的处理
1.4.3GPGPU编译器的IR优化
第2章 开源AI编译器实现分析
2.1TVM的系统设计
2.1.1TVM的图级优化
2.1.2TVM的计算与调度
2.1.3TVM的自动调优框架
2.2TensorFlow XLA的系统设计
2.2.1XLA的聚类过程
2.2.2XLA的IR设计和编译过程
2.2.3开启XLA的方式
2.2.4XLA JIT的图优化过程
2.2.5XLA JIT的代码生成
2.3Glow的系统设计
2.3.1Glow的高阶IR
2.3.2Glow的低阶IR
2.3.3Glow的量化方法
2.3.4Glow的后端设计
2.4AI编译器特性总结
2.4.1AI编译器的多阶IR设计
2.4.2AI编译器的前端优化
2.4.3AI编译器的后端优化
第3章 定制化AI编译器设计与实现
3.1定制化AI编译器设计框架
3.2TVM的高阶中间表示
3.2.1TVM高阶中间表示的表达
3.2.2TVM高阶中间表示的数据表示实现
3.2.3TVM高阶中间表示的算子实现
3.3TVM的低阶中间表示
3.3.1TVM低阶中间表示的表达
3.3.2TVM代码生成的定制化开发
3.3.3TVM运行时的定制化开发
3.4TVM的前后端优化
3.4.1TVM pass的功能与实现
3.4.2TVM的前端优化
3.4.3TVM的后端优化
第4章 GPGPU编译器后端设计
4.1LLVM后端开发流程
4.1.1异构计算程序工作流程
4.1.2LLVM后端执行流程
4.1.3LLVM中的pass及其管理机制
4.2指令选择
4.2.1指令选择原理与实现方式
4.2.2基于SelectionDAG的指令选择
4.2.3快速指令选择
4.2.4全局指令选择
4.3指令调度
4.3.1指令调度原理
4.3.2LLVM中的指令调度器及其工作过程
4.3.3调度pass的定制
4.4寄存器分配
4.4.1寄存器分配原理
4.4.2LLVM寄存器分配
4.4.3贪厌寄存器分配实现过程分析
第5章 张量核的编程方法与编译器支持
5.1沃尔塔、图灵和安培架构特性
5.1.1沃尔塔架构特性
5.1.2图灵架构特性
5.1.3安培架构特性
5.2张量核编程方法
5.2.1WMMA API及其用法
5.2.2CUTLASS中的张量核编程
5.3编译器后端对张量核的支持
5.3.1wmma PTX指令及其用法
5.3.2mma和ldmatrix PTX指令及其用法
5.3.3WMMA intrinsic函数定义
5.3.4NVPTX后端对wmma PTX指令的支持
第6章 AI模型性能分析与编译器优化方法
6.1AI模型性能的衡量指标和影响因素
6.1.1计算访存比
6.1.2算术强度和操作字节比
6.1.3内存级并行性和线程束并行性
6.2SM占用率及其编程接口
6.2.1理论占用率和实际占用率
6.2.2理论占用率约束条件分析
6.2.3CUDA运行时占用率编程接口
6.3基于占用率的指令调度优化
6.3.1AMD GPU编程模型和硬件执行模型
6.3.2AMDGPU后端的指令调度算法优化
第7章 AI芯片软硬件系统接口设计
7.1GPGPU软硬件接口设计
7.1.1GPGPU主机端编程接口
7.1.2内核分派过程
7.1.3GPGPU硬件分派过程
7.2AI加速器软硬件接口设计
7.2.1AI加速器硬件架构
7.2.2AI加速器设备软件栈
7.3量化技术与实现
7.3.1量化技术原理
7.3.2算子量化和激活函数量化
7.3.3激活函数量化方法
参考文献