tensorflow学习:分布式tensorflow使用,代码实现inGraph方式
文章目錄
- 什么叫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給唯一確定了。
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习总结:tensorflow和py
- 下一篇: 深度学总结:weight_initial