TensorFlow支持分布式运行,即运行在多台机器上进行计算。机器类型分为PS,参数服务器;Worker,计算服务器。并行方式分为异步,每台机器独立计算一个Step,更新至参数服务器;同步,所有机器都完成计算,统一更新至参数服务器。
本文源码的GitHub地址,位于dist_test
文件夹。
创建集群,使用集群设备;创建Server,ps参数服务器,直接等待
cluster = tf.train.ClusterSpec({"ps": ps_spec, "worker": worker_spec})
server = tf.train.Server(cluster, job_name=FLAGS.job_name, task_index=FLAGS.task_index)
if FLAGS.job_name == "ps":
server.join()
with tf.device(tf.train.replica_device_setter(
worker_device=worker_device,
ps_device="/job:ps/cpu:0",
cluster=cluster)):
创建Supervisor
sv = tf.train.Supervisor(
is_chief=is_chief,
logdir=train_dir,
init_op=init_op,
recovery_wait_secs=1,
global_step=global_step)
创建sess_config
sess_config = tf.ConfigProto(
allow_soft_placement=True,
log_device_placement=False,
device_filters=["/job:ps", "/job:worker/task:%d" % FLAGS.task_index])
Supervisor和sess_config
创建Session,TF的核心执行会话
sess = sv.prepare_or_wait_for_session(server.target, config=sess_config)
其余由Session执行的图,类似。
三台机器的执行命令,ps是hd1,worker是learn和docker01。
python mnist_replica.py --job_name=ps --task_index=0
python mnist_replica.py --job_name=worker --task_index=0
python mnist_replica.py --job_name=worker --task_index=1
异步模式,全局步骤由两台服务器分开处理,并且更新到参数服务器。
分布式
网友评论