2023了,学习深度学习框架哪个比较好?
我们知道AI框架在数学上对自动微分进行表达和处理最后表示称为开发者和应用程序都能很好地去编写深度学习中神经网络的工具和库整体流程如下所示除了要回答最核心的数学表示原理意外实际上AI框架还要思考和解决许多问题如AI框架如何对实际的神经网络实现多线程算子加速如何让程序执行在GPU/NPU上如何编译和优化开发者编写的代码因此一个能够商用版本的AI框架需要系统性梳理每一层中遇到的具体问题以便提供相关更好的开发特性前端面向用户如何灵活的表达一个深度学习模型算子执行计算如何保证每个算子的执行性能和泛化性微分更新参数如何自动、高效地提供求导运算后端系统相关如何将同一个算子跑在不同的加速设备上运行时如何自动地优化和调度网络模型进行计算下面内容将会去总结AI框架的目的其要求解决的技术问题和数学问题了解了其目的后真正地去根据时间的维度和和技术的维度梳理AI框架的发展脉络并对AI框架的未来进行思考。AI框架的目的神经网络是机器学习技术中一类具体算法分枝通过堆叠基本处理单元形成宽度和深度构建出一个带拓扑结构的高度复杂的非凸函数对蕴含在各类数据分布中的统计规律进行拟合。传统机器学习方法在面对不同应用时为了达到所需的学习效果往往需要重新选择函数空间设计新的学习目标。相比之下神经网络方法能够通过调节构成网络使用的处理单元处理单元之间的堆叠方式以及网络的学习算法用一种较为统一的算法设计视角解决各类应用任务很大程度上减轻了机器学习算法设计的选择困难。同时神经网络能够拟合海量数据深度学习方法在图像分类语音识别以及自然语言处理任务中取得的突破性进展揭示了构建更大规模的神经网络对大规模数据进行学习是一种有效的学习策略。然而深度神经网络应用的开发需要对软件栈的各个抽象层进行编程这对新算法的开发效率和算力都提出了很高的要求进而催生了 AI 框架的发展。AI框架可以让开发者更加专注于应用程序的业务逻辑而不需要关注底层的数学和计算细节。同时AI框架通常还提供可视化的界面使得开发者可以更加方便地设计、训练和优化自己的模型。在AI框架之上还会提供了一些预训练的网络模型可以直接用于一些常见的应用场景例如图像识别、语音识别和自然语言处理等。AI 框架的目的是为了在计算加速硬件GPU/NPU和AI集群上高效训练深度神经网络而设计的可编程系统需要同时兼顾以下互相制约设计目标可编程性与性能。1. 提供灵活的编程模型和编程接口自动推导计算图根据客户编写的神经网络模型和对应的代码构建自动微分功能并转换为计算机可以识别和执行的计算图。较好的支持与现有生态融合AI应用层出不穷需要提供良好的编程环境和编程体系给开发者方便接入这里以PyTorch框架为例对外提供超过2000 API。提供直观的模型构建方式简洁的神经网络计算编程语言使用易用的编程接口用高层次语义描述出各类主流深度学习模型和训练算法。而在编程范式主要是以声明式编程和命令式编程为主提供丰富的编程方式能够有效提提升开发者开发效率从而提升AI框架的易用性。2. 提供高效和可扩展的计算能力自动编译优化算法为可复用的处理单元提供高效实现使得AI算法在真正训练或者推理过程中执行得更快需要对计算图进行进一步的优化如子表达式消除、内核融合、内存优化等算法支持多设备、分布式计算等。根据不同体系结构和硬件设备自动并行化体系结构的差异主要是指针对 GPU、NPU、TPU等AI加速硬件的实现不同有必要进行深度优化而面对大模型、大规模分布式的冲击需要对自动分布式化、扩展多计算节点等进行性能提升。降低新模型的开发成本在添加新计算加速硬件GPU/NPU支持时降低增加计算原语和进行计算优化的开发成本。AI框架的发展AI 框架作为智能经济时代的中枢是 AI 开发环节中的基础工具承担着 AI 技术生态中操作系统的角色是 AI 学术创新与产业商业化的重要载体助力 AI 由理论走入实践快速进入了场景化应用时代也是发展 AI 所必需的基础设施之一。随着重要性的不断凸显AI 框架已经成为了 AI 产业创新的焦点之一引起了学术界、产业界的重视。时间维度结合 AI 的发展历程AI 框架在时间维度的发展大致可以分为四个阶段分别为12000 年初期的萌芽阶段、22012~2014年的成长阶段、32015 年~2019 年的爆发阶段和42020 年以后深化阶段。其在时间的发展脉络与 AI 特别是深度学习范式下的神经网络技术的异峰突起有非常紧密的联系。萌芽阶段在2020年前早期受限于计算能力不足萌芽阶段神经网络技术影响力相对有限因而出现了一些传统的机器学习工具来提供基本支持也就是 AI 框架的雏形但这些工具或者不是专门为神经网络模型开发定制的或者 API 极其复杂对开发者并不友好且并没有对异构加速算力如GPU/NPU等进行支持。缺点在于萌芽阶段的 AI 框架并不完善开发者需要编写大量基础的工作例如手写反向传播、搭建网络结构、自行设计优化器等。其以 Matlab 的神经网络库为代表作品。成长阶段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 团队将他们的开发工作转移到 PyTorchMicrosoft 停止了 CNTK 框架的积极开发部分团队成员转而支持 PyTorchKeras 被 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框架第一代 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 需要和外部环境进行交互等众多场景没办法满足新涌现的场景。