了解 tensorflow 内部/内部并行线程

Ziq*_*iqi 4 tensorflow

我想更多地了解这两个参数:intra 和 inter op parallelism threads

session_conf = tf.ConfigProto(
  intra_op_parallelism_threads=1,
  inter_op_parallelism_threads=1)
Run Code Online (Sandbox Code Playgroud)

我读了这篇文章,其中有一个很好的解释:TensorFlow: inter- and intra-op parallelism configuration

但我正在寻求确认并在下面提出新问题。我在 keras 2.0.9、tensorflow 1.3.0 中运行我的任务:

  1. 当两者都设置为 1 时,是否意味着,例如在具有 4 个内核的计算机上,四个内核将只共享 1 个线程?
  2. 为什么在速度方面使用 1 个线程似乎对我的任务影响不大?我的网络具有以下结构:dropout、conv1d、maxpooling、lstm、globalmaxpooling、dropout、dense。上面引用的帖子说,如果有很多矩阵乘法和减法运算,使用多线程设置会有所帮助。我对下面的数学知之甚少,但我想我的模型中有很多这样的矩阵运算?但是,将两个参数从 0 设置为 1 只会在 10 分钟的任务中看到 1 分钟的减速。
  3. 为什么多线程可能是不可重现结果的来源?请参阅结果无法在 Python 中使用 Keras 和 TensorFlow 重现。这是我在做科学实验时需要使用单线程的主要原因。当然,随着时间的推移,tensorflow 一直在改进,为什么在发布中没有解决这个问题?

提前谢谢了

Blu*_*Sun 5

  1. 当两个参数都设置为 1 时,将有 1 个线程在 4 个内核中的 1 个上运行。它运行的核心可能会改变,但一次总是 1。

  2. 当并行运行某些东西时,总会在通信上的损失时间和通过并行化获得的时间之间进行权衡。根据使用的硬件和特定任务(如矩阵的大小),加速会发生变化。有时并行运行某些东西甚至比使用一个内核还要慢。

  3. 例如,在 cpu 上使用浮点数时(a + b) + c,a + (b + c)由于浮点精度,将不等于。使用多个并行线程意味着操作a + b + c不会总是以相同的顺序计算,导致每次运行的结果不同。然而,这些差异非常小,在大多数情况下不会影响整体结果。完全可重现的结果通常只用于调试。强制执行完全可重复性会大大减慢多线程的速度。


归档时间:

查看次数:

4233 次

最近记录:

6 年,1 月 前