97 votes

Signification de inter_op_parallelismem_threads et intra_op_parallelismem_threads

Quelqu'un peut-il expliquer les termes TensorFlow suivants ?

  1. inter_op_parallelism_threads

  2. 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 ne sont pas cohérents pour arriver à une conclusion.

98voto

mrry Points 1

Le site inter_op_parallelism_threads y intra_op_parallelism_threads sont documentées dans le document source de la tf.ConfigProto tampon de protocole . 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 possibles de parallélisme lors de l'exécution d'un graphe TensorFlow, et ces options permettent de contrôler le parallélisme des CPU multi-cœurs :

  • Si vous avez une opération qui peut être parallélisée en interne, comme la multiplication de matrices ( tf.matmul() ) ou une réduction (par exemple tf.reduce_sum() ), TensorFlow l'exécutera en planifiant des tâches dans un pool de threads avec le code suivant intra_op_parallelism_threads fils. Cette option de configuration contrôle donc la vitesse 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 de nombreuses opérations qui sont indépendantes dans votre graphe TensorFlow (parce qu'il n'y a pas de chemin dirigé entre elles dans le graphe de flux de données), TensorFlow tentera de les exécuter simultanément, en utilisant un pool de threads avec la fonction inter_op_parallelism_threads 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 que "le système sélectionne un numéro approprié". Actuellement, cela signifie que chaque pool de threads aura un thread par cœur de CPU dans votre machine.

0 votes

Peut-on l'utiliser pour paralléliser mon code sur plusieurs processeurs ? Comment puis-je utiliser ces fonctions pour obtenir une tolérance aux pannes en cas de défaillance d'une des machines du cluster ?

5 votes

Ces options contrôlent la quantité maximale de parallélisme que vous pouvez obtenir en exécutant votre graphe TensorFlow. Cependant, elles reposent sur le fait que les opérations que vous exécutez ont des implémentations parallèles (comme beaucoup de noyaux standard) pour le parallélisme intra-op ; et la disponibilité d'opérations indépendantes à exécuter dans le graphe pour le parallélisme inter-op. Cependant, si (par exemple) votre graphe est une chaîne linéaire d'opérations, et que ces opérations n'ont que des implémentations série, alors ces options n'ajouteront pas de parallélisme. Ces options ne sont pas liées à la tolérance aux pannes (ou à l'exécution distribuée).

3 votes

Il semble que les deux options ne fonctionnent que pour les CPU mais pas pour les GPU ? Si j'avais l'opérateur tf.add_n de multiples opérations parallèles basées sur la multiplication matricielle et que je l'exécutais dans les GPU, comment la parallélisation est-elle faite par défaut et puis-je la contrôler ?

20voto

mrk Points 2126

Pour obtenir les meilleures performances d'une machine, modifiez le parallélisme des threads et d'OpenMP comme indiqué ci-dessous pour l'option backend tensorflow (de aquí ):

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)

Réponse au commentaire ci-dessous : [source]

allow_soft_placement=True

Si vous souhaitez que TensorFlow choisisse automatiquement un périphérique existant et pris en charge pour exécuter les opérations au cas où le périphérique spécifié n'existerait pas, vous pouvez définir les paramètres suivants allow_soft_placement à Vrai dans l'option de configuration lors de la création de la session. En d'autres termes, cela permet l'allocation dynamique de la mémoire du GPU.

5 votes

Qu'est-ce que allow_soft_placement=True ?

0 votes

Réponse à la question dans le message.

3voto

Tensorflow Support Points 1706

Réponse compatible avec Tensorflow 2.0 : Si nous voulons exécuter en mode Graphique de Tensorflow Version 2.0 la fonction dans laquelle nous pouvons configurer inter_op_parallelism_threads y intra_op_parallelism_threads es

tf.compat.v1.ConfigProto .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X