在大数据上运行Tensorflow

在大数据上运行Tensorflow,tensorflow,google-cloud-platform,google-cloud-storage,bigdata,Tensorflow,Google Cloud Platform,Google Cloud Storage,Bigdata,我想在一个1亿行的大数据集上训练一个Tensorflow神经网络,每行大约有15000个特征。在一台机器上进行训练可能会太慢,所以我想进行分布式训练 到目前为止,我看到的所有分布式示例都是从将整个数据加载到内存,然后发送到从机开始的,在我的例子中,这太昂贵了 有人知道如何设置奴隶在他们的训练数据流吗?目前数据存储在Google cloud storage中,但我们可以灵活处理。尽管我从未尝试过这么多样本(只是出于兴趣,你在培训什么数据集?),但我认为你应该使用Queuerunner对象 可以在以

我想在一个1亿行的大数据集上训练一个Tensorflow神经网络,每行大约有15000个特征。在一台机器上进行训练可能会太慢,所以我想进行分布式训练

到目前为止,我看到的所有分布式示例都是从将整个数据加载到内存,然后发送到从机开始的,在我的例子中,这太昂贵了


有人知道如何设置奴隶在他们的训练数据流吗?目前数据存储在Google cloud storage中,但我们可以灵活处理。

尽管我从未尝试过这么多样本(只是出于兴趣,你在培训什么数据集?),但我认为你应该使用Queuerunner对象

可以在以下页面中找到它们:,在“使用QueueRunner对象创建要预回迁的线程”一节中

关于它们如何工作的引述:

简短版本:上面列出的许多tf.train函数添加了 将tf.train.QueueRunner对象添加到图形中。这些要求你 在进行任何训练或训练前,呼叫tf.train.start\u queue\u跑步者 推理步骤,否则它将永远挂起。这将启动 运行输入管道,填充示例队列,以便 获得成功的例子。这最好与 tf.train.Coordinator在出现以下情况时干净地关闭这些线程 错误

建议该页面中的代码模式组合如下:

# Create the graph, etc.
init_op = tf.global_variables_initializer()

# Create a session for running operations in the Graph.
sess = tf.Session()

# Initialize the variables (like the epoch counter).
sess.run(init_op)

# Start input enqueue threads.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)

try:
    while not coord.should_stop():
        # Run training steps or whatever
        sess.run(train_op)

except tf.errors.OutOfRangeError:
    print('Done training -- epoch limit reached')
finally:
    # When done, ask the threads to stop.
    coord.request_stop()

# Wait for threads to finish.
coord.join(threads)
sess.close()
虽然Stackoverflow总是喜欢完整的解释,而不是相关页面的链接,但在我上面链接的页面上有更多的信息


我很想知道这是否解决了你的问题,祝你好运

这可以通过两个步骤完成: 1) 根据任务id(或工作者id)正确索引输入数据 2) 将数据检索封装在tf.device范围内(类似于inception\u distributed\u train.py:113)

(假设您正在使用适当的馈线打开数据的迭代器)

示例:1个参数服务器,4个工人,1个输入数据表


在每个worker的tf.device范围内,打开数据句柄,确保每个worker读取唯一的行。因此,如果您有n个worker,请确保将表迭代器提前n+task_id。在示例设置中,您将有4个工作线程从相同的基本行编号(0)+任务id开始。这意味着工作线程0(任务id=0)将读取第0行;工作者1(任务id=1)将读取第1行。。。等等。只要您将行迭代器向前推进一个工人的数量,每个工人将独立拉动唯一的行

请查看
numpy memorymap
。这是专门用来处理这种情况的。Tensorflow有一个相当全面的框架,用于使用读取器线程和队列将数据馈送到模型中。你可以在这里查阅文档,上面说,我从来没有在分布式培训中使用过这个,所以我不完全确定这里出现了什么复杂性。你还在研究这个问题的解决方案吗,或者提供的解决方案中有没有一个有帮助?如果是这样,建议将适当的解决方案标记为已接受的答案,或将您的解决方案作为答案发布,以更好地帮助社区。你也可能会发现这就是你所寻找的。它允许您使用运行在谷歌云分布式虚拟机上的Tensorflow从云存储中训练模型。