python - 具有内存数据的分布式 TensorFlow

标签 python tensorflow tensorflow-datasets

我需要随机生成内存中的合成数据(以 pandas DataFrame 的形式),以提供给分布在多个参数服务器和工作器上的 TensorFlow Estimator。我怎样才能做到这一点?哪个服务器应该负责生成数据,我如何将它们传递给其他服务器?按照这些思路行事吗?

def main(_):
    ps_hosts = FLAGS.ps_hosts.split(",")
    worker_hosts = FLAGS.worker_hosts.split(",")
    #Create a cluster from the parameter server and worker hosts.
    cluster = tf.train.ClusterSpec({"ps": ps_hosts, "worker": worker_hosts})
    #Create and start a server for the local task.
    server = tf.train.Server(cluster, job_name=FLAGS.job_name, task_index=FLAGS.task_index)

    if FLAGS.job_name == "ps":
        server.join()
    elif FLAGS.job_name == "worker":
        if FLAGS.task_index==0:
            train_data, train_labels = generate_synthetic_data()
            eval_data, eval_labels = generate_synthetic_data()
            test_data, test_labels  = generate_synthetic_data()

    with tf.device(tf.train.replica_device_setter( worker_device="/job:worker/task:%d" % FLAGS.task_index, cluster=cluster)):

        # Run training
        train_and_evaluate()

if __name__ == "__main__":
    tf.app.run(main=main, argv=[sys.argv[0]])

或者,类似地,这里 https://www.tensorflow.org/tutorials/estimators/linear#overview他们创建了两个 pandas 数据帧,然后将其提供给 Estimator。该代码将如何并行化?

最佳答案

TF Estimators 目前无法轻松支持单个共享输入管道。相反,每个工作人员都有自己独立的输入管道,以最大限度地提高吞吐量。

因此在每个 worker 中生成一个单独的合成数据框。

关于python - 具有内存数据的分布式 TensorFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51952666/

相关文章:

python - 使用 snakemake 处理多个目录和其中的所有文件

python - TensorFlow 训练 - "Batch size"和 tf.unpack - 解包非 "batch sized"动态值?

python-2.7 - 如何手动初始化权重值?

python - 用 tensorflow 中的条件减少总和

python - TensorFlow/Keras : Why do I get "ValueError: Incompatible conversion from float32 to uint8" when calling fit?

python - 建议在 tensorflow 2.0 中调试 `tf.data.Dataset` 操作

python - 我认为像 frozenset 和 tuple 这样的不可变类型实际上并没有被复制。这个叫什么?它有什么影响吗?

python - 最小二乘曲线拟合

python - 如何在 python 中找到 f(x,y) 沿 x 和 y : del^2 f(x, y)/[del(x)][del (y)] 的偏导数

python - 恢复使用迭代器的 Tensorflow 模型