写点什么

深度学习框架的评估与比较

2016 年 1 月 27 日

人工智能无疑是计算机世界的前沿领域,而深度学习无疑又是人工智能的研究热点,那么现在都有哪些开源的深度学习工具,他们各自的优缺点又是什么呢?最近 zer0n bamos 在 GitHub 上发表了一篇文章,对 Caffe CNTK TensorFlow Theano Torch 等深度学习工具从网络、模型能力、接口、部署、性能、架构、生态系统、跨平台等方面做了比较

网络和模型能力

**Caffe** 可能是第一个主流的工业级深度学习工具,它开始于 2013 年底, 具有出色的卷积神经网络实现。在计算机视觉领域 Caffe 依然是最流行的工具包,它有很多扩展,但是由于一些遗留的架构问题,它对递归网络和语言建模的支持很差。此外,在 Caffe 中图层需要使用 C++ 定义,而网络则使用 Protobuf 定义。

CNTK由深度学习热潮的发起演讲人创建, 目前已经发展成一个通用的、平台独立的深度学习系统。在 CNTK 中,网络会被指定为向量运算的符号图,运算的组合会形成层。CNTK 通过细粒度的构件块让用户不需要使用低层次的语言就能创建新的、复杂的层类型。

**TensorFlow** 是一个理想的 RNN(递归神经网络) API 和实现,TensorFlow 使用了向量运算的符号图方法,使得新网络的指定变得相当容易,但 TensorFlow 并不支持双向 RNN 和 3D 卷积,同时公共版本的图定义也不支持循环和条件控制,这使得 RNN 的实现并不理想,因为必须要使用 Python 循环且无法进行图编译优化。

**Theano** 支持大部分先进的网络,现在的很多研究想法都来源于 Theano,它引领了符号图在编程网络中使用的趋势。Theano 的符号 API 支持循环控制,让 RNN 的实现更加容易且高效。

**Torch** 对卷积网络的支持非常好。在 TensorFlow 和 Theano 中时域卷积可以通过 conv2d 来实现,但这样做有点取巧;Torch 通过时域卷积的本地接口使得它的使用非常直观。Torch 通过很多非官方的扩展支持大量的 RNN,同时网络的定义方法也有很多种。但 Torch 本质上是以图层的方式定义网络的,这种粗粒度的方式使得它对新图层类型的扩展缺乏足够的支持。与 Caffe 相比,在 Torch 中定义新图层非常容易,不需要使用 C++ 编程,图层和网络定义方式之间的区别最小。

接口

**Caffe** 支持pycaffe接口,但这仅仅是用来辅助命令行接口的,而即便是使用pycaffe也必须使用 protobuf 定义模型。

**CNTK** 的使用方式与 Caffe 相似,也是通过指定配置文件并运行命令行,但 CNTK 没有 Python 或者任何其他高级语言的接口。

**TensorFlow** 支持 Python 和 C++ 两种类型的接口。用户可以在一个相对丰富的高层环境中做实验并在需要本地代码或低延迟的环境中部署模型。

**Theano** 支持 Python 接口。

**Torch** 运行在 LuaJIT 上,与 C++、C#以及 Java 等工业语言相比速度非常快,用户能够编写任意类型的计算,不需要担心性能,唯一的问题就是 Lua 并不是主流的语言。

模型部署

**Caffe** 是基于 C++ 的,因此可以在多种设备上编译,具有跨平台性,在部署方面是最佳选择。

**CNTK** 与 Caffe 一样也是基于 C++ 并且跨平台的,大部分情况下部署非常简单。但是它不支持 ARM 架构,这限制了它在移动设备上的能力。

**TensorFlow** 支持 C++ 接口,同时由于它使用了 Eigen 而不是 BLAS 类库,所以能够基于 ARM 架构编译和优化。TensorFlow 的用户能够将训练好的模型部署到多种设备上,不需要实现单独的模型解码器或者加载 Python/LuaJIT 解释器。但是 TensorFlow 并不支持 Windows,因此其模型无法部署到 Windows 设备上。

**Theano** 缺少底层的接口,并且其 Python 解释器也很低效,对工业用户而言缺少吸引力。虽然对大的模型其 Python 开销并不大,但它的限制摆在那,唯一的亮点就是它跨平台,模型能够部署到 Windows 环境上。

**Torch** 的模型运行需要 LuaJIT 的支持,虽然这样做对性能的影响并不大,但却对集成造成了很大的障碍,使得它的吸引力不如 Caffe/CNTK/TensorFlow 等直接支持 C++ 的框架。

性能

在单 GPU 的场景下,所有这些工具集都调用了 cuDNN,因此只要外层的计算或者内存分配差异不大其表现都差不多。本文的性能测试是基于 Soumith@FB 的 ConvNets 基准测试来做的。

Caffe 简单快速。

CNTK 简单快速。

**TensorFlow** 仅使用了 cuDNN v2,但即使如此它的性能依然要比同样使用 cuDNN v2 的 Torch 要慢 1.5 倍,并且在批大小为 128 时训练 GoogleNet 还出现了内存溢出的问题

**Theano** 在大型网络上的性能与 Torch7 不相上下。但它的主要问题是启动时间特别长,因为它需要将 C/CUDA 代码编译成二进制,而 TensorFlow 并没有这个问题。此外,Theano 的导入也会消耗时间,并且在导入之后无法摆脱预配置的设备(例如GPU0)。

**Torch** 非常好,没有 TensorFlow 和 Theano 的问题。

另外,在多 GPU 方面,CNTK 相较于其他的深度学习工具包表现更好,它实现了 1-bit SGD 和自适应的 minibatching。

架构

**Caffe** 的架构在现在看来算是平均水准,它的主要痛点是图层需要使用 C++ 定义,而模型需要使用 protobuf 定义。另外,如果想要支持 CPU 和 GPU,用户还必须实现额外的函数,例如Forward_gpuBackward_gpu;对于自定义的层类型,还必须为其分配一个 int 类型的 id,并将其添加到 proto 文件中。

**TensorFlow** 的架构清晰,采用了模块化设计,支持多种前端和执行平台。

Theano 的架构比较变态,它的整个代码库都是 Python 的,就连 C/CUDA 代码也要被打包为 Python 字符串,这使得它难以导航、调试、重构和维护。

**Torch7** 和 nn 类库拥有清晰的设计和模块化的接口。

跨平台

Caffe、CNTK 和 Theano 都能在所有的系统上运行,而 TensorFlow 和 Torch 则不支持 Windows。


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2016 年 1 月 27 日 18:0054750
用户头像

发布了 321 篇内容, 共 103.6 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

oeasy教您玩转linux010201持续输出yes

o

Atlassian Team Playbook | 用户体验画布挖掘业务价值

Atlassian

团队管理 敏捷开发 Atlassian

数字货币交易平台源码,数字货币交易所开发核心功能

13530558032

架构师训练营 -- 第 12 周作业

stardust20

甲方日常 5

句子

工作 随笔杂谈 日常

AtlassianTeam Playbook | 用户体验中的移情地图

Atlassian

团队管理 敏捷开发 Atlassian

2020-08-29-第十二周作业

路易斯李李李

2020-08-29-第十二周学习总结

路易斯李李李

Flink SQL FileSystem Connector 分区提交与自定义小文件合并策略

Apache Flink

flink

区块链助力军事人力资源配置

CECBC区块链专委会

区块链 军事

FlinkX 如何读取和写入 Clickhouse?

Apache Flink

flink

十年Java开发传奇经历:我是如何从外包逆袭成为大厂架构师的

Java成神之路

Java 程序员 面试 微服务 多线程

大数据应用场景

dongge

Week 12 命题作业

Jeremy

Docker 私有镜像仓库的搭建及认证

哈喽沃德先生

Docker 容器 微服务 镜像 容器技术

架构设计开学第一天

escray

学习 从零开始学架构 架构师预科班

42图揭秘,「后端技术学些啥」

我是程序员小贱

Week 12 学习总结

Jeremy

第九周

Acker飏

kubernetes node affinity 写法

Geek_f24c45

Kubernetes

我所在公司和大数据

2流程序员

数字资产钱包开发,数字加密货币app搭建

13530558032

云算力挖矿平台APP,算力挖矿建设开发

13530558032

所按非所得——聊一聊StandHogg漏洞

OPPO安全

安全攻防 安全 安全开发 漏洞

区块链支付新模式开发,USDT支付系统搭建

13530558032

互联网人必备知识cookie和session认证

架构师修行之路

分布式 身份认证 session Cookie

你真的知道什么是线程安全吗?

老胡爱分享

并发编程 线程 java 并发

微服务架构下的系统集成

码猿外

架构 微服务 系统集成

【Spring Boot系列】之多种依赖集成方式

TinyKing

cookie和session的关系看这一篇就够了

架构师修行之路

session Cookie

大数据解答(一)

dony.zhang

大数据 mapreduce

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

深度学习框架的评估与比较-InfoQ