搞深度学习的人,手头少不了几个趁手的框架。训练、推理、部署,每个环节都有对应的工具。下面整理了一份清单,覆盖了计算机视觉、语音、时序任务上常见的训练和推理框架,一共二十多种,希望能帮你快速理清思路。
1 训练框架
PyTorch
PyTorch 来自 Facebook 人工智能研究小组,底层基于 Lua 写的 Torch,但用 Python 重新实现,是目前体验最好、使用范围最广的深度学习框架之一。它有两个核心利器:一是 GPU 张量,能通过 GPU 加速快速处理大数据;二是支持动态神经网络,可以逐层修改网络结构,而且自动求导开箱即用。无论是研究还是工程落地,PyTorch 都是第一梯队的选择。
学习资源方面,可以参考以下项目:
- Awesome-pytorch-list:涵盖 NLP、CV、常见库、论文实现等,地址:https://github.com/bharathgs/Awesome-pytorch-list
- PyTorch 官方文档:https://pytorch.org/docs/stable/index.html
- Pytorch-handbook:https://github.com/zergtant/pytorch-handbook
- PyTorch 官方社区:https://discuss.pytorch.org/
MXNet
MXNet 由亚马逊维护,数据流图风格类似 Theano 和 TensorFlow,对多 GPU 支持很好。它把高性能、干净的代码、高级 API 和底层控制结合在了一起,在深度学习框架里算是个低调的强者。
优点:
- 速度上有明显优势;
- 编程灵活,同时支持命令式和符号式编程;
- 多平台支持:多 CPU、多 GPU、集群、服务器、工作站甚至移动设备都能跑;
- 多语言支持:C++、Python、R、Scala、Julia、Matlab、Ja vaScript 全覆盖;
- 性能优化:C++ 后端引擎并行处理 I/O 和计算,无论用什么语言效率都很高;
- 云端友好,部署方便。
缺点:
- 社区规模偏小;
- 入门门槛稍高,需要花点时间。
TensorFlow
谷歌开源并维护的 TensorFlow,几乎成了深度学习领域的代名词。Tensor = 张量,Flow = 数据流,名字本身已经说明了它的核心思想:张量沿着计算图流动。特性如下:
- 支持 Python、Ja vaScript、C++、Ja va、Go、C#、Julia、R 等多种语言;
- 可在 GPU、iOS、Android 等平台运行;
- 学习曲线陡峭,入门有难度;
- 采用静态图,调试不如动态图直观。
Caffe
Caffe 是经典中的经典,由贾扬清在加州大学伯克利分校读博期间主导开发。核心代码用 C++/CUDA 编写,需要编译安装,提供 Python 和 Matlab 接口,支持单机多卡和多机多卡训练(后来推出了 Caffe2)。
- 以 C++/CUDA/Python 为主,速度快、性能高;
- 代码结构清晰,可读性和可扩展性强;
- 支持命令行、Python、Matlab 接口,使用方便;
- CPU/GPU 切换流畅,多 GPU 训练顺手;
- 工具丰富,社区活跃;
- 但代码修改难度大,不支持自动求导;
- 不适合非图像(结构化)数据。
CNTK
微软开源的 CNTK,内置高度优化的组件,能处理来自 Python、C++ 或 BrainScript 的多维密集或稀疏数据。它尤其擅长语音任务——毕竟 CNTK 最初就是微软语音团队开源的,在 RNN 和时空卷积方面有天然优势。
主要特性:
- 性能优于许多同期开源框架;
- 适合语音任务,对 RNN 和时空卷积支持极好。
学习资料:
入门介绍:https://github.com/Microsoft/CNTK/wiki
官方教程:https://github.com/Microsoft/CNTK/wiki/Tutorial
官方论坛:https://github.com/Microsoft/CNTK/issues
Keras
Keras 对新手极其友好,上手简单,后来被集成到 TensorFlow 中。它高层可以调用 TensorFlow、CNTK、Theano 等后端,而且还在不断扩展支持。Keras 最大的特点是模块化、快速搭建,添加新模块非常简洁,非常适合做科研快速验证。
学习资料:
- https://tensorflow.rstudio.com/keras/
- https://github.com/rstudio/keras
PaddlePaddle
百度开源的 PaddlePaddle(飞桨),同时支持动态图和静态图,中文文档写得非常清楚,上手门槛低。官网:https://www.paddlepaddle.org.cn/
飞桨的生态很完善,针对不同硬件环境提供了丰富的部署方案:
- Paddle Inference:原生推理库,用于服务器端部署,支持 Python、C、C++、Go 等语言,适合融入业务系统;
- Paddle Serving:服务化部署框架,可将模型作为独立 Web 服务;
- Paddle Lite:轻量化推理引擎,用于 Mobile 和 IoT 场景,硬件支持广泛;
- Paddle.js:用 Ja vaScript 在浏览器、小程序等环境部署模型;
- PaddleSlim:模型压缩工具,能获得更小体积和更快执行速度;
- X2Paddle:辅助工具,将其他框架模型转换为 Paddle 格式,方便使用上述工具。
OneFlow
项目地址:https://github.com/Oneflow-Inc/oneflow
一流科技开源的深度学习框架,API 风格类似 PyTorch,但使用全局视图 API 将模型缩放为 n 维并行/分布式执行,并通过静态图编译器加速部署。核心优势:
- 分布式性能是其技术难点和亮点,采用静态编译和流式并行的架构,解决了集群层面的内存墙挑战;
- 减少了计算集群内部的通信和调度开销,提高硬件利用率,大幅缩短训练时间;
- 天生支持数据并行、模型并行和混合并行,无需定制化开发。
MegEngine
项目地址:https://www.megengine.org.cn/
MegEngine(天元)是旷视完全自主研发的深度学习框架,从 2014 年开始研发,旷视内部全员使用,如今所有算法都基于它训练和推理。
特性:
- 训练推理一体化:支持 CPU、GPU、ARM 等多种硬件,推理框架与训练框架无缝衔接,部署时无需额外模型转换,精度和速度保持一致;
- 动静合一:动态图易调试,静态图好部署,无需改变模型代码即可一键切换;
- 兼容并包:顶层 API 基于 Python,风格类似 PyTorch,易于上手和移植;
- 灵活高效:底层算子库针对不同硬件深度优化,提供亚线性内存优化策略,支持弹性大规模分布式训练。
DeepLearning4j
基于 Ja va 的深度学习框架,2013 年诞生,2017 年加入 Eclipse 基金会,由美国 Skymind 开源维护。项目地址:https://github.com/eclipse/deeplearning4j
- 支持神经网络构建、训练和部署;
- 能与 Hadoop、Spark 等大数据生态无缝衔接,原生支持分布式训练;
- 支持多线程;
- 跨平台,支持 CUDA GPU、x86、ARM、PowerPC,以及 Windows/Mac/Linux/Android。
2 推理框架
TensorRT
NVIDIA 自家的推理库,几乎是自动驾驶边缘部署领域的标配。更新频繁,反馈及时,社区维护好。应用场景涵盖服务端、嵌入式端、PC 端。把 PyTorch、TensorFlow 等框架训练好的模型转换成 TensorRT 格式,再用它的推理引擎运行,在英伟达板子上速度提升非常可观。
项目链接:https://github.com/NVIDIA/TensorRT
NCNN
腾讯开源的 ncnn,专为手机端极致优化,是一个高性能神经网络前向计算框架。设计之初就充分考虑了手机端的部署,无第三方依赖,跨平台,在手机 CPU 上的速度超过所有已知开源框架。用它可以把深度学习算法轻松移植到手机端,开发出真正的 AI 应用。
项目链接:https://github.com/Tencent/ncnn
TNN
腾讯优图实验室开源的高性能、轻量级神经网络推理框架。跨平台、高性能、模型压缩、代码裁剪都是它的亮点。在原有 Rapidnet 和 ncnn 基础上,进一步加强了移动端支持和性能优化,同时扩展了对 X86 和 NV GPU 的支持。在手机上已被大量应用,也是腾讯云 AI 的基础加速框架。
项目链接:https://github.com/Tencent/TNN
MNN
MNN 是阿里开源的高效轻量级深度学习框架,支持推理和训练,在设备端性能业界领先。目前已在淘宝、天猫、优酷、钉钉等 30 多个应用中使用,覆盖直播、短视频、搜索推荐、图片搜索、安全风控等 70 多个场景,还用于物联网等嵌入式设备。
项目链接:https://github.com/alibaba/MNN
TensorFlow Lite
谷歌在 2017 年 I/O 大会上开源,专门把 TensorFlow 模型迁移到 Android App 上。使用 Android Neural Networks API,默认调用 CPU,最新版本已支持 GPU。项目地址:https://tensorflow.google.cn/lite/
Core ML
苹果在 2017 年 WWDC 上与 iOS 11 同时发布的移动端机器学习框架,底层用 Accelerate 和 Metal 分别调用 CPU 和 GPU。需要把训练好的模型转换成 Core ML model 格式。2018 年 WWDC 上发布了 Core ML 2,主要改进包括权重量化优化模型大小、新增 Batch Predict API 提高预测速度,以及允许开发者用 MLCustomLayer 定制模型。
项目地址:https://developer.apple.com/documentation/coreml
Paddle-Mobile
百度 PaddlePaddle 组织下的移动端深度学习框架,2017 年开源,最初叫 mobile-deep-learning(MDL)。支持 Android 和 iOS,CPU 和 GPU 均可使用,提供量化工具。可以直接用 Paddle Fluid 训练好的模型,也能转换 Caffe 模型或使用 ONNX 格式。
项目地址:https://github.com/PaddlePaddle/paddle-mobile
Caffe2
Facebook 在 2017 年发布的跨平台、轻量级、模块化、可扩展的深度学习框架。以原 Caffe 为基础,兼顾了表达、速度和模块化。不仅支持 Windows、Linux、macOS 三大桌面系统,也支持移动端 iOS 和 Android,集训练和推理于一身。
MACE
小米在 2018 年开源世界高峰论坛上宣布开源的移动端框架,底层用 OpenCL 和汇编提供异构加速,支持各种框架的模型转换。Mobile AI Compute Engine(MACE)专为移动端异构计算平台优化,从以下角度做了专门设计:
- 性能:通过 NEON 指令、OpenCL 和 Hexagon HVX 优化,采用 Winograd 算法加速卷积,启动速度也做了优化;
- 功耗:支持芯片功耗管理,如 ARM big.LITTLE 调度、高通 Adreno GPU 功耗选项;
- 系统响应:自动拆解长时间 OpenCL 任务,保证 UI 渲染的抢占调度,提升用户体验;
- 内存占用:通过内存依赖分析和复用,减少内存占用,代码尺寸精简;
- 模型加密与保护:支持将模型转换成 C++ 代码,关键常量字符混淆,增加逆向难度;
- 硬件支持:高通、联发科、松果等芯片的 CPU、GPU、DSP(仅 Hexagon)加速,CPU 模式支持 Android、iOS、Linux;
- 模型格式:支持 TensorFlow、Caffe、ONNX 等。
项目地址:https://github.com/XiaoMi/mace-models
NNIE
NNIE(Neural Network Inference Engine)是海思媒体 SoC 中专门加速卷积神经网络的硬件单元。支持大部分公开网络,比如 AlexNet、VGG16、GoogLeNet、ResNet 等分类网络,Faster R-CNN、YOLO、SSD、RFCN 等检测网络,以及 SegNet、FCN 等场景分割网络。目前配套软件仅支持 Caffe 框架,其他框架的模型需要先转换成 Caffe 格式。在海思系列芯片上性能极佳,但最大的局限也在于此——只针对海思芯片。
