Значение inter_op_parallelism_threads и intra_op_parallelism_threads

Может кто-нибудь объяснить следующие термины TensorFlow

  • inter_op_parallelism_threads

  • intra_op_parallelism_threads

или, пожалуйста, укажите ссылки на правильный источник объяснения.

Я провел несколько тестов, изменив параметры, но результаты не были последовательными, чтобы прийти к выводу.

Ответ 1

Параметры inter_op_parallelism_threads и intra_op_parallelism_threads задокументированы в источнике буфера протокола tf.ConfigProto. Эти параметры настраивают два пула потоков, используемые TensorFlow для распараллеливания исполнения, как описывают комментарии:

// The execution of an individual op (for some op types) can be
// parallelized on a pool of intra_op_parallelism_threads.
// 0 means the system picks an appropriate number.
int32 intra_op_parallelism_threads = 2;

// Nodes that perform blocking operations are enqueued on a pool of
// inter_op_parallelism_threads available in each process.
//
// 0 means the system picks an appropriate number.
//
// Note that the first Session created in the process sets the
// number of threads for all future sessions unless use_per_session_threads is
// true or session_inter_op_thread_pool is configured.
int32 inter_op_parallelism_threads = 5;

Существует несколько возможных форм parallelism при запуске графика TensorFlow, и эти параметры предоставляют некоторый управляющий многоядерный CPU parallelism:

  • Если у вас есть операция, которая может быть распараллелирована внутри, например, умножение матрицы (tf.matmul()) или сокращение (например, tf.reduce_sum()), TensorFlow выполнит его, запланировав задачи в пуле потоков с помощью intra_op_parallelism_threads потоки. Таким образом, этот параметр конфигурации управляет максимальным параллельным ускорением для одной операции. Обратите внимание, что если вы выполняете несколько операций параллельно, эти операции будут совместно использовать этот пул потоков.

  • Если у вас есть много операций, которые независимы в вашем графике TensorFlow &mdash, потому что нет никакого направленного пути между ними в графике потока данных, TensorFlow будет пытаться запускать их одновременно, используя пул потоков с потоками inter_op_parallelism_threads. Если эти операции имеют многопоточную реализацию, они будут (в большинстве случаев) совместно использовать один пул потоков для int-op parallelism.

Наконец, обе опции конфигурации принимают значение по умолчанию 0, что означает, что система выбирает соответствующее число. " В настоящее время это означает, что каждый пул потоков будет иметь один поток на ядро ​​процессора на вашем компьютере.

Ответ 2

  Чтобы получить максимальную производительность от машины, измените параллелизм потоки и настройки OpenMP, как показано ниже для бэкэнда тензорного потока (из здесь):

import tensorflow as tf

#Assume that the number of cores per socket in the machine is denoted as NUM_PARALLEL_EXEC_UNITS
#  when NUM_PARALLEL_EXEC_UNITS=0 the system chooses appropriate settings 

config = tf.ConfigProto(intra_op_parallelism_threads=NUM_PARALLEL_EXEC_UNITS, 
                        inter_op_parallelism_threads=2, 
                        allow_soft_placement=True,
                        device_count = {'CPU': NUM_PARALLEL_EXEC_UNITS})

session = tf.Session(config=config)