Quelqu'un peut-il s'il vous plaît expliquer les termes suivants de TensorFlow
inter_op_parallelism_threads
intra_op_parallelism_threads
ou, s'il vous plaît, fournissez des liens vers la bonne source d'explication.
J'ai effectué quelques tests en modifiant les paramètres, mais les résultats n'ont pas été cohérents pour parvenir à une conclusion.
Les options inter_op_parallelism_threads
Et intra_op_parallelism_threads
Sont décrites dans source de la mémoire tampon de protocole tf.ConfigProto
. Ces options configurent deux pools de threads utilisés par TensorFlow pour paralléliser l'exécution, comme le décrivent les commentaires:
// 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;
Il existe plusieurs formes de parallélisme possibles lors de l’exécution d’un graphe TensorFlow, et ces options permettent de contrôler le parallélisme des processeurs multicœurs:
Si vous avez une opération qui peut être mise en parallèle en interne, telle qu'une multiplication de matrice (tf.matmul()
) ou une réduction (par exemple, tf.reduce_sum()
), TensorFlow l'exécutera en planifiant les tâches dans un pool de threads avec intra_op_parallelism_threads
Discussions. Cette option de configuration contrôle donc l'accélération parallèle maximale pour une seule opération. Notez que si vous exécutez plusieurs opérations en parallèle, ces opérations partageront ce pool de threads.
Si vous avez plusieurs opérations indépendantes dans votre graphique TensorFlow, car il n'y a pas de chemin direct entre elles dans le graphique de flux de données, TensorFlow tentera de les exécuter simultanément, en utilisant un pool de threads avec des threads inter_op_parallelism_threads
. Si ces opérations ont une implémentation multithread, elles partageront (dans la plupart des cas) le même pool de threads pour le parallélisme intra-op.
Enfin, les deux options de configuration prennent une valeur par défaut de 0
, Ce qui signifie "le système sélectionne un nombre approprié". Actuellement, cela signifie que chaque pool de threads aura un thread par cœur de processeur dans votre ordinateur.
Pour obtenir les meilleures performances d’une machine, modifiez les threads de parallélisme et les paramètres OpenMP comme indiqué ci-dessous pour le backend tensorflow (from here ):
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)