AI 系统组成
如图所示,大致可以将 AI 系统分为以下几个具体的方向:
AI 训练与推理框架
AI 框架不仅仅是指如 PyTorch 等训练框架,还包括推理框架。其负责提供用户前端的 AI 编程语言,接口和工具链。负责静态程序分析与计算图构建,编译优化等工作。AI 框架本身通过提供供用户编程的 API 获取用户表达的模型,数据读取等意图,在静态程序分析阶段完成尽可能的自动前向计算图构建,自动求导补全反向传播计算图,计算图整体编译优化,算子内循环编译优化等。
这一层尽可能让用户表达目标任务与 AI 算法,尽量少让用户关注底层实现(例如到底 AI 框架的实现是通过声明式编程方式还是命令式编程方式)是提升开发体验的较好的手段,但是过度的抽象会丧失灵活性的表达,在模型发展较快迭代频繁的时期用户还需要体验层兼顾灵活性和可调试性。开发体验层会调用编排底层框架的接口提供更加简洁的用户开发体验。包括并不限于以下领域:
- 网络模型构建:卷积神经网络 CNN、循环神经网络 RNN、Transformer 结构等,包括 if else 控制流等基本结构和算子支持与实现的 API。语言的基本语法和框架的 API 接口提供基本算子的支持。当前主要以使用 Python 语言内嵌调用 AI 框架的方式进行网络模型的开发,但是也出现控制流在原生语言层与模型中间表达割裂等问题。
- 模型算法实现:算法一般被封装为 AI 框架的配置或 API 供用户选择,有些 AI 框架也提供拦截接口给用户一定程度灵活性定制自定义算法。模型算法实现与网络模型结构构件还是有着明显的区别,例如网络模型构建只提供模型层面的构建,但是 AI 的算法实现流程如到底是训练还是推理,是实现强化学习、监督学习还是无监督学习等,属于模型算法的实现过程,只是其中内部的算法模型结构的构建属于网络模型部分。
- 计算图构建:静态计算图、动态计算图构建等。不同的 AI 框架类型决定了其使用静态还是动态图进行构建,静态图有利于获取更多信息做全图优化,动态图有利于调试,目前实际处于一个融合的状态,如 PyTorch2.X 版本后推出 Dynamo 特性支持原生静态图。
- 自动求导:高效地对网络模型自动求导等。由于网络模型中大部分算子较为通用,AI 框架提前封装好算子的自动求导函数,待用户触发训练过程自动透明的进行全模型的自动求导,以支持梯度下降等训练算法需要的权重梯度数据的获取。
- 中间表达构建:多层次中间表达等。通过构建网络模型的中间表达及多层中间表达,让模型本身可以更好的被下层 AI 编译器编译生成高效的后端代码。
- 流水线和工作流支持:流水线和工作流是实现模块解耦复用,可视化编程的前提,通过复用与可视化编程可以大幅降低组织内作业书写的门槛,如高性能数据加载器等。
- 工具链