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

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

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

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

一、深度学习技术栈

主要包括:docker

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

二、芯片与驱动软件

芯片与驱动软件,提供传统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++、比特大陆等,并且不少厂家在芯片里已经固化了图像处理、目标识别等基础模型和算法,能够快速集成到手机或其余设备之中,目前主要功能以人脸识别、照片分类、图像处理、图像风格迁移、图像超分辨率重建、车牌识别、智能安防、自动驾驶、无人机姿态保持与位置追踪等领域为主。

三、存储与计算设施

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

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

四、深度学习计算引擎

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

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图像的智能处理,对车道和周边环境实时感知、重建、识别,计算出最佳驾驶行为并控制车辆。

五、基础库管理

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

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

六、深度学习框架与流程

除了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等也都在试图发展相应的深度学习框架和流程支持软件,部分已经进入试运行状态。

更多机器学习框架参考

相关文章
相关标签/搜索