分布式接口
创建集群的方法是为每一个任务启动一个服务,这些任务可以分布在不同的机器上,也可以同一台机器上启动多个任务,使用不同的GPU等来运行。每个任务都会创建完成一下工作
-
1、创建一个tf.train.ClusterSpec,用于对集群中的所有任务进行描述,该描述内容对所有任务应该是相同的
-
2、创建一个tf.train.Server,用于创建一个任务,并运行相应作业上的计算任务。
Tensorflow的分布式API使用如下:
- tf.train.ClusterSpec()
创建ClusterSpec,表示参与分布式TensorFlow计算的一组进程
cluster = tf.train.ClusterSpec({"worker": ["worker0.example.com:2222", /job:worker/task:0 "worker1.example.com:2222", /job:worker/task:1 "worker2.example.com:2222"], /job:worker/task:2 "ps": ["ps0.example.com:2222", /job:ps/task:0 "ps1.example.com:2222"]}) /job:ps/task:1
创建Tensorflow的集群描述信息,其中ps和worker为作业名称,通过指定ip地址加端口创建,
- tf.train.Server(server_or_cluster_def, job_name=None, task_index=None, protocol=None, config=None, start=True)
- server_or_cluster_def: 集群描述
- job_name: 任务类型名称
- task_index: 任务数
创建一个服务(主节点或者工作节点服务),用于运行相应作业上的计算任务,运行的任务在task_index指定的机器上启动,例如在不同的ip+端口上启动两个工作任务
# 第一个任务 cluster = tf.train.ClusterSpec({"worker": ["localhost:2222","localhost:2223"]}) server = tf.train.Server(cluster, job_name="worker", task_index=0) # 第二个任务 cluster = tf.train.ClusterSpec({"worker": ["localhost:2222","localhost:2223"]}) server = tf.train.Server(cluster, job_name="worker", task_index=1)
- 属性:target
- 返回tf.Session连接到此服务器的目标
- 方法:join()
- 参数服务器端等待接受参数任务,直到服务器关闭
- tf.device(device_name_or_function)
工作人任务端的代码在指定的设备上执行张量运算,指定代码运行在CPU或者GPU上
with tf.device("/job:ps/task:0"): weights = tf.Variable(...)