我有一个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值当然会崩溃。
我想知道我做错了什么吗
这是两条并行线(看起来不正确)的损耗演化:
这里还有2条平行线的Q进化:
这里是没有上面提到的两行的进化:
有人知道我的代码有什么问题吗,还有什么要改进的地方,因为我知道并行LSTM计算非常困难,因为每个单元必须等待先前的时间步长(并行矩阵乘法等)。可能并且在这里很明显)?
另一个问题:在我的情况下,使用2个CPU的并行化是否有潜在的改善?