为32核计算机优化Tensorflow

为32核计算机优化Tensorflow,tensorflow,parallel-processing,cpu-usage,Tensorflow,Parallel Processing,Cpu Usage,我在一台Intel Xeon机器上运行tensorflow代码,该机器有两个物理CPU,每个CPU有8个内核和超线程,总共有32个可用的虚拟内核。但是,我运行代码时保持系统监视器打开,我注意到这32个vCore中只有一小部分被使用,平均CPU使用率低于10% 我是tensorflow的初学者,我还没有以任何方式配置会话。我的问题是:我是否应该告诉tensorflow它可以使用多少内核?或者我应该假设它已经在尝试使用所有这些功能,但在其他地方存在瓶颈吗?(例如,对硬盘的访问速度较慢)默认情况下,T

我在一台Intel Xeon机器上运行tensorflow代码,该机器有两个物理CPU,每个CPU有8个内核和超线程,总共有32个可用的虚拟内核。但是,我运行代码时保持系统监视器打开,我注意到这32个vCore中只有一小部分被使用,平均CPU使用率低于10%


我是tensorflow的初学者,我还没有以任何方式配置会话。我的问题是:我是否应该告诉tensorflow它可以使用多少内核?或者我应该假设它已经在尝试使用所有这些功能,但在其他地方存在瓶颈吗?(例如,对硬盘的访问速度较慢)

默认情况下,TensorFlow将尝试使用所有可用的CPU资源。你不需要为它配置任何东西。CPU使用率低的原因可能有很多。以下是一些可能性:

  • 正如您所指出的,最常见的情况是缓慢的输入管道
  • 您的图形可能大部分是线性的,即对相对较少的数据量进行的狭长的操作链,每个操作都取决于前一个操作的输出。当单个操作在较小的输入上运行时,将其并行化几乎没有什么好处
  • 您还可能受到内存带宽的限制
  • 单个
    session.run()
    调用只需很少的时间。因此,您最终会在python和执行引擎之间来回切换
你可以找到有用的建议


使用查看执行时执行的操作

谢谢,有很多信息需要消化。我喜欢你指着探查器,我还是在tensorflow中找不到它。但是,你能把图表的线性度扩展一下吗?典型的深度学习模型基本上是线性的,不是吗?我的意思是,你有一定数量的层,层
n
的输出将成为层
n+1
的输入。这是否意味着在这种情况下,更多的CPU通常没有帮助?我以为每个CPU都会处理不同的批处理或类似的事情……我想我的评论描绘的画面太暗淡了。大多数常见操作(如matmul、conv、元素操作)都有良好的并行性支持。如果尺寸足够大,它们将扩展到多个核心。如果维度不是很大,或者内存有限(例如转置),TF就做不了什么。这一点的经典案例是一些RNN变体,其隐藏状态大小很小,需要仔细研究的序列很长。