使用intra_op_parallelism_threads和inter_op_parallelism_threads会在tensorflow-gpu中产生完全不同的结果

时间:2019-06-04 02:53:55

标签: python tensorflow parallel-processing reinforcement-learning q-learning

我有一个RL算法,其中使用LSTM和卷积。它基于双重Q学习。

为了加速我的代码,这很慢,我尝试通过在会话中添加以下配置来尽可能多地并行化指令:

config = tf.ConfigProto()
config.intra_op_parallelism_threads = 0 #16 #44 #problematic!
config.inter_op_parallelism_threads = 0 #16 #44 #problematic!
config.gpu_options.allow_growth = True
config.allow_soft_placement = True


with tf.Session(config=config) as sess, tf.device('/gpu:0'):
    .... RL Code ....

我有2个GPU,一个是Nvidia GeForce RTX 2080 Ti(设备0),另一个是Nvidia Quadro k620(设备1)。

问题在于,添加关于内部和内部op_parallelism_threads的两行似乎完全改变了我的结果; LSTM在第一步就停止了,因此奖励和Q值当然会崩溃。

我想知道我做错了什么吗

这是两条并行线(看起来不正确)的损耗演化:

Loss evolution with parallelism

这里还有2条平行线的Q进化:

Q evolution with parallelism

这里是没有上面提到的两行的进化:

Loss evolution without parallelism

Q without parallelism

有人知道我的代码有什么问题吗,还有什么要改进的地方,因为我知道并行LSTM计算非常困难,因为每个单元必须等待先前的时间步长(并行矩阵乘法等)。可能并且在这里很明显)?

另一个问题:在我的情况下,使用2个CPU的并行化是否有潜在的改善?

0 个答案:

没有答案