1.4 深度学习工具与平台介绍
深度学习如火如荼地发展,各种深度学习框架相继开源。社区活跃并且应用广泛的深度学习工具包括TensorFlow、Keras、CNTK、Caffe、MXNet等。框架之间的用户抢夺愈演愈烈,目前较为火热的是TensorFlow,其在用户和使用范围上有较大的优势。开源框架的流行程度由很多因素共同决定。例如,开源产品本身优异的质量,背后企业成熟的社区运作,快速的迭代更新,活跃的社区和反馈,最终形成良性循环。
1.4.1 深度学习框架
1. TensorFlow
TensorFlow是Google推出的深度学习框架,TensorFlow的用户可以快速设计深度学习网络,将底层细节进行抽象,而不用耗费大量时间编写底层CUDA或C++代码。
实现特点:TensorFlow支持自动求导,用户可以方便设计新的损失函数,并进行求解。TensorFlow内核通过C++进行开发,有较好的性能保证。为了兼容用户和降低学习曲线,TensorFlow也提供了Java、Python和Go的接口。本书后续内容将会调用TensorFlow Python接口进行讲解。
高层接口支持:随着社区的发展以及TensorFlow内部的支持,为了提升开发人员的生产力,TensorFlow逐步形成了一些高层的编程接口,如内置的TF.Learn和TF.Slim,这样用户可以更加简洁快速地设计和实验新的深度神经网络结构。在Python接口方面也兼容Scikit-learn的estimator接口,这样用户可以通过Scikit-learn完成参数搜索、交叉验证等机器学习流水线中的较为重要的环节。
平台支持:在TensorFlow的底层也可以基于CPU或者GPU进行模型训练,在单GPU的条件下,大多数的深度学习框架都依赖于cuDNN。对于大规模数据的深度学习,大数据量使得单机GPU的训练难以完成,需要分布式GPU集群来进行并行计算。
官网链接:https://www.tensorflow.org/。
2. CNTK
CNTK是微软开源的深度学习框架,是最早支撑语音识别的深度学习应用。它将神经网络描述成在有向图上的一系列计算步骤。在这个有向图中,叶子结点表示输入层或网络参数,其他的结点则表示成在输入层上的矩阵操作。CNTK是微软在Cortana数字助理和Skype翻译应用中使用的语音识别的系统框架。
模型支撑:在CNTK上可以很容易地实现及结合当今流行的模型,例如前馈神经网络(DNN)、卷积神经网络(CNN)、循环神经网络(RNN/LSTM)。在实现随机梯度下降学习时能够自动计算梯度。
设备支持:CNTK还能通过多个GPU或服务器实现并行计算。
官网:https://docs.microsoft.com/en-us/cognitive-toolkit/。
3. Caffe2
Caffe2是一个应用广泛的深度学习框架,在TensorFlow发布之前其一直是深度学习领域最为火热的项目。
Caffe2的核心概念是Layer,在深度神经网络中,每个模块都是一个Layer。Layer接收输入的向量化数据,经过计算后输出数据,Layer之间的组合与串联形成了复杂的深度学习网络结构。每个Layer都要定义两种运算:正向运算和反向传播算法。
Caffe2的优势具体如下。
接口简洁:容易上手,设计和书写网络均可通过配置文件的形式进行定义。训练速度快,底层通过cuDNN使用GPU加速网络训练。项目结构(清晰)且成模块化,能较快拓展到新的模型和学习任务上。
Model Zoo:Caffe2拥有大量己训练好的经典模型(AlexNet、VGG、Inception,等),收藏在Model Zoo中(github.com/BVLC/caffe/wiki/Model-Zoo)。在计算机视觉领域,Caffe2的应用较为广泛,可以用来做图片分类、位置检测、人脸识别等。
官网链接:https://caffe2.ai/。
4. MXNet
MXNet是DMLC推出的一款开源的深度学习框架,是亚马逊AWS主推的一款深度学习框架,AWS官方推荐使用MXNet进行深度学习编程。
接口支持:通过MXNet的命令式和符号式进行编程,可以使得效率和灵活性达到最大化。上层接口支持C++、Python、R、Julia、Go等语言,应用非常广泛。
设备支持:MXNet的核心组件是动态的依赖调度器,能将计算任务并行到多GPU或者分布式集群上。
官网链接:https://mxnet.apache.org/。
5. Pytorch
Torch是运行在LuaJIT上的高效科学计算库,可以进行深度学习网络的训练和推断。Torch创建较早,在Facebook开源深度学习组件之后,Torch得到了广泛的应用。Torch底层通过C++开发,上层通过Lua脚本语言进行调用。PyTorch运行在GPU或CPU之上,其具有基础的张量操作库,内置的神经网络库,模型训练功能,支持共享内存的多进程并发库。
模型支持:包含大量的机器学习、计算机视觉、视频、音频、语音处理的库。
设备支持:支持设计复杂的深度学习网络拓扑结构,并且可以并行化到CPU和GPU上。
官网链接:http://pytorch.org/。
1.4.2 深度学习基础架构
深度学习技术发展迅速,深度学习框架层出不穷。为了方便算法工程师使用各类深度学习技术,减少繁杂的诸如运行环境部署运维等工作,提升GPU等硬件资源的利用率,节省硬件投入成本,对下我们需要通过AI基础平台管理GPU服务器集群,对上提供深度学习作业管理和监控。
1. PAI
PAI(Platform for AI)是一个由微软开源的、为人工智能作业设计的集群管理系统和资源调度平台。系统吸收了微软内部深度学习平台等成熟的设计经验,为深度学习产品应用或研究提供了支持。
PAI具有以下几个特点。
▼ 支持AI作业,在GPU集群上运行深度学习作业,支持常用的主流深度学习框架。扩展性较好,提供的接口便于用户在集群上运行扩展新的框架。
▼ 支持针对GPU资源的调度优化,提供丰富的监控指标,方便用户诊断问题和运维集群。
▼ 吸收微服务的思想,内部服务组件和作业都包装为Docker容器,通过HDFS共享训练数据,训练中间结果及模型。
Github链接:https://github.com/Microsoft/pai。
如图1-6所示,PAI架构采用和集成主流集群管理系统和深度学习框架。
图1-6 PAI基础架构
2. XLearning
奇虎360系统部大数据团队与人工智能研究院联合开发了深度学习调度平台——XLearning。
XLearning平台将大数据与深度学习相融合,基于Hadoop Yarn完成了对Tensor-Flow、MXNet、Caffe、Theano、PyTorch、Keras、XGBoost等常用深度学习框架的集成,是典型的“AI on Hadoop”的实现。XLearning从2017年4月份正式开发上线运行,经过多个版本的迭代更新,为各学习框架的使用者提供了统一、稳定的调度平台,实现了资源共享,极大地提高了资源利用率,并且具有良好的可扩展性和兼容性。目前已经在公司搜索、人工智能研究院、商业化、数据中心等业务部门广泛使用。
官网链接:https://github.com/Qihoo360/XLearning。
1.4.3 深度学习开发工具
在深度学习和机器学习的开发与测试过程中,用户疲于在多种框架之间进行切换,可以通过下面的工具进行一站式深度学习的开发。
Visual Studio Tools For AI & Visual Studio Code Tools For AI
微软发布了Visual Studio Tools for AI,包含了基于Visual Studio的插件和基于Visual Studio Code的跨平台的插件,这是微软Visual Studio 2017 IDE的扩展,可以让开发人员和数据科学家将深度学习模型嵌入到应用程序中。
Visual Studio Tools for AI工具支持CNTK、TensorFlow、Caffe2等多种框架的开发。
微软还通过一个称为Visual Studio Code Tools for AI的跨平台扩展为其Visual Studio代码编辑器提供AI支持。
同时为物联网设备和Azure云平台等基础架构进行相应的集成,以便于用户将本地测试与平台运行训练集成到一套流水线中。
官网链接:https://www.visualstudio.com/downloads/ai-tools-vs/。
1.4.4 深度学习辅助工具
在深度学习或迁移学习的过程中,我们可能会遇到多框架模型之间的转换问题,以及用户想可视化相应的模型。我们可以通过MMdnn工具进行相应的支持。
MMdnn
MMdnn是一套工具集,可以帮助用户在不同的深度学习框架之间进行协同开发。其包含深度学习模型转换、模型可视化等辅助深度学习开发的一系列工具。MMdnn现支持Caffe、Keras、MXNet、TensorFlow、CNTK、PyTorch和CoreML模型之间的转换。
官网链接:https://github.com/Microsoft/MMdnn。
1.4.5 深度学习云平台服务
随着越来越多的公司将基础架构迁移到云平台,越来越多的深度学习开发人员也在基于云平台进行相应的服务开发。我们以微软Azure为例介绍其提供的基本深度学习服务。
微软Azure
Azure是微软提供的公有云平台,其提供了深度学习从下到上的一系列服务。
(1)GPU虚拟机
Azure提供了多种类型针对GPU进行优化的虚拟机,其上挂载了单个或多个英伟达GPU。其中NC、NCv2和ND系列虚拟机是针对计算密集型和网络密集型应用进行相应优化的虚拟机,适用于深度学习和人工智能的应用。具体型号和配置可以参考下面的链接查询。
参考链接:https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-gpu。
(2)模型训练服务
Azure Batch AI是Azure Batch针对深度学习训练的一种服务。其底层用于管理GPU虚拟机,对用户提供作业提交接口,并进行训练作业管理。
官网链接:https://azure.microsoft.com/en-us/services/batch-ai/。
(3)模型管理与部署
当用户训练好模型,后续的版本管理、部署、追踪、更新等都是产品化的人工智能流水线非常需要的。Azure机器学习模型管理服务,使得用户可以管理和部署机器学习的模型。其提供的功能具体如下。
▼ 模型版本管理
▼ 产品模型跟踪
▼ 模型部署
▼ 本地模型测试
▼ 自动重训练模型
官网链接:https://docs.microsoft.com/en-us/azure/machine-learning/preview/model-ma-nagement-overview。
(4)深度学习应用API
微软认知服务(Microsoft Cognitive Services)集合了多种智能API以及知识API。服务集合了多种来自Bing、前“牛津计划”等项目的智能API。应用了这些API的系统可以让开发者集成大公司领先的模型和AI能力,能够更加快速方便地构建和使用深度学习技术的应用。
▼ 图像
支持智能表标识图像、描述图像、人脸识别等。
▼ 自然语言
支持自然语言处理、情感分析等。
▼ 语音
支持语音识别等。
▼ 知识
支持语义搜索、实体链接、推荐等。
▼ 搜索
可以调用Bing搜索的API,支撑搜索场景。