gpt4 book ai didi

python - Tensorflow 和多处理 : Passing Sessions

转载 作者:太空狗 更新时间:2023-10-29 17:33:23 26 4
gpt4 key购买 nike

我最近一直在从事一个使用神经网络进行虚拟机器人控制的项目。我使用 tensorflow 对其进行编码,并且运行顺利。到目前为止,我使用顺序模拟来评估神经网络的好坏,但是,我想并行运行多个模拟以减少获取数据所需的时间。

为此,我导入了 python 的 multiprocessing 包。最初我将 sess 变量 (sess=tf.Session()) 传递给将运行模拟的函数。但是,一旦我到达任何使用此 sess 变量的语句,该过程就会在没有警告的情况下退出。搜索了一下后,我发现了这两个帖子: Tensorflow: Passing a session to a python multiprocessRunning multiple tensorflow sessions concurrently

虽然它们高度相关,但我一直无法弄清楚如何让它发挥作用。我尝试为每个单独的进程创建一个 session ,并将神经网络的权重分配给它的可训练参数,但没有成功。我也试过将 session 保存到一个文件中,然后在一个进程中加载​​它,但也没有成功。

是否有人能够将 session (或 session 的克隆)传递给多个进程?

谢谢。

最佳答案

您不能使用 Python 多处理以直接的方式将 TensorFlow Session 传递到 multiprocessing.Pool 中,因为 Session 对象可以不会被腌制(它基本上不可序列化,因为它可能会管理 GPU 内存和状态)。

我建议使用 actors 并行化代码,它们本质上是“对象”的并行计算模拟,用于管理分布式设置中的状态。

Ray是一个很好的框架来做到这一点。您可以定义一个 Python 类来管理 TensorFlow Session 并公开运行模拟的方法。

import ray
import tensorflow as tf

ray.init()

@ray.remote
class Simulator(object):
def __init__(self):
self.sess = tf.Session()
self.simple_model = tf.constant([1.0])

def simulate(self):
return self.sess.run(self.simple_model)

# Create two actors.
simulators = [Simulator.remote() for _ in range(2)]

# Run two simulations in parallel.
results = ray.get([s.simulate.remote() for s in simulators])

这里还有几个 parallelizing TensorFlow with Ray 的例子.

参见 Ray documentation .请注意,我是 Ray 开发人员之一。

关于python - Tensorflow 和多处理 : Passing Sessions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36610290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com