在最近的几年中,人工智能随着神经网络的突破,得到了巨大的发展,特别在图像、分析、推荐等领域。
在人工智能快速发展的同时,计算规模不断扩大、专家系统过于单一、神经网络模型的灵活性、应用领域的复杂行等问题,也在不断升级。在这样的环境下,分布式人工智能的发展被研究机构和大型企业提上日程。
分布式人工智能,可以解决集中化人工智能的几个主要问题:
针对现有的分布式人工智能组件和框架的研究,可以看下几个主流框架的方案。
Tensorflow 的分布式方案
Tensorflow 底层数据是高性能的 gRPC 库,分布式集群的组件主要是三个部分:client、master、worker process。运用它的组件,可以形成两种主要的分布式部署模式: 单机多卡(single process) 和 多机多卡(multi-device process) 。方案出于 Martin Abadi、Ashish Agarwal、Paul Barham 论文《TensorFlow:Large-Scale Machine Learning on Heterogeneous Distributed Systems》。
它的部署和运作模式,如图 1-1 所示:
图 1-1 Tensorflow 单机单卡与多级多卡部署模式
对于普通的机器学习,单机单卡就可以进行运算,在运算规模不断升级的时候,就需要
对 tensoflow 的训练设计分布式结构。
机器学习在的参数训练,主要是两大过程:
在大规模的计算过程中,就需要进行集群计算,在小型规模的时候,可以使用单个机器,多个 CPU/GPU 来进行计算,在规模越来越大的时候,可以使用多个机器进行并行计算。
在 tensorflow 中分布式集群定义为一个“集群任务”(tf.train.ClusterSpec),将任务分布在不同的“服务器”(tf.train.Server)中,服务器中包含了“master”运行进程和”worker“计算进程。在分布式集群运算中,主要有以下结构:
Tensorflow 的多机多卡分布式模式,主要有以下几种:
根据 Tensorflow 的分布式机器学习方案,我们可以总结它存在的一些缺点,如下所示:
Spark 分布式机器学习
上面提到,Tensorflow 在机器学习并行计算的多层结构上,没有较好的解决方案,Spark 根据它在大数据领域的分布式框架,很好的解决了分层任务划分的处理。
在 Spark 中,计算模型可以设计成为有向无环图 DAG,无环图的顶点是 RDD,它是 Spark 的核心组件。RDD 是一种弹性的分布式数据集,它可以支持多个 RDD 分片的依赖、变换(transformation)和动作 (action),它可以从从 RDD A 变换成为 RDD B,这个 transformation 就是 DAG 无环图的边。通过 DAG 的表示方法,表示计算模型,并且编译成为 Stage。这个模型的表示,如图 1-2 所示:
图 1-2 Spark 计算模型和 Stage 形成的 DAG 图
Spark 运用它的分布式机制,可以支持多个 Stage 并行计算,也能支持 Stage 下属 Stage 模型分层结构。Spark 基于它的 master-worker 架构,可以将 DAG 中的 stage 分割,指定到不同的机器上面执行任务。它的驱动器 driver 负责协调任务和调度器组件 scheduler,调度器分为 DAG 和 Task 调度器,用来分配 Task 到不同的运算单元。它的分布式并行运算流程,如图 1-3 所示:
图 1-3 Spark分布式并行计算分层
上图表示了在分布式 AI 的训练环节,通过 Driver 规划整体模型,通过节点 Executor 端分别计算,再回归汇总给 Driver,它们的具体要点如下所示:
通过 Spark 的分布式计算框架与机器学习 caffe 运算库进行结合,伯克利大学 Michael I. Jordan 组发布了论文《SparkNet: Training Deep Network in Spark》,他们开发了 SparkNet 库,它是基于 Spark 的深度神经网络架构,主要能力如下所示:
根据 Spark 的分布式机器学习机制,我们可以总结它存在的一些缺点,如下所示:
Google 联合学习方案
针对小型化设备,google 在一篇文章《Federated Learning: Collaborative Machine
Learning without Centralized Training>
它的工作原理如下所示:
这样工作的好处有如下部分:
原文链接:三种分布式人工智能主流框架方案对比