1、知识点

"""
单机多卡:一台服务器上多台设备(GPU)
参数服务器:更新参数,保存参数
工作服务器:主要功能是去计算 更新参数的模式:
1、同步模型更新
2、异步模型更新
工作服务器会默认一个机器作为老大,创建会话 tensorflow设备命名规则:
/job:ps/task:0 job:ps,服务器类型 task:0,服务器第几台 /job:worker/task:0/cpu:0
/job:worker/task:0/gpu:0
/job:worker/task:0/gpu:1 设备使用:
1、对集群当中的一些ps,worker进行指定
2、创建对应的服务, ps:创建ps服务 join()
worker创建worker服务,运行模型,程序,初始化会话等等
指定一个默认的worker去做
3、worker使用设备:
with tf.device("/job:worker/task:0/gup:0"):
计算操作
4、分布式使用设备:
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:集群描述对象
API:
1、分布式会话函数: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)
参数:
master:指定运行会话协议IP和端口(用于分布式) "grpc://192.168.0.1:2000"
is_chief:是否为主worker(用于分布式)如果True,它将负责初始化和恢复基础的TensorFlow会话。
如果False,它将等待一位负责人初始化或恢复TensorFlow会话。
checkpoint_dir:检查点文件目录,同时也是events目录
config:会话运行的配置项, tf.ConfigProto(log_device_placement=True)
hooks:可选SessionRunHook对象列表
should_stop():是否异常停止
run():跟session一样可以运行op
2、tf.train.SessionRunHook
Hook to extend calls to MonitoredSession.run()
1、begin():在会话之前,做初始化工作
2、before_run(run_context)在每次调用run()之前调用,以添加run()中的参数。
ARGS:
run_context:一个SessionRunContext对象,包含会话运行信息
return:一个SessionRunArgs对象,例如:tf.train.SessionRunArgs(loss)
3、after_run(run_context,run_values)在每次调用run()后调用,一般用于运行之后的结果处理
该run_values参数包含所请求的操作/张量的结果 before_run()。
该run_context参数是相同的一个发送到before_run呼叫。
 ARGS:
run_context:一个SessionRunContext对象
run_values一个SessionRunValues对象, run_values.results
注:再添加钩子类的时候,继承SessionRunHook
3、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()
"""

2、代码

import tensorflow as tf

FLAGS = tf.app.flags.FLAGS

tf.app.flags.DEFINE_string("job_name", " ", "启动服务的类型ps or  worker")
tf.app.flags.DEFINE_integer("task_index", 0, "指定ps或者worker当中的那一台服务器以task:0 ,task:1") def main(argv): # 定义全集计数的op ,给钩子列表当中的训练步数使用
global_step = tf.contrib.framework.get_or_create_global_step() # 1、指定集群描述对象, ps , worker
cluster = tf.train.ClusterSpec({"ps": ["10.211.55.3:2223"], "worker": ["192.168.65.44:2222"]}) # 2、创建不同的服务, ps, worker
server = tf.train.Server(cluster, job_name=FLAGS.job_name, task_index=FLAGS.task_index) # 根据不同服务做不同的事情 ps:去更新保存参数 worker:指定设备去运行模型计算
if FLAGS.job_name == "ps":
# 参数服务器什么都不用干,是需要等待worker传递参数
server.join()
else:
worker_device = "/job:worker/task:0/cpu:0/" # 3、可以指定设备取运行
with tf.device(tf.train.replica_device_setter(
worker_device=worker_device,
cluster=cluster
)):
# 简单做一个矩阵乘法运算
x = tf.Variable([[1, 2, 3, 4]])
w = tf.Variable([[2], [2], [2], [2]]) mat = tf.matmul(x, w) # 4、创建分布式会话
with tf.train.MonitoredTrainingSession(
master= "grpc://192.168.65.44:2222", # 指定主worker
is_chief= (FLAGS.task_index == 0),# 判断是否是主worker
config=tf.ConfigProto(log_device_placement=True),# 打印设备信息
hooks=[tf.train.StopAtStepHook(last_step=200)]
) as mon_sess:
while not mon_sess.should_stop():
print(mon_sess.run(mat)) if __name__ == "__main__":
tf.app.run()

3、分布式架构图

tensorflow分布式运行的更多相关文章

  1. [源码解析] TensorFlow 分布式环境(1) --- 总体架构

    [源码解析] TensorFlow 分布式环境(1) --- 总体架构 目录 [源码解析] TensorFlow 分布式环境(1) --- 总体架构 1. 总体架构 1.1 集群角度 1.1.1 概念 ...

  2. [源码解析] TensorFlow 分布式环境(5) --- Session

    [源码解析] TensorFlow 分布式环境(5) --- Session 目录 [源码解析] TensorFlow 分布式环境(5) --- Session 1. 概述 1.1 Session 分 ...

  3. TensorFlow分布式在Amazon AWS上运行

    TensorFlow分布式在Amazon AWS上运行 Amazon AWS 提供采用 NVIDIA K8 GPU 的 P2.x 机器.为了能够使用,第一步还需要创建一个 Amazon AWS 账户, ...

  4. TensorFlow分布式(多GPU和多服务器)详解

    本文介绍有关 TensorFlow 分布式的两个实际用例,分别是数据并行(将数据分布到多个 GPU 上)和多服务器分配. 玩转分布式TensorFlow:多个GPU和一个CPU展示一个数据并行的例子, ...

  5. [翻译] TensorFlow 分布式之论文篇 "TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed Systems"

    [翻译] TensorFlow 分布式之论文篇 "TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed ...

  6. [翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow"

    [翻译] TensorFlow 分布式之论文篇 "Implementation of Control Flow in TensorFlow" 目录 [翻译] TensorFlow ...

  7. [源码解析] TensorFlow 分布式环境(2)---Master 静态逻辑

    [源码解析] TensorFlow 分布式环境(2)---Master 静态逻辑 目录 [源码解析] TensorFlow 分布式环境(2)---Master 静态逻辑 1. 总述 2. 接口 2.1 ...

  8. [源码解析] TensorFlow 分布式环境(3)--- Worker 静态逻辑

    [源码解析] TensorFlow 分布式环境(3)--- Worker 静态逻辑 目录 [源码解析] TensorFlow 分布式环境(3)--- Worker 静态逻辑 1. 继承关系 1.1 角 ...

  9. [源码解析] TensorFlow 分布式环境(4) --- WorkerCache

    [源码解析] TensorFlow 分布式环境(4) --- WorkerCache 目录 [源码解析] TensorFlow 分布式环境(4) --- WorkerCache 1. WorkerCa ...

随机推荐

  1. functools:管理函数的工具

    介绍 functools模块提供了一些工具来管理或扩展和其他callable对象,从而不必完全重写 修饰符 偏函数partial from functools import partial ''' f ...

  2. Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

    Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported告诉你,你的请求头是application/x- ...

  3. HH的项链 HYSBZ - 1878 (莫队/ 树状数组)

    HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得越来越长.有一天,他突然 ...

  4. Linux用户组账号文件——group和gshadow

     /etc/passwd文件中包含着每个用户的用户组ID(GID). /etc/group文件对用户组的许可权限的控制并不是必要的,这是因为Linux系统用来自于/etc/passwd文件的UID.G ...

  5. C#工具:ASP.net 调用MySQL 帮助类(包括存储过程调用)

    1.创建DbHelperMySQL类 2.复制代码到类中 using System; using System.Collections; using System.Collections.Specia ...

  6. Java思维题

    1.求取字符串中出现的第一个非重复字符.   比如: "hello" 中的 h, "hello, how r you?" 中的 e 2.使用26字符母实现加密 ...

  7. Flyway的简单介绍和使用(转)

    Flyway的简单介绍及使用 一.开发时管理数据库遇到的问题: 现在开发一般都是团队开发,这样就会出现项目同步的问题,代码同步可以通过SVN工具管理起来,那数据库同步怎么办呢?理想的情况下,在开发新项 ...

  8. JavaScript基础之变量的自增与自减

    一.自增(++) ⑴什么是自增? 通过自增运算符可以使变量在自身的基础上加一: 对于一个变量自增以后,原变量的值会立即自增一: 示例: <!DOCTYPE html> <html l ...

  9. php+列出目录文件

    用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助.此控件PC全平台支持包括mac,li ...

  10. angular打包(二):nw.js

    1 npm build 把ng编译出dist 2 单独写一个package.json 放在dist文件夹里. { "name": "app", "ma ...