根据技术所处环节及定位,当前主流 AI 框架的核心技术可分 为基础层、组件层和生态层。
1.基础层
基础层实现 AI 框架最基础核心的功能,具体包括编程开发、编译优化以及硬件使能三个子层。编程开发层是开发者与 AI 框架互动的窗口,为开发者提供构建 AI 模型的 API 接口。编译优化层是 AI 框架的关键部分,负责完成 AI 模型的编译优化并调度硬件资源完成计算。硬件使能层是 AI 框架与 AI 算力硬件对接的通道,帮助开发者屏蔽底层硬件技术细节。
编程开发-编程接口 API:开发者通过调用编程接口来描述算法的计算过程。对于开发者来说,编程接口的易用性以及接口的表达能力非常重要,对算法的描述会映射到计算图上。编程接口主要可以分为 3 类:一类是基于数据流图的编程接口,流行的基于数据流图的机器学习编程框架包括 TensorFlow、MXNet、Theano、Torch7等;另一类是基于层的编程接口,如 Caffe;还有一类是基于算法的编程接口,主要用于传统机器学习算法的实现,如 Scikit-Learn。编程开发-编码语言:人工智能应用场景众多,人工智能开发者基于不同场景选择使用的编程语言多样,完善的 AI 框架应支持多种不同的语言,例如 Python/仓颉/Julia 等。面向使用不同编程语言的开发者,AI 框架需要提供功能相同、性能可比的开发服务和技术支持。
编译优化-分布式并行:指数据流并行、模型并行、Pipeline 并行、优化器并行等策略。随着模型规模的增大,传统的数据并行无法有效处理,自动并行技术的使用将会是常态。需要将大模型切分到不同的设备上,切分就是将不同大块计算切分成小块计算,并将小块计算发送到不同的计算资源进行计算,最后将小块计算的结构进行规约合并。而切分策略寻优是很困难的,不同的切分产生的通信量差异巨大,计算利用率也很不一样,比如 Pipeline 并行往往在计算利用率方面存在较大的挑战,算子切分的并行则在通信量方面存在较大的挑战,需要 AI 框架来支持。
编译优化-自动微分:自动微分是将一个复杂的数学运算过程分解为一系列简单的基本运算,每一项基本运算都可以通过查表得出来。自动微分有两种形式,包括前向模式(forward mode)和反向模式(reverse mode),前向模式是在计算图前向传播的同时计算微分,反向模式需要对计算图进行一次正向计算,得出输出值,再进行反向传播。因此反向模式的内存开销要大一点,它需要保存正向传播中的中间变量值,这些变量值用于反向传播的时候计算导数。
编译优化-动静转换:静态图在定义执行前的所有操作和网络结构,并将其呈现给传感器流,在训练期间提供了更高的性能,但这样做的代价是不易于使用、不够灵活。动态图计算是即时执行的,提供了更大的灵活性和更容易的调试,但这样做的代价是性能较低。TensorFlow2.0、MindSpore 等均支持动态图和静态图的转换技术,可以实现计算效率和灵活性的平衡。
编译优化-模型轻量化:轻量化是指为满足 AI 模型尺寸小、计算复杂度低、电池耗电量低、下发更新部署灵活等要求下,AI 框架所配置的轻量化技术。一般来说,模型轻量化就是指模型压缩和加速,其中压缩重点在于减少网络参数量,加速则侧重在降低计算复杂度、提升并行能力等。算法层压缩加速主要包括结构优化(如矩阵分解、分组卷积、小卷积核等)、量化与定点化、模型剪枝、模型蒸馏等;框架层加速主要包括编译优化、缓存优化、稀疏存储和计算、NEON 指令应用、算子优化等。
编译优化-图算融合:通过自动分析和优化现有网络计算图逻辑,并结合目标硬件能力,对计算图进行计算化简和替代、算子拆分和融合、算子特例化编译等优化,以提升设备计算资源利用率,实现对网络性能的整体优化。相比传统优化技术,图算融合具有多算子跨边界联合优化、与算子编译跨层协同、基于 Polyhedral 的算子即时编译等独特优势。另外,图算融合只需要开发者打开对应配置,整个优化过程即可自动完成,不需要网络开发人员进行其它额外感知,使得开发者可以聚焦网络算法实现。
编译优化-内存优化:由于硬件系统的内存资源有限,特别是AI 芯片的内存资源有限,需要有高效的内存优化策略降低 AI 网络对系统内存的消耗。一般常用的内存优化技术有:静态内存复用优化和动态内存分配机制。静态内存复用优化会分析计算图的数据流关系,基于数据的内存占用大小、数据间的生命周期重叠关系,规划数据的内存复用策略,从而最小化内存占用。动态内存分配机制是在运行时创建大块内存,并按照实际算子执行过程中需要的内存进行内存切片提供,当算子执行完且相关数据的引用均已结束时,释放内存切片,从而实现内存的有效复用。
编译优化-算子生成:AI 框架会提供基础常用的算子,但是这些算子往往不能满足开发者算法不断演进的需求。因此,需要 AI框架具备针对不同算力设备的统一算子生成和优化的能力,使得开发人员只需要编写高层编程语言(如 DSL)就可以通过 AI 框架提供的算子编译生成能力,生成高质量的底层算子,极大降低 AI 框架和硬件平台的开发和维护成本,拓展应用范围。
编译优化-中间表示:中间表示(Intermediate Representation,简称 IR)是对计算图和算子格式的定义。完备的中间表示需要支持不同硬件设备算子定义和计算图的性能优化,支持不同类型的 AI模型网络结构的灵活表达,支持不同设备间的模型中转和迁移。硬件接入-计算算子:在深度学习领域计算算子特指计算图中的一个函数节点,一个在张量上执行的计算操作,它接受零或多个张量作为输入,得到零或多个张量作为输出,利用梯度、散度、旋度的表达方式进行计算。
硬件接入-通信算子:用于分布式节点通信的函数节点。
2.组件层
组件层主要提供 AI 模型生命周期的可配置高阶功能组件,实现细分领域性能的优化提升,包括编译优化组件、科学计算组件、安全可信组件、工具组件等,对人工智能模型开发人员可见。
并行及优化组件-自动并行:指对自动并行技术的多样化组合支持。AI 框架支持开发者进行多种不同并行进行组合,根据需要形成混合并行策略,例如数据流并行和模型并行的组合、数据流和Pipeline 并行的组合等,支持开发者个性化的选择自己的并行策略,以更灵活的姿态支持人工智能模型训练、应用适配。
并行及优化组件-高阶优化器:AI 框架支持多种不同的一阶/二阶优化器,能为开发者提供灵活方便的接口,例如 SGD 优化器、SGDM 优化器、NAG 优化器、AdaGrad 优化器、AdaDelta 优化器、Adam 优化器、Nadam 优化器等。
科学计算组件-科学计算(数值方法):人工智能发展的重要方向之一是科学计算,因此要求 AI 框架向开发者提供科学计算相关的功能支持,通过函数式编程范式为 AI+科学计算提供融合的表达方式,使得开发者以更加接近数学计算的方式进行编程,以缓解当前 AI 框架的编程接口主要面向深度神经网络设计,但是科学计算中需要大量的数学公式的表达(例如微分方程求解)的情况。
科学计算组件-科学计算(AI 方法):针对 AI 方法直接替代数值方法取得计算结果的形式,AI 框架需要具备“AI+科学计算”统一的数据底座,将传统科学计算的输入数据(如传统科学计算软件生成的仿真数据)转换为 AI 框架的输入数据(即张量)。针对 AI 方法与数值方法配合取得计算结果形式,除了需要具备统一的数据引擎之外,AI 框架需要支持传统数值计算的方法,例如高阶微分求解、线性代数计算等,并通过计算图对传统数值方法和 AI 方法的混合计算优化,从而实现“AI+科学计算”端到端加速。
安全可信组件-AI 可解释:AI 框架需要具备三个层面的能力支持可解释人工智能。建模前的“数据可解释”,分析数据分布,找出代表性的特征,在训练时选择需要的特征进行建模。构建“可解释人工智能模型”,通过与传统机器学习(如贝叶斯概率编程)结合的方式,对人工智能结构进行补充,平衡学习结果的有效性和学习模型的可解释性。对已构筑模型进行“解释性分析”,通过分析人工智能模型的输入、输出、中间信息的以来关系分析(如TB-Net的方式)及验证模型的逻辑。
安全可信组件-数据安全:人工智能领域的数据安全问题不仅仅涉及到原始数据本身的保护,还要防止通过模型推理结果反推出数据隐私关键信息。因此,AI框架本身除了要提供数据资产保护能力,还需要通过差分隐私等方式,保护模型数据的隐私。同时,为了源头保护数据安全,AI框架通过联邦学习等方式进行模型训练,使得数据不出端的情况下模型得到训练更新。
安全可信组件-模型安全:训练模型时样本训练不足,使得模型泛化能力不足,导致模型面对恶意样本时,无法给出正确的判断结果。为此,AI框架首先需要提供丰富的人工智能鲁棒性检测工具,通过黑盒、白盒、灰盒测试等对抗检测技术测试人工智能模型的鲁棒性,如静态结构分析,动态路径分析等;其次,AI框架可以通过支持网络蒸馏、对抗训练等方式帮助开发者提高模型的鲁棒性。
工具组件-训练可视化:支持训练过程可视化,可通过页面直接查看训练过程中的核心内容,包括训练标量信息、参数分布图、计算图、数据图、数据抽样等模块。
工具组件-调试器:神经网络训练中经常出现数值误差情况,如无穷大等,开发者希望分析训练无法收敛的原因。但是,由于计算被封装为黑盒,以图的方式执行,开发者很难定位其中的错误。调试器是训练调试的工具,开发者可以在训练过程中查看图的内部结构以及节点的输入/输出,例如查看一个张量的值,查看图中的节点对应的Python代码等。此外,开发者还可以选择一组节点设置条件断点,实时监控节点的计算结果。
3.生态层
生态层主要面向应用服务,用以支持基于AI框架开发的各种人工智能模型的应用、维护和改进,对于开发人员和应用人员均可见。
套件/模型库:AI框架应对领域通用任务提供预训练模型或者定义好的模型结构,方便开发者获取和开展人工智能模型训练和推理,如CV、NLP等。
AI领域扩展库:AI框架要能够提供丰富的领域任务支持,并为相关任务提供典型案例,从而提供更好的应用服务,如GNN、强化学习、迁移学习等。
AI+科学计算:与CV、NLP等传统信息领域不同,科学计算问题的求解需要具备相对专业的领域知识。为了加速AI+科学计算融合的研究和落地,AI框架需要面向不同的科学计算领域(如电磁仿真、科学制药、能源、气象、生物、材料等)提供简单易用的科学计算套件,这些套件包含高质量的领域数据集、高精度的基础AI模型和用于前后处理的工具集合。
文档:AI框架应提供完善的文档体系,包括但不限于框架说明文档、框架API文档、框架版本变更文档、框架常见问题文档、框架特性文档等。
社区:人工智能服务发展需要社区支持,AI框架应该经营或者维护良好的社区环境,好的AI框架具备较好的维护性和易用性,同时AI框架社区中应该有代表性项目并长期支持基于该框架的项目和应用。
[免责声明]如需转载请注明原创来源;本站部分文章和图片来源网络编辑,如存在版权问题请发送邮件至398879136@qq.com,我们会在3个工作日内处理。非原创标注的文章,观点仅代表作者本人,不代表本站立场。