写点什么

深度学习框架简史

  • 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:403614

评论 1 条评论

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

网络地址转换(NAT)(一)

我叫于豆豆吖.

11月月更

Apache Beam基本架构

穿过生命散发芬芳

11月月更 Apache Beam

dns-client占用cpu过高的问题解决方案

我是一个茶壶

win10 DNS 11月月更

uniapp简单入门

格斗家不爱在外太空沉思

vue.js uniapp 11月月更

如何免安装使用 Python?推荐 17 个在线的 Python 解释器!

Python猫

Python

互联网安全架构设计原则

阿泽🧸

互联网安全 11月月更

一文搞懂Go读写Excel文件

闫同学

Go 后端 11月月更

1024共码未来(一览中华风华,API First)

叶秋学长

程序员 API 1024 11月月更

从柯里化讲起,一网打尽 JavaScript 重要的高阶函数

掘金安东尼

前端 11月月更

重磅!哈啰 Quark Design 正式开源,下一代跨技术栈前端组件库

Allan sir

前端 前端开发 WebContents 11月月更

铸剑记:2022国产手机自研技术演义

脑极体

【Linux】调试器-gdb使用

过眼云烟

学习 记录 11月月更

快速创建软件安装包-ClickOnce

沙漠尽头的狼

写给关系数据库开发者的 TDengine 入门指南

TDengine

数据库 tdengine 时序数据库

2022-11-02:以下go语言代码输出什么?A:编译错误;B:apple;C:ant;D:panic。 package main import “fmt“ func main() {

福大大架构师每日一题

golang 福大大 选择题

第一篇文章 | 记录我的Java学习之路 | 一切从零开始

祖国滴花骨朵儿

学习笔记 Java学习 零基础 11月月更

Best Practices for Node.js Security

Mahipal_Nehra

JavaScript node.js security Node Best Practice

【愚公系列】2022年11月 Go教学课程 039-文件操作

愚公搬代码

11月月更

聊聊香港优才(56/100)

hackstoic

深度测评FL Studio性能,多年Fl Studio使用感受分享

懒得勤快

🚀使用“release-it”一气呵成:version、tag、changelog 等

小鑫同学

前端 nodejs 11月月更

峰会实录 | StarRocks PMC Chair 赵纯:数据分析的极速统一3.0 时代

StarRocks

数据库

python小知识-python序列化

AIWeker

Python 人工智能 python小知识 11月月更

跟着卷卷龙一起学Camera--MIPI 02

卷卷龙

ISP camera 11月月更

微信小程序—制作一个简单的跑步小程序

格斗家不爱在外太空沉思

JavaScript 微信小程序 11月月更

uniapp多端分享(app,小程序,公众号)

格斗家不爱在外太空沉思

vue.js uniapp 11月月更

Matplotlib基础教程之折线图

芯动大师

Python matplotlib 11月月更

小平台SEO服务崛起:有搜索习惯和需求就有SEO服务

石头IT视角

从1024开始,我们漫谈编程的本质

闫同学

编程 编译原理 11月月更

web--文件上传

我是一个茶壶

WEB安全 文件上传 11月月更

计算机网络:组帧

timerring

计算机网络 11月月更

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