tensorflow分布式的原理、架构以及更新参数模式

一、定义
分布式Tensorflow是由高性能的gRPC框架作为底层技术来支持的。这是一个通信框架gRPC(google remote procedure call),是一个高性能、跨平台的RPC框架。RPC协议,即远程过程调用协议,是指通过网络从远程计算机程序上请求服务。
RPC框架:远程过程调用,相当于是对底层协议的一个封装,解决一些传输错误和同步的问题,例如视频会议这些都需要用到RPC框架。
分布式系统:hadoop、tensorflow
二、计算机网络七层模型
(一)应用层 http协议
(二)表示层
(三)会话层
(四)传输层 tcp/udp
(五)网络 ip
(六)数据链路层 ppp
(七)物理层 rj45
三、分布式原理
tensorflow分布式的原理、架构以及更新参数模式_第1张图片
(一)单机多卡:指单台服务器有多快GPU设备,运算速度GPU>CPU。假设一台机器上有4块GPU,单机多GPU的训练过程如下:
1、在单机单GPU的训练中,数据是一个batch一个batch的训练。在单机多GPU中,数据一次处理4个batch(假设是4个GPU训练),每个GPU处理一个batch的数据计算。
2、变量,或者说参数,保存在CPU上。数据由CPU分发给4个GPU,在GPU上完成计算,得到每个批次要更新的梯度。
3、在CPU上收集完4个GPU上要更新的梯度,计算一下平均梯度,然后更新。
4、循环进行上面步骤。
(二)多机多卡:指有多台计算机,充分使用多台计算机的性能,处理数据的能力。可以根据不同计算机划分不同的工作节点。当数据量或者计算量达到超过一台计算机处理能力的上限的话,必须使用分布式。
tensorflow的特点:计算速度提高,设备多
四、多机多卡分布式的架构
tensorflow分布式的原理、架构以及更新参数模式_第2张图片
参数服务器ps:更新参数,保存参数
工作服务器(worker):主要功能就是去计算
tensorflow分布式的原理、架构以及更新参数模式_第3张图片
tensorflow分布式会从所有worker里面默认指定一个worker(一般会默认指定第一台)来创建会话、运行会话、创建文件等(将这些资源都分配好),然后再由所有worker一起来计算。
五、分布式的模式
(一)分布式更新参数的模式(协调存储,更新参数)
1、同步模式更新
tensorflow分布式的原理、架构以及更新参数模式_第4张图片
2、异步模式更新
tensorflow分布式的原理、架构以及更新参数模式_第5张图片
六、tensorflow设备的命名规则
/job:ps/task:0 参数服务器和工作服务器都可以有多台
/job:worker/task:0
服务器类型/服务器第几台
/job:worker/task:0/cpu:0
/job:worker/task:0/gpu:0
七、分布式API
(一)创建一个tf.train.ClusterSpec,用于对集群中的所有任务进行描述,该描述内容对所有任务应该是相同的
1、创建集群
cluster = tf.train.ClusterSpec({“ps”: ps_spec, “worker”: worker_spec})
例如:cluster = tf.train.ClusterSpec(
{“worker”: [“worker0.example.com:2222”, /job:worker/task:0 “worker1.example.com:2222”, /job:worker/task:1 “worker2.example.com:2222”], /job:worker/task:2
“ps”: [“ps0.example.com:2222”, /job:ps/task:0 “ps1.example.com:2222”] /job:ps/task:1})
注意:端口随便指定,不要与常用的窗口冲突
(二)创建一个tf.train.Server,用于创建一个任务(ps,worker),并运行相应作业上的计算任务。
1、创建服务
tf.train.Server(server_or_cluster_def, job_name=None, task_index=None, protocol=None, config=None, start=True)创建服务(ps,worker)
(1)server_or_cluster_def: 集群描述
(2)job_name: 任务类型名称
(3)task_index: 任务数
(4)attribute:target,返回tf.Session连接到此服务器的目标
(5)method:join()
参数服务器端,直到服务器等待接受参数任务关闭
2、工作节点指定设备运行
tf.device(device_name_or_function)
选择指定设备或者设备函数
(1)if device_name:指定设备
例如:"/job:worker/task:0/cpu:0”
(2)if function:
tf.train.replica_device_setter(worker_device=worker_device,
cluster=cluster)
作用:通过此函数协调不同设备上的初始化操作
worker_device:为指定设备, “/job:worker/task:0/cpu:0” or
“/job:worker/task:0/gpu:0”
cluster:集群描述对象
注:使用with tf.device(),使不同工作节点工作在不同的设备上
(三)分布式会话API
MonitoredTrainingSession(master=‘’,is_chief=True,checkpoint_dir=None,hooks=None,save_checkpoint_secs=600,save_summaries_steps=USE_DEFAULT,save_summaries_secs=USE_DEFAULT,config=None)
1、分布式会话函数(#tf.Session()不支持分布式)
(1)master:指定运行会话协议IP和端口(用于分布式)
“grpc://192.168.0.1:2000”
(2)is_chief是否为主worker(用于分布式)如果True,它将负责初始化和恢复基础的TensorFlow会话。如果False,
它将等待一位负责人初始化或恢复TensorFlow会话。
(3)checkpoint_dir:检查点文件目录,同时也是events目录
(4)config:会话运行的配置项, tf.ConfigProto(log_device_placement=True)
(5)hooks:可选SessionRunHook对象列表
常用的hook:
tf.train.StopAtStepHook(last_step=5000):指定执行的训练轮数也就是max_step,超过了就会抛出异常;
tf.train.NanTensorHook(loss):判断指定Tensor是否为NaN,为NaN则结束。
注:在使用钩子的时候需要定义一个全局步数:global_step = tf.contrib.framework.get_or_create_global_step()
(6)should_stop():是否异常停止
(7)run():跟session一样可以运行op
tensorflow分布式的原理、架构以及更新参数模式_第6张图片

你可能感兴趣的:(tensorflow,分布式,深度学习)