【发布时间】:2016-04-13 21:54:48
【问题描述】:
我最近一直在研究一个使用神经网络进行虚拟机器人控制的项目。我使用 tensorflow 对其进行编码,并且运行流畅。到目前为止,我使用顺序模拟来评估神经网络的性能,但是,我想并行运行多个模拟以减少获取数据所需的时间。
为此,我正在导入 python 的 multiprocessing 包。最初,我将 sess 变量 (sess=tf.Session()) 传递给将运行模拟的函数。但是,一旦我得到任何使用此sess 变量的语句,该过程就会退出而不会发出警告。经过一番搜索,我发现了这两个帖子:
Tensorflow: Passing a session to a python multiprocess
和Running multiple tensorflow sessions concurrently
虽然它们高度相关,但我无法弄清楚如何使其发挥作用。我尝试为每个单独的过程创建一个会话,并将神经网络的权重分配给它的可训练参数,但没有成功。我也尝试将会话保存到文件中,然后在进程中加载它,但也没有运气。
是否有人能够将会话(或会话的克隆)传递给多个进程?
谢谢。
【问题讨论】:
-
我怀疑你不能在进程之间传递会话的克隆,因为 C 地址空间中有 Python 不知道如何复制的状态。但是在每个新流程中创建全新的会话应该是可行的。我没有使用多处理,但我经常有几个并行打开的进程保持自己的 TensorFlow 会话
-
我提供的第二个链接并行运行多个进程,但问题是我需要神经网络对所有进程都相同。
-
你可以通过使用分布式 TensorFlow 来解决这个问题——即,有一个本地工作人员和 ps 并并行创建多个会话,如
tf.Session("grpc://localhost:2222")github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/… -
@YaroslavBulatov ,你有机会详细说明一下吗?我正在实现并行 TRPO (Viva RL),但现在使用最小示例 [gist.github.com/dd210/e8bad8eadc19f44cafcdc5313a39a53f]。基本上我想在主进程中启动会话,做一些计算,然后将网络转移到另一个 X 并行进程并在那里并行做一些计算。然后重复 Y 次。但是我被这个最小的例子卡住了,因为我似乎需要一直在一个会话中工作。官方教程是
模糊的。感谢任何帮助和建议。 -
多处理似乎被 TensorFlow 破坏了。下面是一个使用分布式张量流的例子——gist.github.com/yaroslavvb/ea1b1bae0a75c4aae593df7eca72d9ca
标签: python parallel-processing multiprocessing tensorflow reinforcement-learning