【发布时间】:2017-05-05 03:45:46
【问题描述】:
有人可以解释以下 TensorFlow 术语吗
inter_op_parallelism_threadsintra_op_parallelism_threads
或者,请提供指向正确解释来源的链接。
我通过更改参数进行了一些测试,但结果并不一致得出结论。
【问题讨论】:
标签: python parallel-processing tensorflow distributed-computing
有人可以解释以下 TensorFlow 术语吗
inter_op_parallelism_threads
intra_op_parallelism_threads
或者,请提供指向正确解释来源的链接。
我通过更改参数进行了一些测试,但结果并不一致得出结论。
【问题讨论】:
标签: python parallel-processing tensorflow distributed-computing
inter_op_parallelism_threads 和 intra_op_parallelism_threads 选项记录在 source of the tf.ConfigProto protocol buffer 中。这些选项配置 TensorFlow 使用的两个线程池来并行执行,如 cmets 所述:
// 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 并行性:
如果您的 TensorFlow 图中有许多独立的操作(因为在数据流图中它们之间没有定向路径),TensorFlow 将尝试使用带有 inter_op_parallelism_threads 线程的线程池同时运行它们。如果这些操作具有多线程实现,它们将(在大多数情况下)共享同一个线程池以实现操作内并行。
最后,两个配置选项都采用默认值0,这意味着“系统选择了一个合适的数字”。目前,这意味着每个线程池将在您的机器中的每个 CPU 内核中拥有一个线程。
【讨论】:
intra 控制核心数(1 个节点内),inter 控制节点数,对吧?或者粗略地说,intra 像 OpenMP 一样工作,inter 像 OpenMPI 一样工作?如果我错了,请纠正我。
要从机器获得最佳性能,请更改并行度 tensorflow 后端的线程和 OpenMP 设置如下(来自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)
回答下面的评论: [source]
allow_soft_placement=True
如果您希望 TensorFlow 自动选择现有且受支持的设备来运行操作,以防指定的设备不存在,您可以在创建会话时在配置选项中将 allow_soft_placement 设置为 True。简而言之,它允许动态分配 GPU 内存。
【讨论】:
allow_soft_placement=True 是什么?
Tensorflow 2.0兼容答案:如果我们想在Tensorflow Version 2.0的Graph模式下执行,我们可以配置inter_op_parallelism_threads的函数strong> 和 intra_op_parallelism_threads 是
tf.compat.v1.ConfigProto.
【讨论】: