尚不清楚参数服务器如何知道分布式张量流训练中的操作。
例如,在此SO问题中,以下代码用于配置参数服务器和工作程序任务:
if FLAGS.job_name == "ps":
server.join()
elif FLAGS.job_name == "worker":
##some training code
如何server.join()
指示给定的任务应该是参数服务器?参数是一种默认的任务行为吗?您还能/应该告诉参数服务任务做什么?
编辑 :这个SO问题解决了我的一些问题:“逻辑确保将Variable对象均匀分配给充当参数服务器的工作程序。”
但是参数服务器如何知道它是参数服务器?是否server.join()
足够?
TL; DR:
TensorFlow对“参数服务器”一无所知,但它支持在不同进程中跨多个设备运行图形。其中一些进程的设备名称以开头"/job:ps"
,并且其中包含变量。工人负责培训过程,当他们运行培训过程时,train_op
将导致"/job:ps"
设备上发生工作,这将更新共享变量。
该server.join()
方法只是告诉TensorFlow阻塞并监听请求,直到服务器关闭为止(这意味着它永远永久阻塞,或者直到您终止进程为止,因为当前尚未实现干净关闭)。
在我上一个答案的示例中,PS任务是被动的,并且一切都由…中的工作程序任务控制## some training code
。如果您将代码拆分到多个设备上,TensorFlow将添加适当的通信,这将扩展到不同进程中的设备。该with tf.device(tf.train.replica_device_setter(...)):
块告诉TensorFlow通过将其设备设置为"/job:ps/task:{i}"
(对于的不同值{i}
,以循环方式选择)将每个变量置于不同的PS任务上。
当您调用时sess.run(train_op)
,TensorFlow将运行一个依赖并更新变量的图,并包括更新变量的操作。这部分计算将在"/job:ps"
设备上进行,因此这些设备将充当参数服务器。
本文向大家介绍tensorflow 固定部分参数训练,只训练部分参数的实例,包括了tensorflow 固定部分参数训练,只训练部分参数的实例的使用技巧和注意事项,需要的朋友参考一下 在使用tensorflow来训练一个模型的时候,有时候需要依靠验证集来判断模型是否已经过拟合,是否需要停止训练。 1.首先想到的是用tf.placeholder()载入不同的数据来进行计算,比如 这种方式很简单,也很
问题内容: 我正在看TensorFlow“ MNIST对于ML初学者”教程,我想在每个训练步骤之后打印出训练损失。 我的训练循环目前看起来像这样: 现在,定义为: 我要打印的损失在哪里: 一种打印方式是在训练循环中显式计算: 我现在有两个问题: 鉴于已经在期间进行了计算,因此将其计算两次效率低下,这需要所有训练数据的前向通过次数的两倍。有没有一种方法可以访问在计算期间的value ? 我如何打印?
数据丢失:不是sstable(错误的幻数):可能您的文件格式不同,您需要使用不同的还原运算符? 我看过这篇文章,但是tf。火车导出元图不起任何作用。另外,如果我尝试在新的终端选项卡中生成输出,如下所示: 我得到这个错误,基本上说我不能生成输出,因为训练数据还没有保存。如何保存并完成培训?
对于初始模型,我主要遵循这一点。比方说,我想在每个训练循环上打印批次中使用的图像数据,即我想在“微调不同标签集上的模型”中打印每个训练迭代的“images”变量值代码,既然会话实际上是在slim中创建的,我该如何做呢。训练训练功能,因此我无法进行sess。在没有SES的情况下运行([图像])?
相关概念 客户端 (Client):客户端是一个用于建立 TensorFlow 计算图并创立与集群进行交互的会话层 tensorflow::Session 的程序。一般客户端是通过 python 或 C++ 实现的。一个独立的客户端进程可以同时与多个 TensorFlow 的服务端相连 (上面的计算流程一节),同时一个独立的服务端也可以与多个客户端相连。 集群 (Cluster) : 一个 Ten
在第 11 章,我们讨论了几种可以明显加速训练的技术:更好的权重初始化,批量标准化,复杂的优化器等等。 但是,即使采用了所有这些技术,在具有单个 CPU 的单台机器上训练大型神经网络可能需要几天甚至几周的时间。 在本章中,我们将看到如何使用 TensorFlow 在多个设备(CPU 和 GPU)上分配计算并将它们并行运行(参见图 12-1)。 首先,我们会先在一台机器上的多个设备上分配计算,然后在