gpt4 book ai didi

python - 在 TensorFlow 中关闭服务器

转载 作者:太空狗 更新时间:2023-10-29 21:19:26 25 4
gpt4 key购买 nike

当我们要使用分布式TensorFlow时,我们会使用创建一个参数服务器

tf.train.Server.join()

但是,除了杀死进程之外,我找不到任何关闭服务器的方法。 join() 的 TensorFlow 文档是

Blocks until the server has shut down.
This method currently blocks forever.

这让我很烦恼,因为我想创建许多服务器用于计算,并在一切完成后关闭它们。

是否有可能的解决方案。

谢谢

最佳答案

您可以通过使用 session.run(dequeue_op) 而不是 server.join() 让参数服务器进程按需终止,并让另一个进程将某些内容排入该队列当您希望此进程结束时。

因此对于 k 参数服务器分片,您可以创建 k 队列,具有唯一的 shared_name 属性并尝试出列 来自那个队列。当您想要关闭服务器时,您可以遍历所有队列并将 token enqueue 放入每个队列。这将导致 session.run 解除阻塞,Python 进程将运行到最后并退出,从而导致服务器关闭。

下面是一个独立的示例,其中包含 2 个分片,取自: https://gist.github.com/yaroslavvb/82a5b5302449530ca5ff59df520c369e

(对于多工作器/多分片示例,请参阅 https://gist.github.com/yaroslavvb/ea1b1bae0a75c4aae593df7eca72d9ca )

import subprocess
import tensorflow as tf
import time
import sys

flags = tf.flags
flags.DEFINE_string("port1", "12222", "port of worker1")
flags.DEFINE_string("port2", "12223", "port of worker2")
flags.DEFINE_string("task", "", "internal use")
FLAGS = flags.FLAGS

# setup local cluster from flags
host = "127.0.0.1:"
cluster = {"worker": [host+FLAGS.port1, host+FLAGS.port2]}
clusterspec = tf.train.ClusterSpec(cluster).as_cluster_def()

if __name__=='__main__':
if not FLAGS.task: # start servers and run client

# launch distributed service
def runcmd(cmd): subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT)
runcmd("python %s --task=0"%(sys.argv[0]))
runcmd("python %s --task=1"%(sys.argv[0]))
time.sleep(1)

# bring down distributed service
sess = tf.Session("grpc://"+host+FLAGS.port1)
queue0 = tf.FIFOQueue(1, tf.int32, shared_name="queue0")
queue1 = tf.FIFOQueue(1, tf.int32, shared_name="queue1")
with tf.device("/job:worker/task:0"):
add_op0 = tf.add(tf.ones(()), tf.ones(()))
with tf.device("/job:worker/task:1"):
add_op1 = tf.add(tf.ones(()), tf.ones(()))

print("Running computation on server 0")
print(sess.run(add_op0))
print("Running computation on server 1")
print(sess.run(add_op1))

print("Bringing down server 0")
sess.run(queue0.enqueue(1))
print("Bringing down server 1")
sess.run(queue1.enqueue(1))

else: # Launch TensorFlow server
server = tf.train.Server(clusterspec, config=None,
job_name="worker",
task_index=int(FLAGS.task))
print("Starting server "+FLAGS.task)
sess = tf.Session(server.target)
queue = tf.FIFOQueue(1, tf.int32, shared_name="queue"+FLAGS.task)
sess.run(queue.dequeue())
print("Terminating server"+FLAGS.task)

关于python - 在 TensorFlow 中关闭服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39810356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com