写点什么

深度学习框架简史

  • 2020-12-28
  • 本文字数:3401 字

    阅读完需:约 11 分钟

深度学习框架简史

过去⼗年,机器学习(尤其是深度学习领域)涌现了⼤量算法和应⽤。在这些深度学习算法和应⽤涌现的背后,是各种各样的深度学习⼯具和框架。它们是机器学习⾰命的脚⼿架:TensorFlow 和 PyTorch 等深度学习框架的⼴泛使⽤,使许多机器学习从业者能够使⽤适合领域的特定编程语⾔和丰富的构建模块更容易地组装模型。


回顾深度学习框架的演变,我们可以清楚地看到深度学习框架和深度学习算法之间的紧密耦合关系。这种相互依赖的良性循环推动了深度学习框架和工具的快速发展。

石器时代(21 世纪初)

神经网络的概念已经出现一段时间了。在 21 世纪初之前,有一些工具可以用来描述和开发神经网络。这些工具包括 MATLAB、OpenNN、Torch 等,它们要么不是专门为神经网络模型开发定制的,要么拥有复杂的用户 api,缺乏 GPU 支持。在此期间,ML 实践者在使用这些原始的深度学习框架时不得不做很多繁重的工作。


青铜时代(~2012 年)

2012 年,多伦多大学的 Alex Krizhevsky 等人提出了一种深度神经网络架构,后来被称为 AlexNet[1],该架构在 ImageNet 数据集上达到了 SOTA 精度,并大大超过了第二名的选手。这一出色的结果引发了深度神经网络的热潮,此后各种深度神经网络模型在 ImageNet 数据集的准确性上不断创下新高。


大约在这个时候,一些早期的深度学习框架,如 Caffe、Chainer 和 Theano 应运而生。使用这些框架,用户可以方便地建立复杂的深度神经网络模型,如 CNN、RNN、LSTM 等。此外,这些框架还支持多 GPU 训练,这大大减少了对这些模型的训练时间,并且能够对以前无法装入单一 GPU 内存的大型模型进行训练。在这些框架中,Caffe 和 Theano 使用声明式编程风格,而 Chainer 采用命令式编程风格。这两种不同的编程风格也为即将到来的深度学习框架设定了两条不同的开发路径。


铁器时代(2015 ~ 2016)

AlexNet 的成功引起了计算机视觉领域的高度关注,并重新点燃了神经网络的希望,大型科技公司加入了开发深度学习框架的行列。其中,谷歌开源了著名的 TensorFlow 框架,它至今仍是 ML 领域最流行的深度学习框架。Caffe 的发明者加入了 Facebook 并发布了 Caffe2;与此同时,Facebook AI 研究(FAIR)团队也发布了另一个流行的框架 PyTorch,它基于 Torch 框架,但使用了更流行的 Python api。微软研究院开发了 CNTK 框架。亚马逊采用了 MXNet,这是华盛顿大学、CMU 和其他机构的联合学术项目。TensorFlow 和 CNTK 借鉴了 Theano 的声明式编程风格,而 PyTorch 则继承了 Torch 的直观和用户友好的命令式编程风格。命令式编程风格更加灵活(比如定义一个 While 循环等)并且容易跟踪,而声明式编程风格通常为内存和基于计算图的运行时优化提供了更多的空间。另一方面,被称为「mix」-net 的 MXNet 同时支持一组符号(声明性)api 和一组命令式 api,并通过一种称为杂交(hybridization)的方法优化了使用命令式 api 描述的模型的性能,从而享受了这两个领域的好处。


2015 年,何凯明等人提出了 ResNet[2],再次突破了图像分类的边界,在 ImageNet 的准确率上再创新高。业界和学界已经达成共识,深度学习将成为下一个重大技术趋势,解决各种领域的挑战,这些挑战在过去被认为是不可能的。在此期间,所有深度学习框架都对多 GPU 训练和分布式训练进行了优化,提供了更加用户直观的 api,并衍生出了专门针对计算机视觉、自然语言处理等特定任务的 model zoo 和工具包。还值得注意的是,Francois Chollet 几乎是独自开发了 Keras 框架,该框架在现有框架(如 TensorFlow 和 MXNet)之上提供了神经网络和构建块的更直观的高级抽象。从今天开始,这种抽象成为 TensorFlow 中模型层面事实上的 api。


罗马时代(2019 ~ 2020)

正如人类历史的发展一样,深度学习框架经过一轮激烈的竞争,最终形成了两大「帝国」:TensorFlow 和 PyTorch 的双头垄断,这两大「帝国」代表了深度学习框架研发和生产中 95% 以上的用例。2019 年,Chainer 团队_将他们的开发工作转移到 PyTorch;类似地,微软_停止了 CNTK 框架的积极开发,部分团队成员转而支持 Windows 和 ONNX 运行时上的 PyTorch。Keras 被 TensorFlow 收编,并在 TensorFlow 2.0 版本中成为其高级 api 之一。在深度学习框架领域,MXNet 仍然位居第三。


在此期间,深度学习框架空间有两种趋势。


首先是大型模型训练。随着 BERT[3] 的诞生,以及它的近亲 GPT-3[4] 的诞生,训练大型模型的能力成为了深度学习框架的理想特性。这就要求深度学习框架能够在数百台(如果不是数千台的话)设备的规模下有效地进行训练。


第二个趋势是可用性。这一时期的深度学习框架都采用命令式编程风格,语义灵活,调试方便。同时,这些框架还提供了用户级的装饰器或 api,以通过一些 JIT(即时)编译器技术实现高性能。

工业时代(2021+)

深度学习在自动驾驶、个性化推荐、自然语言理解到医疗保健等广泛领域取得了巨大成功,带来了前所未有的用户、开发者和投资者浪潮。这也是未来十年开发深度学习工具和框架的黄金时期。尽管深度学习框架从一开始就有了长足的发展,但它们之于深度学习的地位还远远不如编程语言 JAVA/ c++ 之于互联网应用那样的成熟。还有很多令人兴奋的机会和工作有待探索和完成。


展望未来,有⼏个技术趋势有望成为下⼀代深度学习框架的主流:


  • 基于编译器的算⼦(operator)优化。如今,许多操作符内核都是通过⼿动或第三⽅库实现的,⽐如 BLAS、CuDNN、OneDNN 等,这些库针对特定的硬件平台。当模型被训练或部署在不同的硬件平台上时,这会造成很⼤的开销。此外,新的深度学习算法的增⻓速度往往⽐这些库的迭代速度快得多,这使得这些库常常不⽀持新的算⼦。深度学习编译器,如 Apache TVM, MLIR, Facebook Glow 等,已经提出了在任何硬件后端上有效优化和运⾏计算的建议。它们可以作为深度学习框架的整个后端。

  • 统⼀的 API 标准。许多深度学习框架共享类似但略有不同的⽤户 API。这给⽤户从⼀个框架切换到另⼀个框架带来了困难和不必要的学习曲线。虽然⼤多数机器学习从业者和数据科学家都熟悉 NumPy 库,但在新的深度学习框架中,NumPy API⾃然会成为 tenor 操作 API 的标准。我们已经看到快速发展的框架 JAX 受到了⽤户的热烈欢迎,它的 API 完全与 NumPy 兼容。

  • 数据搬运作为⼀等公⺠。多节点或多设备训练正在成为深度神经⽹络训练的规范。最近开发的深度学习框架,如 OneFlow,从设计的第⼀天起就将这⼀观点纳⼊设计考虑,并将数据通信视为模型训练的整体计算图的⼀部分。这为性能优化打开了更多的机会,⽽且由于它不需要像以前的深度学习框架那样维护多种训练策略(单设备 vs 分布式训练),因此除了提供更好的性能之外,它还可以提供更简单的⽤户界⾯。

总 结


我们正处于⼀场⼈⼯智能⾰命的黎明。⼈⼯智能领域的新研究和新应⽤正在以前所未有的速度涌现。⼋年前,AlexNet⽹络包含 6000 万个参数;最新的 GPT-3⽹络包含 1750 亿参数,⽹络规模在 8 年内增加了 3000 倍!另⼀⽅⾯,⼈类的⼤脑包含⼤约 100 万亿个参数(即突触)。这表明,如果有可能的话,神经⽹络要达到⼈类的智能⽔平还有很⼤的差距。


这种难以接受的⽹络规模对模型训练和推理的硬件和软件计算效率都提出了很⼤的挑战。未来的深度学习框架很可能是算法、⾼性能计算、硬件加速器和分布式系统的跨学科成果。


作者简介

Lin Yuan 是 Waymo 的一名资深软件工程师。他为自动驾驶汽车的感知和规划任务开发了机器学习平台。在加入 Waymo 之前,他曾在 Amazon AI 从事大规模分布式学习。他是 Apache 深度学习框架 MXNet 和 LFAI 分布式学习库 Horovod 的代码提交者和主要贡献者。


在从事 AI 领域的工作之前,他在 VLSI 设计和自动化方面积累了丰富的经验。他曾担任半导体设计自动化会议 ICCAD 和 DAC 的技术程序委员会(Technical Program Committee)委员。他获得了马里兰大学帕克分校的计算机工程博士学位。


注释:


[1] Alex Krizhevsky et al., ImageNet Classification with Deep Convolutional Neural Networks(2012), NeurIPS 2012


[2] Kaiming He et al., Deep Residual Learning for Image Recognition (2016), CVPR 2016


[3] Jacob Devlin et al., BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2018)


[4] Tom B. Brown et al., Language Models are Few-Shot Learners (2020), NeurIPS 2020


[5] Announcing the Consortium for Python Data API Standards (2020)


原⽂链接:https://syncedreview.com/2020/12/14/a-brief-history-of-deep-learning-frameworks/

2020-12-28 11:403265

评论 1 条评论

发布
用户头像
这篇文章翻译的有很多问题啊,很多词都没有译过了,出现了很多 “⼋” 型的字
2020-12-30 09:23
回复
没有更多了
发现更多内容

C++ primer -- 第18章 探讨C++新标准

Dreamer

c++

Caffe 安装踩坑记录

Dreamer

caffe

试用阿里网盘内测版-不限速、无广告、隐私安全我全都要

郭旭东

阿里云网盘

架构师训练营第 1 期 第 3 周作业

李循律

极客大学架构师训练营

TensorFlow 篇 | TensorFlow 数据输入的最佳实践

Alex

tensorflow keras input pipeline dataset

快速掌握并发编程---深入学习ThreadLocal

田维常

目标检测综述

Dreamer

专利申请其实并不难?四步教你玩转专利申请!

华为云开发者联盟

专利 保护

云图说|知道吗?在和你对话的那头,也许是个机器人哦~

华为云开发者联盟

华为 AI 机器人

精解四大集合框架:Set核心知识总结

田维常

程序员 后端

直播预告 | CloudQuery初体验——安装及多数据源连接

BinTools图尔兹

数据库 sql 安全 工具软件 dba

架构师训练营第 1 期 第 5 周作业

李循律

极客大学架构师训练营

TypeScript魔法堂:函数类型声明其实很复杂

肥仔John

Java typescript

SpringBoot-技术专题-war包部署读取外部配置Properties

洛神灬殇

在2020年更受关注和追捧的JS框架

葡萄城技术团队

react.js Vue js Svelte

一个研发团队是如何坚持7年技术分享的?

爱吃小舅的鱼

团队管理 程序员 敏捷开发 研发管理 技术分享

面试时说Redis是单线程的,被喷惨了!

redis 编程 程序员 计算机

华为云的销售凭什么说“赢”了罗振宇?

ToB行业头条

tob

数据结构与算法系列之链表操作全集(二)(GO)

书旅

数据结构 算法 Go 语言

基于React+Koa实现一个h5编辑器

徐小夕

Java nodejs H5 React koa

当下工作流管理系统的发展趋势

Marilyn

敏捷开发 快速开发 软件架构 企业开发

Forsage矩阵系统开发,智能合约搭建

薇電13242772558

独立显卡市场又一巨头跻入,英特尔锐炬® Xe MAX 独立显卡来了!

E科讯

架构师训练营 1 期第 6 周作业

木头发芽

C++ primer -- 第17章 输入,输出和文件

Dreamer

c++

写文档太麻烦,试试这款 IDEA 插件吧!

程序员小航

Java markdown IDEA idea插件 文档

EDA最强攻略,如何为EDA选择存储?

焱融科技

分布式 高性能 存储 半导体 EDA

MySQL中事务的持久性实现原理

X先生

MySQL 数据库 sql 数据库事务 事务

Docker底层技术

混沌畅想

Docker 容器 DevOps 底层技术

接口测试人员需要掌握的知识技能

测试人生路

接口测试

SpringBoot-技术专题-war包部署读取外部配置Yml

洛神灬殇

深度学习框架简史_大数据_Lin Yuan_InfoQ精选文章