我想更多地了解这两个参数:操作内和操作间并行线程
session_conf = tf.ConfigProto(
intra_op_parallelism_threads=1,
inter_op_parallelism_threads=1)
我读过这篇文章,其中有很好的解释:TensorFlow:操作间和操作内并行性配置 https://stackoverflow.com/questions/41233635/tensorflow-inter-and-intra-op-parallelism-configuration
但我正在寻求确认,并在下面提出新问题。我正在 keras 2.0.9、tensorflow 1.3.0 中运行我的任务:
- 当两者都设置为 1 时,是否意味着在具有 4 个核心的计算机上,四个核心将仅共享 1 个线程?
- 为什么使用 1 个线程似乎对我的任务速度没有太大影响?我的网络具有以下结构:dropout、conv1d、maxpooling、lstm、globalmaxpooling、dropout、dense。上面引用的帖子说,如果有大量矩阵乘法和减法运算,使用多线程设置会有所帮助。我对下面的数学了解不多,但我想我的模型中有很多这样的矩阵运算?然而,将两个参数从 0 设置为 1 只会使 10 分钟的任务慢 1 分钟。
- 为什么多线程可能成为不可重现结果的来源?看使用 Python 中的 Keras 和 TensorFlow 无法重现结果 https://stackoverflow.com/questions/46836857/results-not-reproducible-with-keras-and-tensorflow-in-python。这是我在进行科学实验时需要使用单线程的主要原因。当然,随着时间的推移,张量流一直在改进,为什么这个版本没有解决这个问题?
提前谢谢了
当两个参数都设置为 1 时,将有 1 个线程在 4 个核心中的 1 个上运行。它运行的核心可能会改变,但每次总是 1。
当并行运行某些东西时,总是需要在通信损失时间和通过并行化获得时间之间进行权衡。根据所使用的硬件和特定任务(如矩阵的大小),加速会发生变化。有时并行运行某些东西甚至比使用一个核心还要慢。
例如,当在 cpu 上使用浮点数时,(a + b) + c
将不等于a + (b + c)
因为浮点精度。使用多个并行线程意味着像这样的操作a + b + c
并不总是以相同的顺序计算,导致每次运行都会得到不同的结果。然而,这些差异非常小,在大多数情况下不会影响整体结果。通常仅在调试时才需要完全可重现的结果。强制执行完全的可重复性会大大减慢多线程的速度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)