文档章节

深度学习框架的发展与展望(2019.3)

openthings
 openthings
发布于 03/03 10:19
字数 4824
阅读 765
收藏 0

机器学习算法发展比较迅速,但为了能够实现工程化的规模化应用,还需要稳定的框架和一致的流程的支持。

目前的机器学习算法主要分为两类,即深度学习与传统的机器学习。传统的机器学习如随机森林、主成分分析等主要是基于统计、概率的单层算法,一般都有复杂的计算公式;而深度学习是基于多层神经网络的计算模式,响应函数往往并不是很复杂,但多个层之间的传导函数和学习(概率统计)后的参数的数据量比较大,训练过程中使用多个参数进行试验的计算量也非常大,往往需要GPU或专用芯片才能更快地完成;根据应用数据和模式的不同,深度学习已经衍生出了大量的具体算法。

传统的机器学习算法已经有大量成熟的库可以直接调用,在Spark中也可以通过MLlib进行机器学习模型参数的解算和应用。这里,主要探讨深度学习相关的技术和框架的发展及其未来可能的趋势。

1、深度学习技术栈

主要包括:

  • 芯片与驱动软件,提供传统CPU/GPU以及新型神经网络专用计算芯片和驱动软件。
  • 存储与计算设施,将大数据存储、处理系统与深度学习相结合,并在云计算中心提供服务。
  • 机器学习计算引擎,提供高性能神经网络解算引擎(概率统计和线性代数的快速迭代计算)和DAG(计算图)。
  • 基础库管理,包括训练样本库、应用数据库、模型参数库、模型代码库的存储、管理和处理、输入输出工具。
  • 运行框架与流程,提供运行环境、图形化UI、标准流程、统一接口、语言与模型,支持集群和云计算环境。

2、芯片与驱动软件

芯片与驱动软件,提供传统CPU/GPU以及新型神经网络专用计算芯片和驱动软件。目前训练过程以CPU和GPU计算为主,移动端应用以专用嵌入式芯片为主。

  • Nvidia的GPU计算体系仍然是机器学习训练的主流平台,为了加速训练过程,Nvidia推出了DGX/HGX系列一体机,其中HGX-2 由 16 块 NVIDIA® Tesla® V100 GPU 和 NVIDIA NVSwitch™ 高速计算平台。提供了相应的软件支持包(CUDA/Cognitive/Caffe2等,参阅 https://developer.nvidia.com/deep-learning-frameworks),以及容器的GPU支持引擎(Nvidia-docker),为容器和Kubernetes集群环境提供机器学习支持。
  • Intel的Xeon芯片提高了更为强大的多核计算能力,而且在服务器上可以组成多路,以及通过多节点集群来进行并行化计算。对于计算负载不是特别大的任务可以直接使用CPU完成。Intel同时也通过收购其它公司在服务器(Nervana™神经网络处理器)和移动端(Movidius™ 神经计算模块)的深度学习芯片上发力,试图将CPU和FPGA的计算能力实现整合,目前应用还在开发之中。
  • 专用的神经网络芯片发展迅速,主要有FPGA(现场可编程门阵列)、DSP(数字信号处理)、ASIC(专用集成电路)、ARM扩展模块等技术路线,具有速度快、带宽高、功耗低、体积小的优势,主要面向移动和嵌入式系统。muqian 主要的厂家有苹果、高通、华为、商汤科技、地平线、中芯、Face++、比特大陆等,而且很多厂家在芯片里已经固化了图像处理、目标识别等基础模型和算法,可以快速集成到手机或其他设备之中,目前主要功能以人脸识别、照片分类、图像处理、图像风格迁移、图像超分辨率重建、车牌识别、智能安防、自动驾驶、无人机姿态保持与位置追踪等领域为主。

3、存储与计算设施

深度学习的训练和应用往往涉及到大量的数据存储和处理,与大数据技术的存储和计算体系有密切的联系。目前新型的Linux基础存储管理软件如ZFS/Btrfs能提供更好的数据IO和磁盘管理能力,开源的HDFS/GlusterFS/Ceph等提供分布式的集群存储,Hadoop/Spark等提供集群化的计算能力,都能够更好地满足企业和科研机构自行搭建深度学习平台的需要。

大型云计算厂商(如Amazon、Azure、Google、Aliyun、Huawei以及Databrick、Nvidia)等都提供了基于云计算模式的深度学习基础设施服务,包括虚拟主机(预装了深度学习软件,支持GPU加速)、核心引擎和部分算法以及实验数据。可以购买相应的服务器实例即可快速启动自己的机器学习服务,而且可以通过云计算中心来扩展自己的节点从而缩短模型训练的总体时间。不过对于国内来说,目前租用机器学习服务器实例的成本还是比较高的,而且带宽较低会影响大量数据上传、下载的效率。

4、深度学习计算引擎

深度学习引擎包括基础的概率统计、线性代数的计算模块,以及根据具体应用开发的算法模型和模型参数库。

4.1 基础计算引擎

目前有多种广泛采用的深度学习神经网络计算引擎,包括:

  • Tensorflow,提供基于图(Graph)的张量计算引擎,2019.03.06发布了2.0版本。支持服务器、工作站和嵌入式设备, 目前有大量的外围库和领域模型可供使用。
  • MXNet,目前是1.4.0版本,由Apache基金会支持,目前还处于孵化阶段。MXNet的高层接口是Gluon,Gluon同时支持灵活的动态图和高效的静态图,既保留动态图的易用性,也具有静态图的高性能。Amzon的机器学习云实例主要采用MXNet。
  • PyTorch/Caffe2,主要是FaceBook支持,也是广泛使用的深度学习库,在图像处理(分割、重建、识别等)方面有大量的应用模型。
  • SciKit/NumPy,是在Python科学计算中广泛使用的数学库,加入了更多的神经网络算法,可以用于机器学习和深度学习。
  • ......

4.2 应用算法模型

深度学习的应用模块包括扩展模块、领域模型两种主要类型。扩展模块与核心引擎高度相关,提供数据的预处理、输出/输出、格式交换等功能。领域模型以文字处理、语音识别、图像处理、目标识别等为主,已经发展出了多种应用模型和软件、设备,如智能摄像头、智能停车收费、同声翻译机、智能音箱、图像风格迁移、照片换脸、视频套用、机器作曲、机器绘画、自动驾驶等等应用,也在医疗、安防等专业领域做出了有益的尝试。其中,一些开源的应用算法模块和系统包括:

  • 测试框架OpenAI CharterOpenAI发起的开源项目。
  • 交换格式,ONNX试图在多种计算引擎间共享算法模型,从而简化应用端的工作。
  • 图像分割,实现图形的区域分割,是图像精确分类、目标识别、自动驾驶等应用的基础算法,已经有大量的针对不同应用的算法模型。
  • 风格迁移,将图片从一种风格转换为另一种风格,如将黑白照片上为彩色,将普通照片变为优化等等。著名的DayDream项目可以将多个照片合成为虚幻的画作。
  • 文字处理,通过神经网络来实现分词、搜索、合成,以及文章创作等高级功能。
  • 语音识别,将语音转换为文字,是自动翻译的前置步骤。目前成熟度比较高,DeepMind/Amazon/讯飞/小米/华为等都研究该领域的技术,实现语音控制App、智能音箱、即时翻译等产品。
  • 语音合成,将文字转为语音,与传统TTS不同的是,不仅可以将文字转为声音,还能匹配语音的风格,以及从现有语音提取风格并予以模拟,已经可以达到乱真的程度,成功通过盲测。
  • 图像合成,将不同图像的部分合成为新的图像,如著名的换脸程序-Deepfake可以将视频中的头像与其它视频的部分合成为一体,造出虚假的视频,如果与语音仿真结合起来,可以制造出很难识别的虚假图像和视频。
  • 图像修复,用于图像修复,如填充、抠图、去除图像污渍、消除多余目标等。
  • 图像超分辨率重建,从低分辨率图像生成高精度图像,提升显示效果。NVidia使用实时超分辨率技术提高游戏画面的精细程度,效果非常惊人。
  • 人脸识别,主要用于身份验证(支持手机解锁、手机支付、入场检测等等),已经比较成熟,开始逐步取代指纹验证方式。
  • 车牌识别,用于自动化的停车收费系统、车辆出入控制、违章驾驶监测等等,已经比较成熟,开始广泛使用。
  • 目标识别,从比较图像中检测出目标图像,并进行分类识别。包括对伪装目标的检测,自动化制图,变化检测等等应用方向。
  • 医疗图像,对疾病图像进行深度学习后,根据模型来自动判读各种医疗图像,识别异常部位和病理目标,实现自动诊断疾病。
  • 地球科学,进行空间图谱分析、全球变化监测,用于土地利用分类、土地用途管制的遥感影像自动检测,水体、大气污染与模式识别,灾害天气识别与预警等等。
  • 机器视觉,用于识别周围环境,可以用于自动化设备、机器人、损伤检测等工作。大疆无人机用其实现避障、姿态控制等功能。
  • 自动驾驶,通过对全向雷达和360图像的智能处理,对车道和周边环境实时感知、重建、识别,计算出最佳驾驶行为并控制车辆。

5、基础库管理

机器学习平台会使用到大量的数据库,包括训练样本库、应用数据库、模型参数库、模型代码库的存储、管理和处理、输入输出工具,可以通过大数据平台或云存储、网络存储等平台进行管理和快速提取。

  • 训练样本库。收集的标准实验数据,已经进行标记,用于在“机器学习”过程将特征值与标记值建立函数关系。
    • 在神经网络中,该函数关系使用函数和参数集合来表达,使用多层网络来构建该超参数集。
    • 往往需要对模型参数、层数进行多次实验,计算出误差值,然后进行逐步逼近最佳参数。
  • 应用数据库。需要求算最终标记值的原始数据集,如人脸识别中新采集的图像。将输入“学习到”的神经网络函数和参数表达式,进行目标的判别解算。
  • 模型参数库。除函数之外,深度学习需要大量参数来控制网络函数的传导。这些参数与调参代码、基础函数共同构成完整的模型。
  • 模型代码库。可以使用Gitlab等版本管理系统进行管理。

6、深度学习框架与流程

除了TensorFlow之类的核心计算架构外,深度学习还需要与存储、计算、网络、客户端等计算基础设施打交道,就需要构建一个运行框架(包括服务、接口、应用),并形成一个标准化的流程,实现基础数据的管理和动态数据的学习和应用,并进一步实现反馈,实现自我优化学习,不断精炼模型参数。

  • 运行环境。现在的趋势是将机器学习的训练环境放入容器中运行,然后通过Kubernetes来实现实例调度和容错、扩容等能力。从而可以在多种环境包括云计算中心间进行迁移和快速扩容,满足大规模的训练和应用的“机器智能”计算服务需求。
  • 调度框架。Kubernetes提供了实例的调度、虚拟网络、虚拟存储和服务聚合机制,但是实例之间需要进行实时通讯以共享深度学习的参数库,以便进行模型的整体优化,这需要专门开发相应的机制来实现。
    • TensorFlow通过gRPC调用来实现多个节点的通讯和集群化数据同步,内置支持但与其它的服务架构(如REST/Kubernetes)融合管理有点复杂。
    • Spark的RDD可以在多个节点间高速同步数据(共享内存数据结构),也是可以用作超参数管理的(目前还没有用到),是理想的机制。
    • 共享数据库可以通过传统的数据库来保存和共享超参数,可以支持事物保持一致性,但高频次查询的性能有一定影响。
    • 共享存储可以通过HDFS/Ceph/Gluster或其它网络存储服务等保存和共享超参数,容量大但同步机制还需要自己加锁。
  • 工作流程。深度学习需要经过数据导入、整理、归一化、标记等预处理过程,实验、评估、调参等训练过程,模型导出、环境迁移、软件开发、集成整合、测试验证等应用过程。流程的每一环节都需要相应的软件工具和工作方法论支持,才能顺利完成。

深度学习框架需要考虑到基础环境、数据同步机制和工作流程,从而提供一个单一的软件工具给开发者使用,简化目前的散乱的机器学习研究方法和基础设施,形成可以标准化交付的软件和应用模型,实现工程化应用。正在开发的框架包括:

  • Kubeflow,专为Kubernetes而设计的深度学习系统。采用TesnorFlow作为主要的计算内核(可以支持其它计算引擎,开发中),使用ksonnet作为应用部署工具(这与Helm安装不太一样),可以支持Argo CD作为DevOps工具,集成了JupuyterHub的Notebook交互服务,可以批量执行训练任务。Kubeflow目前版本0.4.1,还在快速迭代之中。
  • MLflow,由Spark的主要开发者DataBricks提出并开发,可以运行于任何环境的python库,实现模型试验、结果比较与可视化、模型打包输出、重复使用的完整流程,目前版本为0.8.2。可以运行于基本python环境以及标准的JupyterHub环境中,适应性非常好,使用比较简单,能够整合到整个python的生态环境之中,从而可以利用大量的python模块和几乎所有的机器学习模型。
  • AirFlow,是基于DAG(有向无环图)的通用的可编程计算工作流支持软件,正在开发Kubernetes的Operator,提供对容器集群的支持。深度学习的算法可以通过工作节点整合到整个流程之中,从而提供完整的机器学习一体化流程。目前版本是1.10.2,尚未提供对深度学习计算的针对性支持(如模型管理、训练任务、参数调优、模型输出等),但可以通过其它python库和容器来完成。
  • Nauta,是英特尔针对Kubernetes环境开发的深度学习开源工具,目前主要为Intel Xeon而优化,还处于早期开发阶段。Nauta集成了JupyterHub,采用TensorFlow作为计算引擎,Kubernetes和Docker作为运行环境。

上面的框架虽然支持分布式环境,可以在多个节点间分派任务,但是多个节点尚未实现同步训练,有待进一步开发。除此之外,mxnet/pytorch/aws/azure/IBM/aliyun/huawei等也都在试图发展相应的深度学习框架和流程支持软件,部分已经进入试运行状态。

更多机器学习框架参考

 

© 著作权归作者所有

openthings
粉丝 322
博文 1138
码字总数 687611
作品 1
东城
架构师
私信 提问
AirFlow/NiFi/MLFlow/KubeFlow进展

大数据分析中,进行流程化的批处理是必不可少的。传统的大数据处理大部分是基于关系数据库系统,难以实现大规模扩展;主流的基于Hadoop/Spark体系总体性能较强,但使用复杂、扩展能力弱。大数...

openthings
06/21
342
0
IntelliJ IDEA 公布 2019.3 Roadmap:提升整体性能

IntelliJ IDEA 今年的第二个重大版本更新 2019.2 已于一个月前发布,此版本新增了不少功能,诸如支持 Java 13 预览版、引入性能分析工具(Profiling Tools)和服务工具窗口(Services Tool W...

局长
09/10
15.2K
35
信通院2018人工智能发展白皮书技术篇重磅发布

  大数据文摘出品   9月6日,2018中国人工智能峰会(CAIS2018)在南京国际博览会议中心召开。斯坦福客座教授吴恩达以Landng.ai创始人、CEO的身份出席了峰会,并在主论坛上做了题为《人工...

大数据文摘
2018/09/07
0
0
IntelliJ IDEA 2019.3 首个早期访问版本发布,新特性抢先看

IntelliJ IDEA 上周才公布下一个主要版本 2019.3 的 Roadmap,近日就发布了 IntelliJ IDEA 2019.3 的首个早期访问版本(即 EAP 版本),版本号为 2019.3 EAP build 193.2956.37。 EAP 版本的...

局长
09/17
9.2K
25
报名 | 想了解AutoML技术现状与展望?请听机器之心INTERFACE#8分解

     2017 年5月,谷歌在I/O大会上发布了AutoML,受到业界的极大关注。除了谷歌,国内也有一批创业公司、团队在研究相关技术,如第四范式的AutoML技术已经投入实际工业应用,并从谷歌等巨...

机器之心
2018/06/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Cantata 8.0有哪些新变化

Cantata 8.0 于2018年5月发布,这一重大版本的升级在以往技术的基础上增添了关键性新功能,并且对用户界面进行了全面改进,这个文档简要介绍了8.0中的主要变化。 Cantata 于2018年5月发布,本...

旋极科技
6分钟前
4
0
在线客服系统企业用的如何?

现在很多企业都在使用在线客服系统,但是销售订单没有显著增加这是为什么呢? 一:我们企业的客服人员是否有做好真正的接待工作? 是否每天都有对网站上的访客进行接待? 相关管理人员有没有做...

唯喏
15分钟前
2
0
Hystrix实现主线程和子线程的ThreadLocal上下文传递

问题描述 我在使用日志链路追踪的时候(基于SLF4J MDC机制实现日志的链路追踪),我发现使用Hystrix线程池隔离的时候,我不能将子线程没有复制主线程的MDC上下文(Slf4j MDC机制 ),导致日志链...

xiaolyuh
21分钟前
2
0
基于CentOS7搭建GitLab

基于CentOS7搭建GitLab 12018.11.02 16:38:51字数 959阅读 3790 本文作者:蓝雄威,叩丁狼高级讲师。原创文章,转载请注明出处。 一、简介 Git Lab GitLab是利用 Ruby on Rails 一个开源的版...

linjin200
22分钟前
1
0
AJAX技术

1.1 准备工作 因为AJAX也需要请求服务器,异步请求也是请求服务器,所以我们需要先写好服务器端代码,即编写一个Servlet! 这里,Servlet很简单,只需要输出“Hello AJAX!”。 public class...

Pak_key
23分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部