Significado de inter_op_parallelism_threads y intra_op_parallelism_threads

Alguien puede explicar los siguientes términos de TensorFlow

  1. inter_op_parallelism_threads

  2. intra_op_parallelism_threads

o, por favor, proporcione enlaces a la fuente correcta de explicación.

He realizado algunas pruebas cambiando los parámetros, pero los resultados no han sido consistentes para llegar a una conclusión.

Related of "Significado de inter_op_parallelism_threads y intra_op_parallelism_threads"

Las opciones inter_op_parallelism_threads e intra_op_parallelism_threads están documentadas en la fuente del tf.ConfigProto protocolo tf.ConfigProto . Estas opciones configuran dos grupos de subprocesos utilizados por TensorFlow para paralelizar la ejecución, como describen los comentarios:

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

Hay varias formas posibles de paralelismo cuando se ejecuta un gráfico TensorFlow, y estas opciones proporcionan un cierto paralelismo de CPU de varios núcleos de control:

  • Si tiene una operación que puede ser paralelizada internamente, como la multiplicación de matrices ( tf.matmul() ) o una reducción (por ejemplo, tf.reduce_sum() ), TensorFlow lo ejecutará progtwigndo tareas en un grupo de subprocesos con hilos intra_op_parallelism_threads . Esta opción de configuración, por lo tanto, controla la aceleración máxima paralela para una sola operación. Tenga en cuenta que si ejecuta varias operaciones en paralelo, estas operaciones compartirán este grupo de subprocesos.

  • Si tiene muchas operaciones que son independientes en su gráfico TensorFlow, porque no hay una ruta dirigida entre ellas en el gráfico de flujo de datos, TensorFlow intentará ejecutarlas simultáneamente, utilizando un grupo de hilos con hilos inter_op_parallelism_threads . Si esas operaciones tienen una implementación multiproceso, compartirán (en la mayoría de los casos) el mismo grupo de hilos para el paralelismo intraoperatorio.

Finalmente, ambas opciones de configuración toman un valor predeterminado de 0 , lo que significa que “el sistema elige un número apropiado”. Actualmente, esto significa que cada grupo de subprocesos tendrá un subproceso por núcleo de CPU en su máquina.

Para obtener el mejor rendimiento de una máquina, cambie los hilos de paralelismo y la configuración de OpenMP como se muestra a continuación para el backend tensorflow (desde aquí ):

 import tensorflow as tf config = tf.ConfigProto(intra_op_parallelism_threads=0, inter_op_parallelism_threads=0, allow_soft_placement=True) session = tf.Session(config=config)