tensorflow分布式计算机制解读:以数据并行为重

author author     2022-09-08     737

关键词:

Tensorflow 是一个为数值计算(最常见的是训练神经网络)设计的流行开源库。在这个框架中,计算流程通过数据流程图(data flow graph)设计,这为更改操作结构与安置提供了很大灵活性。TensorFlow 允许多个 worker 并行计算,这对必须通过处理的大量训练数据训练的神经网络是有益的。此外,如果模型足够大,这种并行化有时可能是必须的。在本文中,我们将探讨 TensorFlow 的分布式计算机制。

 

技术分享

 

TensorFlow 计算图示例

数据并行 VS. 模型并行

当在多个计算节点间分配神经网络训练时,通常采用两种策略:数据并行和模型并行。在前者中,在每个节点上单独创建模型的实例,并馈送不同的训练样本;这种架构允许更高的训练吞吐量。相反,在模型并行中,模型的单一实例在多个节点间分配,这种架构允许训练更大的模型(可能不一定适合单节点的存储器http://aomenyonli.cn/)。如果需要,也可以组合这两种策略,使给定模型拥有多个实例,每个实例跨越多个节点。在本文中,我们将重点关注数据并行。

 

技术分享

 

数据并行与模型并行的不同形式。左:数据并行;中:模型并行;右:数据并行与模型并行。

TensorFlow 中的数据并行

当使用 TensorFlow 时,数据并行主要表现为两种形式:图内复制(ihttp://dajinnylee.cn/n-graph replication)和图间复制(between-graph replication)。两种策略之间最显著的区别在于流程图的结构与其结果。

图内复制

图内复制通常被认为是两种方法中更简单和更直接(但更不可扩展的)的方法。当采用这种策略时,需要在分布式的主机上创建一个包含所有 worker 设备中副本的流程图。可以想象,随着 worker 数量的增长,这样的流程图可能会大幅扩展,这可能会对模型性能产生不利影响。然而,对于小系统(例如,双 GPU 台式计算机),由于其简单性,图内复制可能是最优的。

以下是使用单个 GPU 的基线 TensorFlow 方法与应用图内复制方法的代码片段的对比。考虑到图内复制方法与扩展(scaling)相关的问题,我们将仅考虑单机、多 GPU 配置的情况。这两个代码片段之间的差异非常小,它们的差异仅存在于:对输入数据的分块,使得数据在各 worker 间均匀分配,遍历每个含有 worker 流程图的设备,并将来自不同 worker 的结果连接起来。通过少量代码更改,我们可以利用多个设备,这种方法使可扩展性不再成为大障碍,从而在简单配置下更受欢迎。

# single GPU (baseline) import tensorflow as tf # place the initial data on the cpu withtf.device(‘/cpu:0‘): input_data = tf.Variable([[1.,2., 3.], [4., 5., 6.],[7., 8., 9.], [10., 11.,12.]]) b = tf.Variable([[1.],[1.], [2.]]) # compute the result on the 0th gpu withtf.device(‘/gpu:0‘): output = tf.matmul(input_data, b) # create a session and run with tf.Session() as sess:sess.run(tf.global_variables_initializer()) print sess.run(output) # in-graph replication import tensorflow as tf num_gpus = 2 # place the initial data on the cpuwith tf.device(‘/cpu:0‘): input_data = tf.Variable([[1.,2., 3.], [4., 5., 6.],[7., 8., 9.], [10., 11.,12.]]) b = tf.Variable([[1.],[1.], [2.]]) # split the data into chunks for each gpu inputs= tf.split(input_data, num_gpus) outputs = [] # loop over available gpus and pass input data for i in range(num_gpus): withtf.device(‘/gpu:‘+str(i)):outputs.append(tf.matmul(inputs[i], b)) # merge the results of the devices with tf.device(‘/cpu:0‘): output = tf.concat(outputs,axis=0) # create a session and run with tf.Session() as sess:sess.run(tf.global_variables_initializer()) print sess.run(output)

这些更改也可以通过检查下面的 TensorFlow 流程图来可视化。增加的 GPU 模块说明了原始方法的扩展方式。

 

技术分享

 

图内复制的可视化。左:原始图。右:图内复制的结果图

tensorflow函数

 TensorFlow将图形定义转换成分布式执行的操作,以充分利用可用的计算资源(如CPU或GPU。一般你不需要显式指定使用CPU还是GPU,TensorFlow能自动检测。如果检测到GPU,TensorFlow会尽可能地利用找到的第一个GPU来执行操作.并行计算能让... 查看详情

sparkrdd机制实现模型

RDD渊源弹性分布式数据集(RDD)。它是MapReduce模型一种简单的扩展和延伸。RDD为了实现迭代、交互性和流查询等功能,须要保证RDD具备在并行计算阶段之间能够高效地数据共享的功能特性。RDD运用高效的数据共享概念和相似于MapRedu... 查看详情

分布式tensorflow:谁应用参数更新?

我已经使用过TensorFlow但是对于训练模型分发TensorFlow是新手。我的理解是,当前的最佳实践支持使用异步更新的数据并行模型:GoogleBrain团队于2016年4月发布的一篇论文对各种方法进行了基准测试,发现使用一些备用复制品进行同... 查看详情

分布式并行计算mapreduce

...理和工作过程。HDFS功能:是Hadoop项目的核心子项目。是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上pcserver。具有以下的功能:(1)高容错性:自... 查看详情

学习笔记tf041:分布式并行

TensorFlow分布式并行基于gRPC通信框架,一个master负责创建Session,多个worker负责执行计算图任务。先创建TensorFlowCluster对象,包含一组task(每个task一台独立机器),分布式执行TensorFlow计算图。一个Cluster切分多个job,一个job是一类特... 查看详情

tensorflow基础——常用函数(代码片段)

一、tf函数TensorFlow将图形定义转换成分布式执行的操作,以充分利用可用的计算资源(如CPU或GPU。一般你不需要显式指定使用CPU还是GPU,TensorFlow能自动检测。如果检测到GPU,TensorFlow会尽可能地利用找到的第一个GPU来执行操作.并行计... 查看详情

corr2018|horovod:fastandeasydistributeddeeplearningintensorflow(代码片段)

...GPU间通信,而且仅仅更改少量代码就可以实现多GPU训练。TensorFlow中提供了一些分布式训练的API,这些API适用于不同的环境。这就导致用户往往不知道如何更改代码以进行分布式训练,而且debug也很困难。再者,TensorFlow的分布式... 查看详情

tensorflow计算图

tensorflow计算图   计算图是对有向图的表示,主要包含点和边;tensorflow使用计算图计算,计算图的点对应于ops,variables,constant,placeholder等,边对应于Tensors。因此tensorflow主要包含两个部分:构建计算图和runtime运行计... 查看详情

4mapreduce思想运行机制

...ce离线计算框架分而治之input>map>shuffle>reduce>output分布式并行的计算框架将计算过程分为两个阶段,Map和ReduceMap阶段并行处理输入数据Reduce阶段对Map结果进行汇总Shuffle链接Map和Reduce两个阶段MapTask将数据写入到本地磁盘Redu... 查看详情

分布式深度学习(sparkmllib,parameterserverring-allreduce和tensorflow)(代码片段)

SparkMLlibSpark分布式计算原理Spark(分布式的计算平台),分布式:指计算节点之间不共享内存,需要通过网络通信的方式交换数据。Spark最典型的应用方式是建立在大量廉价计算节点(廉价主机、虚拟的dockercontainer)上;但这种... 查看详情

『ai原理解读』mindspore1.2强大并行能力介绍与解读

...算子级模型并行、Pipeline模型并行、优化器模型并行和重计算,并且在图编译阶段,有机融合了5个维度的并行。这5维并行方式组合起来构成了盘古的并行策略。 a.数据并行 数据并行是最基本,应用最广的并行方式&#... 查看详情

分布式的并行计算技术

...还有Yahoo提出的S4系统。批计算:  Hadoop:是一个提供分布式存储和计算的软件框架,它具有无共享、高可用、弹性可扩展的特点,非常适合处理海量数据。先存储再计算。实时批计算:  Spark:是基于内存计算、支持快速迭... 查看详情

『ai原理解读』mindspore1.2强大并行能力介绍与解读

...算子级模型并行、Pipeline模型并行、优化器模型并行和重计算,并且在图编译阶段,有机融合了5个维度的并行。这5维并行方式组合起来构成了盘古的并行策略。 a.数据并行 数据并行是最基本,应用最广的并行方式&#... 查看详情

高性能计算中的并行计算分布式计算网格计算和云计算之间的区别与联系

    并行计算、分布式计算、网格计算与云计算都属于高性能计算(HighPerformance Computing,HPC)的范畴,主要目的在于对大数据的分析与处理,但它们却存在很多差异。电子海图云服务是基于高性能计算的理... 查看详情

10张图帮你搞定tensorflow数据读取机制

导读在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解。确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料。今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下tensorflow的... 查看详情

tensorflow-monitoredtrainingsession解读(代码片段)

  MonitoredTrainingSession是tensorflow管理分布式训练中一个重要方法,它相当于集成了一些监控训练组件,如init、summary、log、save等。在早期的版本,一般使用tf.train.Supervisor来管理session,后来框架升级后,官方就推荐用MonitoredTraini... 查看详情

浅谈spark内部运行机制

...可以对Hadoop和Spark的一半给吃透了,那么到底是RDDRDD(弹性分布式数据集)首先体现数据集,RDD是对原始数据的封装,该种数据结构内部可以对数据进行逻辑分区,其次分布式体现是并行计算以及需要解决容错问题,也就是根据依... 查看详情

并行计算与分布式计算

主要内容来自维基百科先上一张图大略直观感受一下:分布式系统是联网计算机组,其工作目标相同。术语“ 并发计算 ”,“ 并行计算 ”和“分布式计算”有很多重叠,它们之间没有明显的区别。[15]同一系统... 查看详情