Автоматически ли TensorFlow распараллеливает независимые операции?

#tensorflow

#tensorflow

Вопрос:

Допустим, у меня есть следующая строка кода в TensorFlow (интерфейс Python):

 z = tf.matmul(W_1,x_1)   tf.matmul(W_2,x_2)   ...   tf.matmul(W_N, x_N)   b
  

Все вышеупомянутые N операций являются независимыми, и результат накапливается в z. Будет ли TensorFlow, например, запускать N ядер независимо, а затем накапливать результат, или он будет обрабатывать N операций последовательно?

Я спрашиваю, потому что это влияет на то, сколько усилий мне нужно потратить на векторизацию операций, за счет снижения удобства чтения и удобства. Я надеюсь, что TF запускает все N ядер GPU асинхронно, накапливает выходные данные в z и возвращает результат.

Кроме того, предполагая, что TF обрабатывает приведенное выше утверждение параллельно, существуют ли какие-либо ограничения на это? Например, если бы я накапливал z в цикле for (или в нескольких строках с промежуточными переменными), потерял бы я это преимущество?

Ответ №1:

Да, он параллельно выполняет несколько путей вычисления одного session.run вызова, управляемых num_inter_device_parallelism_threads параметром. Вы можете использовать tf.add_n для своей суммы. Если у вас их несколько session.run , вам нужно распараллелить вещи самостоятельно, скажем, запустив их в отдельных потоках Python.