2012 年,Alex Krizhevsky 等人提出了 AlexNet 一种深度神经网络架构,在 ImageNet 数据集上达到了最佳精度,并碾压第二名提升15%以上的准确率,引爆了深度神经网络的热潮。 自此极大地推动了 AI 框架的发展,出现了 Caffe、Chainer 和 Theano 等具有代表性的早期 AI 框架,帮助开发者方便地建立复杂的深度神经网络模型(如 CNN、RNN、LSTM 等)。不仅如此,这些框架还支持多 GPU 训练,让开展更大、更深的模型训练成为可能。在这一阶段,AI 框架体系已经初步形成,声明式编程和命令式编程为下一阶段的 AI 框架发展的两条截然不同的道路做了铺垫。 2015 年,何恺明等人提出的 ResNet,再次突破了图像分类的边界,在 ImageNet 数据集上的准确率再创新高,也凝聚了产业界和学界的共识,即深度学习将成为下一个重大技术趋势。 2016年 Google 开源了 TensorFlow 框架,Facebook AI 研究团队也发布了基于动态图的AI框架 PyTorch,该框架拓展自 Torch 框架,但使用了更流行的 Python 进行重构整体对外 API。Caffe 的发明者加入了 Facebook(现更名为 Meta)并发布了 Caffe2 并融入了 PyTorch 的推理生态;与此同时,微软研究院开发了 CNTK 框架。Amazon 采用了这是华盛顿大学、CMU 和其他机构的联合学术项目 MXNet。国内百度则率先布局了 PaddlePaddle 飞桨AI框架并于 2016 年发布。 在 AI 框架的爆发阶段,AI系统也迎来了繁荣,而在不断发展的基础上,各种框架不断迭代,也被开发者自然选择。经过激烈的竞争后,最终形成了两大阵营,TensorFlow 和 PyTorch 双头垄断。2019 年,Chainer 团队将他们的开发工作转移到 PyTorch,Microsoft 停止了 CNTK 框架的积极开发,部分团队成员转而支持 PyTorch;Keras 被 TensorFlow 收编,并在 TensorFlow2.X 版本中成为其高级 API 之一。 随着 AI 的进一步发展,AI 应用场景的扩展以及与更多领域交叉融合进程的加快,新的趋势不断涌现,越来越多的需求被提出。 例如超大规模模型的出现(GPT-3、ChatGPT等),新的趋势给 AI 框架提出了更高的要求。例如超大规模模型的出现(GPT-3、ChatGPT等);如对全场景多任务的支持、对异构算力支持等。这就要求 AI 框架最大化的实现编译优化,更好地利用算力、调动算力,充分发挥集群硬件资源的潜力。此外,AI 与社会伦理的痛点问题也促使可信赖 AI 、或则 AI 安全在 AI 框架层面的进步。 基于以上背景,现有的主流 AI 框架都在探索下一代 AI 框架的发展方向,如 2020 年华为推出昇思 MindSpore,在全场景协同、可信赖方 面有一定的突破;旷视推出天元 MegEngine,在训练推理一体化方面深度布局;PyTorch 捐赠给 Linux 基金会,并面向图模式提出了新的架构和新的版本 PyTorch2.X。 在这一阶段,AI 框架正向着全场景支持、大模型、分布式AI、 超大规模 AI、安全可信 AI 等技术特性深化探索,不断实现新的突破。 技术维度以技术维度的角度去对 AI 框架进行划分,其主要经历了三代架构,其与深度学习范式下的神经网络技术发展和编程语言、及其编程体系的发展有着紧密的关联。 第一代 AI 框架在时间上主要是在 2010 年前,面向需要解决问题有:1)机器学习 ML 中缺乏统一的算法库,2)提供稳定和统一的神经网络 NN 定义。其对应的AI框架框架其实广义上并不能称为 AI 框架,更多的是对机器学习中的算法进行了统一的封装,并在一定程度上提供了少量的神经网络模型算法和API的定义。具体形态有2种: 第一种的主要特点的是以库(Library)的方式对外提供脚本式编程,方便开发者通过简单配置的形式定义神经网络,并且针对特殊的机器学习 ML、神经网络NN算法提供接口,其比较具有代表性意义的是 MATLAB 和 SciPy。另外还有针对矩阵计算提供特定的计算接口的 NumPy。优点是:面向 AI 领域提供了一定程度的可编程性;支持CPU加速计算。 第二种的在编程方面,以CNN网络模型为主,由常用的layers组成,如:Convolution, Pooling, BatchNorm, Activation等,都是以Layer Base为驱动,可以通过简单配置文件的形式定义神经网络。模型可由一些常用layer构成一个简单的图,AI 框架提供每一个layer及其梯度计算实现。这方面具有代表性的作品是 Torch、Theano 等AI框架。其优点是提供了一定程度的可编程性,计算性能有一定的提升,部分支持 GPU/NPU 加速计算。 同时,第一代 AI 框架的缺点也比较明显,主要集中在1)灵活性和2)面向新场景支持不足。 首先是易用性的限制难以满足深度学习的快速发展,主要是层出不穷的新型网络结构,新的网络层需要重新实现前向和后向计算;其次是第一代 AI 框架大部分使用非高级语言实现,修改和定制化成本较高,对开发者不友好。最后是新优化器要求对梯度和参数进行更通用复杂的运算。 随着生成对抗网络模型 GAN、深度强化学习 DRL、Stable Diffusion 等新的结构出现,基于简单的“前向+后向”的训练模式难以满足新的训练模式。例如循环神经网络 LSTM 需要引入控制流、对抗神经网络 GAN 需要两个网络交替训练,强化学习模型 RL 需要和外部环境进行交互等众多场景没办法满足新涌现的场景。 第二代AI框架在技术上,统一称为基于数据流图(DAG)的计算框架:将复杂的神经网络模型,根据数据流拆解为若干处理环节,构建数据流图,数据流图中的处理环节相互独立,支持混合编排控制流与计算,以任务流为最终导向,AI 框架将数据流图转换为计算机可以执行或者识别的任务流图,通过执行引擎(Runtime)解析任务流进行处理环节的分发调度、监控与结果回传,最终实现神经网络模型的构建与运行。 以数据流图描述深度神经网络,前期实践最终催生出了工业级 AI 框架,如TensorFlow 和PyTorch,这一时期同时伴随着如Chainer,DyNet等激发了 AI 框架设计灵感的诸多实验项目。TensorFlow 和 PyTorch 代表了现今 AI 框架框架的两种不同的设计路径:系统性能优先改善灵活性,和灵活性易用性优先改善系统性能。 这两种选择,随着神经网络算法研究和应用的更进一步发展,又逐步造成了 AI 框架在具体技术实现方案的分裂。 在第三代 AI 框架中,面向通用化场景,如 CNN、LSTM、RNN 等场景开始走向统一的设计架构,不同的AI框架在一定程度都会模仿或者参考 PyTorch 的动态图 Eager 模式,提升自身框架的易用性,使其更好地接入 AI 生态中。 目前在技术上一定程度开始迈进第三代AI框架,其主要面向设计特定领域语言(Domain-Specific Language,DSL)。最大的特性是:1)兼顾编程的灵活性和计算的高效性;2)提高描述神经网络算法表达能力和编程灵活性;3)通过编译期优化技术来改善运行时性能。 具体面向不同的业务场景会有一些差异(即特定领域),如 JAX 是 Autograd 和 XLA 的结合,作为一个高性能的数值计算库,更是结合了可组合的函数转换库,除了可用于AI场景的计算,更重要的是可以用于高性能机器学习研究。例如Taichi面向图形图像可微分编程,作为开源并行计算框架,可以用于云原生的3D内容创作。
|