日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tensorflow学习:分布式tensorflow使用,代码实现inGraph方式

發(fā)布時間:2024/9/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tensorflow学习:分布式tensorflow使用,代码实现inGraph方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 什么叫distributed tensorflow training,它到底干什么?
    • Cluster
    • master和workers
    • client
  • 最簡單的模型Client---Master(worker)代碼實(shí)現(xiàn):
    • Master(worker):即當(dāng)老板又當(dāng)員工,屬于個體戶,local就不用接受任務(wù)了,來什么任務(wù)就執(zhí)行什么任務(wù)
    • Client:build graph,把執(zhí)行圖的任務(wù)發(fā)給Master:
      • build graph
      • 把執(zhí)行圖的任務(wù)發(fā)給Master
  • 通用的的模型Client---Master(worker)--Workers代碼實(shí)現(xiàn):
    • Master/workers:因?yàn)榘才湃蝿?wù)已經(jīng)在graph里面了,Master和workers沒有區(qū)別(master隱含執(zhí)行了sess.run):
    • Client:build graph,把執(zhí)行圖的任務(wù)發(fā)給Master:
      • build graph
      • 把執(zhí)行圖的任務(wù)發(fā)給Master:

什么叫distributed tensorflow training,它到底干什么?

就是把一個graph分成N部分分給N個server去計(jì)算(inGraph),或者把N張graph分給N個server去計(jì)算(betweenGraph),混合的方式也可以。

Cluster

這個N個server就是Cluster,就是我們中文的“集群”。

master和workers

這N個server里面有一臺server叫master(當(dāng)然也可以兼職worker的工作),其他的N-1個server叫worker,master的本職工作就是:執(zhí)行Graph,按照Graph分配任務(wù)給workers,并負(fù)責(zé)協(xié)調(diào)workers之間的交流,整理結(jié)果。

client

master是這N個servers對外的負(fù)責(zé)人,master會和client對接。
啥是client?就是服務(wù)器的客戶,就是買服務(wù)的人,說人話就是寫代碼,運(yùn)行主程序的地方,它的工作是:創(chuàng)建Graph(這個圖里包含了任務(wù)分配),并把創(chuàng)建好的Graph發(fā)送給master,master完成任務(wù)后把結(jié)果發(fā)給client。

最簡單的模型Client—Master(worker)代碼實(shí)現(xiàn):

Master(worker):即當(dāng)老板又當(dāng)員工,屬于個體戶,local就不用接受任務(wù)了,來什么任務(wù)就執(zhí)行什么任務(wù)

import tensorflow as tf server=tf.train.Server.create_local_server() server.join()

執(zhí)行完畢會有一個該server的IP標(biāo)識:grpc://172.16.100.2:12222

Client:build graph,把執(zhí)行圖的任務(wù)發(fā)給Master:

build graph

import tensorflow as tf import numpy as np# create data x_data = np.random.rand(100).astype(np.float32) y_data = x_data*0.1 + 0.3### create tensorflow structure start ### Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) biases = tf.Variable(tf.zeros([1])) y = Weights*x_data + biases loss = tf.reduce_mean(tf.square(y-y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) init = tf.global_variables_initializer() ### create tensorflow structure end ###

把執(zhí)行圖的任務(wù)發(fā)給Master

server_target="grpc://172.16.100.2:12222" #master # create datax_data = np.random.rand(100).astype(np.float32) y_data = x_data*0.1 + 0.3with tf.Session(server_target) as sess:sess.run(init)for step in range(1000):sess.run(train)if step % 20 == 0:print(step, sess.run(Weights), sess.run(biases))

通用的的模型Client—Master(worker)–Workers代碼實(shí)現(xiàn):

Master/workers:因?yàn)榘才湃蝿?wù)已經(jīng)在graph里面了,Master和workers沒有區(qū)別(master隱含執(zhí)行了sess.run):

tf.train.Server(cluster, job_name=“canshu”, task_index=0)描述了當(dāng)前主機(jī)需要執(zhí)行的任務(wù),就是當(dāng)前主機(jī)接受的任務(wù):
每一個workers都被/job:job_id/task:task_id給唯一確定了。

# 172.16.100.2:12222主機(jī):工種為canshu的,第0個task import tensorflow as tf cluster=tf.train.ClusterSpec({"canshu": ["172.16.100.2:12222",# /job:canshu/task:0 運(yùn)行的主機(jī)"172.16.100.3:12222",# /job:canshu/task:1 運(yùn)行的主機(jī)],"gongzuo": ["172.16.100.4:12222", # /job:gongzuo/task:0 運(yùn)行的主機(jī)"172.16.100.5:12222" # /job:gongzuo/task:1 運(yùn)行的主機(jī)]}) server = tf.train.Server(cluster, job_name="canshu", task_index=0) server.join()# 172.16.100.3:12222主機(jī):工種為canshu的,第1個task import tensorflow as tf cluster=tf.train.ClusterSpec({"canshu": ["172.16.100.2:12222",# /job:canshu/task:0 運(yùn)行的主機(jī)"172.16.100.3:12222",# /job:canshu/task:1 運(yùn)行的主機(jī)],"gongzuo": ["172.16.100.4:12222", # /job:gongzuo/task:0 運(yùn)行的主機(jī)"172.16.100.5:12222" # /job:gongzuo/task:1 運(yùn)行的主機(jī)]}) server = tf.train.Server(cluster, job_name="canshu", task_index=1) server.join()# 172.16.100.4:12222主機(jī):工種為gongzuo的,第0個task import tensorflow as tf cluster=tf.train.ClusterSpec({"canshu": ["172.16.100.2:12222",# /job:canshu/task:0 運(yùn)行的主機(jī)"172.16.100.3:12222",# /job:canshu/task:1 運(yùn)行的主機(jī)],"gongzuo": ["172.16.100.4:12222", # /job:gongzuo/task:0 運(yùn)行的主機(jī)"172.16.100.5:12222" # /job:gongzuo/task:1 運(yùn)行的主機(jī)]}) server = tf.train.Server(cluster, job_name="gongzuo", task_index=0) server.join()# 172.16.100.5:12222主機(jī):工種為gongzuo的,第1個task import tensorflow as tf cluster=tf.train.ClusterSpec({"canshu": ["172.16.100.2:12222",# /job:canshu/task:0 運(yùn)行的主機(jī)"172.16.100.3:12222",# /job:canshu/task:1 運(yùn)行的主機(jī)],"gongzuo": ["172.16.100.4:12222", # /job:gongzuo/task:0 運(yùn)行的主機(jī)"172.16.100.5:12222" # /job:gongzuo/task:1 運(yùn)行的主機(jī)]}) server = tf.train.Server(cluster, job_name="gongzuo", task_index=1) server.join()

Client:build graph,把執(zhí)行圖的任務(wù)發(fā)給Master:

build graph

import tensorflow as tf import numpy as np# create data x_data = np.random.rand(100).astype(np.float32) y_data = x_data*0.1 + 0.3### create tensorflow structure start ### starttime=datetime.now() with tf.device("/job:canshu/task:0"):Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))with tf.device("/job:canshu/task:1"):biases = tf.Variable(tf.zeros([1]))with tf.device("/job:gongzuo/task:0"):y = Weights*x_data + biasesloss = tf.reduce_mean(tf.square(y-y_data))with tf.device("/job:gongzuo/task:1"):optimizer = tf.train.GradientDescentOptimizer(0.5)train = optimizer.minimize(loss)init = tf.global_variables_initializer()

把執(zhí)行圖的任務(wù)發(fā)給Master:

server_target="grpc://172.16.100.2:12222" #master with tf.Session(server_target) as sess:sess.run(init)for step in range(1000):sess.run(train)if step % 20 == 0:print(step, sess.run(Weights), sess.run(biases))

總結(jié)

以上是生活随笔為你收集整理的tensorflow学习:分布式tensorflow使用,代码实现inGraph方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。