MrR*_*Red 14 python parallel-processing multiprocessing reinforcement-learning tensorflow
我最近一直致力于一个使用神经网络进行虚拟机器人控制的项目.我使用tensorflow对其进行编码并且运行顺畅.到目前为止,我使用顺序模拟来评估神经网络有多好,但是,我想并行运行多个模拟以减少获取数据所需的时间.
要做到这一点,我正在导入python的multiprocessing
包.最初我将sess变量(sess=tf.Session()
)传递给一个运行模拟的函数.但是,一旦我找到使用此sess
变量的任何语句,该进程将退出而不会发出警告.摸索了一会儿后,我发现这两个职位:
Tensorflow:传递会话的蟒蛇多进程
,并同时运行多个tensorflow会议
虽然它们高度相关,但我还是无法弄清楚如何使其发挥作用.我尝试为每个单独的过程创建一个会话,并将神经网络的权重分配给它的可训练参数,但没有成功.我也尝试将会话保存到文件中,然后在一个进程中加载它,但也没有运气.
有人能够将会话(或会话克隆)传递给多个进程吗?
谢谢.
我使用keras作为包装器,并使用tensorflow作为支持器,但是应该使用相同的一般原理。
如果您尝试这样的事情:
import keras
from functools import partial
from multiprocessing import Pool
def ModelFunc(i,SomeData):
YourModel = Here
return(ModelScore)
pool = Pool(processes = 4)
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))):
print(Score)
Run Code Online (Sandbox Code Playgroud)
它会失败。但是,如果尝试这样的操作:
from functools import partial
from multiprocessing import Pool
def ModelFunc(i,SomeData):
import keras
YourModel = Here
return(ModelScore)
pool = Pool(processes = 4)
for i,Score in enumerate(pool.imap(partial(ModelFunc,SomeData),range(4))):
print(Score)
Run Code Online (Sandbox Code Playgroud)
它应该工作。尝试为每个进程分别调用tensorflow。
你不能使用Python多处理到TensorFlow传递Session
到multiprocessing.Pool
在straightfoward方式,因为Session
对象不能腌制(这是根本不可序列化,因为它可以管理GPU内存和状态那样)。
我建议使用actor对代码进行并行化,actor本质上是“对象”的并行计算类似物,并用于管理分布式设置中的状态。
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])
Run Code Online (Sandbox Code Playgroud)
这是将TensorFlow与Ray并行化的更多示例。
请参阅Ray文档。请注意,我是Ray开发人员之一。
归档时间: |
|
查看次数: |
14370 次 |
最近记录: |