如图所示,大致可以将AI系统分为以下几个具体的方向:
AI框架不仅仅是指如PyTorch等训练框架,还包括推理框架。其负责提供用户前端的AI编程语言,接口和工具链。负责静态程序分析与计算图构建,编译优化等工作。AI框架本身通过提供供用户编程的API获取用户表达的模型,数据读取等意图,在静态程序分析阶段完成尽可能的自动前向计算图构建,自动求导补全反向传播计算图,计算图整体编译优化,算子内循环编译优化等。
AI框架充分赋能深度学习领域,为AI算法的开发者提供了极大便利。早期的AI框架主要应用于学术界,如Theano、torch等,随着深度学习的快速发展以及在工业界的不断拓展,不断有新的AI框架被提出以满足不同场景的应用。
但是随着AI技术应用的全面发展,各厂家根据自身业务场景的需求,在AI硬件和算法上不断优化和探索,AI系统的体系结构越来越复杂,更多新的AI加速芯片被提出来,其设计变得更加多样化,AI框架运行的硬件环境和算法也趋于更多样和复杂,单一AI框架已经无法满足和平衡所有特性。所以,为了提供不同框架和硬件体系结构之间的迁移性,ONNX等中间IR被提出,其定义了表示神经网络模型的统一格式,以促进不同AI框架之间的模型转换。
为了实现硬件的多样性,需要将神经网络模型计算映射到不同架构的硬件中执行。在通用硬件上,高度优化的线性代数库为神经网络模型计算提供了基础加速库。此外,大多数硬件供应商还发布了专属的神经网络模型计算优化库,如:MKL-DNN和cuDNN等,但基于基础加速库的优化往往落后于深度学习算法模型的更新,且大多数情况下需要针对不同的平台进行定制化的开发。
为了解决多硬件平台上的性能优化的问题,多种AI编译器被提出并得到了普及和应用,比如:TVM,Glow,XLA和Jittor等。AI编译器以神经网络模型作为输入,将AI计算任务通过一层或多层中间表达IR进行翻译和优化,最后转化为目标硬件上可执行的代码,与传统的编译器(LLVM)类似,AI编译器也采用前端、中间表示和后端分层设计的方式。
AI编译与计算架构负责AI模型在真正运行前的编译和系统运行时的动态调度与优化。当获取的网络模型计算图部署于单卡、多卡甚至是分布式AI集群的环境,运行期的框架需要对整体的计算图按照执行顺序调度算子与任务的执行、多路复用资源,做好内存等资源的分配与释放。包括并不限于以下部分:
负责程序的真正执行、互联与加速。在更广的层面,作业与作业间需要平台提供调度,运行期资源分配与环境隔离。包括并不限于以下部分:
虽然AI系统在总的方向上分为开发体验层、框架层、编译与运行时和硬件体系结构和AI芯片4层结构。但是我们将在后续章节中,将会围绕核心系统软硬件,如AI训练和推理框架,AI编译器,AI芯片,部分涉及更广泛的AI系统生态中的重要内容如算法等展开介绍。
除了以上重要的AI系统构成之外,随着人工智能应用越来越广泛,我们还可以看到更广泛的AI系统生态的构成。其中包含以下领域:
通过核心系统软硬件,底层的基础架构已经可以给上层提供算力,存储,网络等资源池,可以按需给需要执行的深度学习作业隔离出指定规格的资源,执行深度学习作业,类似传统操作系统已经完成底层硬件的抽象与资源隔离,只需要用户的应用提交到系统中被执行和管理。
通过深度学习算法与框架,用户可以表达模型设计和训练配置等需求,就像给提供了一套特定领域的“编程语言”,并且提供了相应的编译器及工具链可以翻译成运行时软硬件环境可以执行的指令。
随着深度学习高速发展,更大的搜索空间,运行时才能获取的数据,模型安全与隐私,部署推理的多样化需求变得日益迫切,我们需要考虑除训练以外更多的AI系统问题。