首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在分布式Tensorflow中并行化python输入流水线

如何在分布式Tensorflow中并行化python输入流水线
EN

Stack Overflow用户
提问于 2018-04-25 20:18:20
回答 1查看 872关注 0票数 5

我有一个很重要的输入管道,它包括读取基本事实和原始数据,并对它们执行预处理,用Python编写。为一个样本运行输入管道需要很长时间,所以我让多个进程(来自python多处理包)并行运行和排队,以便快速执行操作并预取数据。然后使用feed_dict将输出提供给我的网络。在我的训练循环中,这个过程的开销比实际的tf.Session.run()时间少2个数量级。我试图转移到tf.data应用程序接口,通过包装tf.py_func我的read+preprocess函数,但它运行很慢,可能是由于GIL,即使增加了多个调用的数量。我希望将我的训练扩展到多台机器上,但不确定在这种情况下数据获取的行为如何,而且还存在单个机器的性能问题:)

所以,基本上我的问题是:如何在多个tf.data内核上并行运行python函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-21 04:19:42

需要澄清的是,tf.py_func可以与sess.run()并行运行(因为sess.run()发布了GIL),但是您不能在同一个tf.py_func进程中运行多个python。

在这种情况下,通常的答案是在脱机时进行预处理,将结果保存在磁盘上(例如,使用TFRecord格式),在训练期间从文件中读取准备好的数据。您可能可以使用类似于多处理的东西来并行化离线预处理。

如果您可以使用tf操作来表示预处理,那么就可以使用Dataset.map并行运行它,但是tf.data中没有内置的对python多处理的支持。如果由于某种原因上面的方法不起作用,你可能不得不自己去挂接多进程。

下面是解决这个问题的一种方法。让多个进程产生您的输入,将它们放入multiprocessing.Queue (或共享内存,并对其进行一些锁定)。使用生成器函数实现接收端,并使用from_generator创建数据集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50022168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档