Betekenis van inter_op_parallelism_threads en intra_op_parallelism_threads

Kan iemand de volgende TensorFlow-termen uitleggen

  1. inter_op_parallelism_threads

  2. intra_op_parallelism_threads

of geef links naar de juiste bron van uitleg.

Ik heb een paar tests uitgevoerd door de parameters te wijzigen, maar de resultaten waren niet consistent om tot een conclusie te komen.


Antwoord 1, autoriteit 100%

De inter_op_parallelism_threadsen intra_op_parallelism_threadsopties zijn gedocumenteerd in de bron van de tf.ConfigProtoprotocolbuffer. Deze opties configureren twee threadpools die door TensorFlow worden gebruikt om de uitvoering te parallelliseren, zoals de opmerkingen beschrijven:

// 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;

Er zijn verschillende mogelijke vormen van parallellisme bij het uitvoeren van een TensorFlow-grafiek, en deze opties bieden enige controle over multi-core CPU-parallellisme:

  • Als u een bewerking heeft die intern parallel kan worden uitgevoerd, zoals matrixvermenigvuldiging (tf.matmul()) of een reductie (bijv. tf.reduce_sum()), zal TensorFlow het uitvoeren door taken in een threadpool te plannen met intra_op_parallelism_threadsthreads. Deze configuratieoptie regelt daarom de maximale parallelle versnelling voor een enkele bewerking. Houd er rekening mee dat als u meerdere bewerkingen parallel uitvoert, deze bewerkingen deze threadpool zullen delen.

  • Als je veel onafhankelijke bewerkingen hebt in je TensorFlow-grafiek, omdat er geen gericht pad tussen is in de gegevensstroomgrafiek, zal TensorFlow proberen deze gelijktijdig uit te voeren met behulp van een threadpool met inter_op_parallelism_threads-threads. Als die bewerkingen een implementatie met meerdere threads hebben, zullen ze (in de meeste gevallen) dezelfde threadpool delen voor intra-op-parallellisme.

Ten slotte nemen beide configuratie-opties de standaardwaarde 0aan, wat betekent dat “het systeem een ​​geschikt nummer kiest”. Momenteel betekent dit dat elke threadpool één thread per CPU-kern in uw machine heeft.


Antwoord 2, autoriteit 20%

Om de beste prestaties uit een machine te halen, wijzigt u de parallelliteit
threads en OpenMP-instellingen zoals hieronder voor de tensorflow-backend(van hier):

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)

Antwoord op de reactie hieronder:[bron]

allow_soft_placement=True

Als u wilt dat TensorFlow automatisch een bestaand en ondersteund apparaat kiest om de bewerkingen uit te voeren in het geval dat het opgegeven apparaat niet bestaat, kunt u allow_soft_placementinstellen op True in de configuratie-optie bij het maken van de sessie. In eenvoudige bewoordingen maakt het dynamische toewijzing van GPU-geheugen mogelijk.


Antwoord 3, autoriteit 2%

Tensorflow 2.0-compatibel antwoord: als we willen uitvoeren in de grafiekmodus van Tensorflow Version 2.0, de functie waarin we inter_op_parallelism_threadsen intra_op_parallelism_threadsis

tf.compat.v1.ConfigProto.

Other episodes