inter_op_parallelism_threads和intra_op_parallelism_threads的含义

时间:2016-12-20 01:33:20

标签: python parallel-processing tensorflow distributed-computing

有人可以解释以下TensorFlow术语

  1. this.displayGender

  2. export default class User extends Component { displayGender(props) { console.log(props.user) } render() { return ( <Button onClick={ this.toggleGender.bind(this) } > { this.displayGender(this.props) } </Button> ); } }

  3. 或者,请提供正确解释来源的链接。

    我通过更改参数进行了一些测试,但结果并不一致,无法得出结论。

3 个答案:

答案 0 :(得分:52)

inter_op_parallelism_threadsintra_op_parallelism_threads选项记录在source of the tf.ConfigProto protocol buffer中。这些选项配置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;

运行TensorFlow图时有几种可能的并行形式,这些选项提供了一些控制多核CPU并行性:

  • 如果您有一个可以在内部并行化的操作,例如矩阵乘法(tf.matmul())或缩减(例如tf.reduce_sum()),TensorFlow将通过在线程中调度任务来执行它具有intra_op_parallelism_threads个线程的池。因此,此配置选项控制单个操作的最大并行加速。请注意,如果并行运行多个操作,这些操作将共享此线程池。

  • 如果您的TensorFlow图中有许多独立的操作 - 因为数据流图中它们之间没有定向路径 - TensorFlow将尝试使用inter_op_parallelism_threads的线程池同时运行它们线程。如果这些操作具有多线程实现,则它们(在大多数情况下)将共享相同的线程池以实现操作内并行性。

最后,两个配置选项都采用默认值0,这意味着“系统选择一个合适的数字”。目前,这意味着每个线程池在您的计算机中每个CPU核心都有一个线程。

答案 1 :(得分:3)

Tensorflow 2.0兼容答案:如果我们想在 Tensorflow Version 2.0 的图形模式下执行,则可以配置 {{1 }} inter_op_parallelism_threads

intra_op_parallelism_threads

答案 2 :(得分:2)

  

要从计算机获得最佳性能,请更改并行度    tensorflow后端(来自here)的以下线程和OpenMP设置:

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)