常用深度学习框架
2018.09.13
深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon等。我们参考开源的测试结果,结合自己整理的数据,针对主流的深度学习框架进行简单对比及介绍。
框架 | 机构 | 支持语言 | Stars | Forks |
---|---|---|---|---|
Caffe | BVLC | C++/Python/Matlab | 25480 | 15560 |
CNTK | Microsoft | C++ | 15083 | 4020 |
Keras | Fchollet | Python | 33332 | 12563 |
Tensorflow | Python/C++/Go… | 109115 | 67339 | |
MXNet | DMLC | Python/C++/R… | 15162 | 5484 |
PyTorch | Python | 18517 | 4426 |
性能对比
1. 训练时间: Network DenseNet-121 (Multi-GPU)
运行于 SSD 硬盘
框架 | 1xV100/CUDA 9/CuDNN 7 | 4xV100/CUDA 9/CuDNN 7 |
---|---|---|
Pytorch | 27min | 10min |
Keras(TF) | 38min | 18min |
Tensorflow | 33min | 22min |
MXNet(Gluon) | 29min | 10min |
运行于RAM内存中
框架 | 1xV100/CUDA 9/CuDNN 7 | 4xV100/CUDA 9/CuDNN 7 |
---|---|---|
Pytorch | 25min | 8min |
Keras(TF) | 36min | 15min |
Tensorflow | 25min | 14min |
MXNet(Gluon) | 28min | 8min |
2. 1000张图片推理时间(s): Network ResNet-50
框架 | K80/CUDA 8/CuDNN 6 | P100/CUDA 8/CuDNN 6 |
---|---|---|
CNTK | 8.5 | 1.6 |
Keras(TF) | 10.2 | 2.9 |
Tensorflow | 6.5 | 1.8 |
MXNet | 7.7 | 1.6 |
PyTorch | 7.7 | 1.9 |
3. CPU推理时间(s): E5-2630v4, Network FCN5
框架 | 1 Thread | 2 Threads | 4 Threads | 8 Threads | 16 Threads | 32 Threads |
---|---|---|---|---|---|---|
Caffe | 1887.2ms | 1316.7ms | 1051.8ms | 952.1ms | 952.3ms | 834.7ms |
CNTK | 1238.7ms | 616.3ms | 352.7ms | 229.5ms | 155.9ms | 192.4ms |
Tensorflow | 992.2ms | 773.6ms | 419.3ms | 252.3ms | 149.7ms | 124.7ms |
MXNet | 1386.8ms | 915.5ms | 559.0ms | 499.1ms | 416.3ms | 413.9ms |
框架评价
框架 | 安装成本 | 代码理解程度 | API丰富程度 | 模型丰富程度 | 文档完整程度 | 训练与测过程 | 学习资源 |
---|---|---|---|---|---|---|---|
CNTK | 良好 | 良好 | 良好 | 良好 | 优秀 | 良好 | 良好 |
Keras | 良好 | 良好 | 优秀 | 优秀 | 良好 | 优秀 | 良好 |
MXNet | 良好 | 良好 | 良好 | 良好 | 良好 | 优秀 | 优秀 |
Pytorch | 优秀 | 优秀 | 良好 | 良好 | 优秀 | 良好 | 良好 |
Tensorflow | 良好 | 良好 | 优秀 | 优秀 | 优秀 | 优秀 | 优秀 |
Caffe | 良好 | 优秀 | 良好 | 良好 | 优秀 | 良好 | 优秀 |
推荐框架
目前众多的深度学习框架,使用者只要选择适合自己的框架即可,我们在日常使用中,考虑到训练的快捷程度,部署难度以及对CNN、RNN模型的直接程度,推荐以下几款深度学习框架。
1.Keras
Keras 提供了简单易用的 API 接口,入门快,特别适合初学者入门。其后端采用 TensorFlow, CNTK,以及 Theano。另外,Deeplearning4j 的 Python 也是基于 Keras 实现的。Keras 几乎已经成了 Python 神经网络的接口标准。
2.TensorFlow
谷歌出品,追随者众多。代码质量高,支持模型丰富,支持语言多样, TensorBoard 可视化工具使用方便。
3.MXNet
已被亚马逊选为 AWS 上的深度学习框架,支持动态图计算。MXNet 有许多中国开发者,因而有非常良好的中文文档支持。Gluon 接口使得 MXNet 像 Keras 一样简单易用。