Использование intra_op_parallelism_threads и inter_op_parallelism_threads приводит к совершенно разным результатам в tenorflow-gpu - PullRequest
0 голосов
/ 04 июня 2019

У меня есть алгоритм RL, в котором я использую LSTM и свертки. Он основан на двойном обучении.

Чтобы ускорить мой код, который очень медленный, я стараюсь распараллелить как можно больше инструкций, добавив следующие конфигурации в мою сессию:

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 графических процессора, один Nvidia GeForce RTX 2080 Ti (устройство 0), а другой - Nvidia Quadro k620 (устройство 1).

Проблема в том, что добавление двух строк о intra и inter op_parallelism_threads, похоже, полностью меняет мои результаты; LSTM останавливается на первых шагах, поэтому награды и значение Q, конечно, рушатся.

Мне интересно, я делаю что-то не так.

Вот эволюция потерь с двумя линиями параллелизма (которые кажутся неверными):

Loss evolution with parallelism

Вот также эволюция Q с двумя линиями параллелизма:

Q evolution with parallelism

Вот эволюция без двух строк, упомянутых выше:

Loss evolution without parallelism

Q without parallelism

Кто-нибудь знает, что не так с моим кодом и есть ли какие-то улучшения, поскольку я знаю, что очень трудно распараллелить вычисление LSTM, поскольку каждая ячейка должна ждать предыдущих временных шагов (распараллеливание умножения матриц и т. Д. здесь возможно и очевидно)?

Еще один вопрос: есть ли потенциальные улучшения в плане распараллеливания при использовании двух моих процессоров в моем случае?

...