【问题标题】:Why does Tensorflow warn about AVX2 while I am using MKL?为什么在我使用 MKL 时 Tensorflow 会警告 AVX2?
【发布时间】:2019-05-27 13:06:02
【问题描述】:

我正在使用支持 MKL 的 Tensorflow 的 Anaconda 发行版。

from tensorflow.python.framework import test_util
test_util.IsMklEnabled()

此代码打印True。但是,当我编译我的 Keras 模型时,我仍然得到

您的 CPU 支持此 TensorFlow 二进制文件不支持的指令 编译使用:AVX AVX2

这不是我所期望的行为。

【问题讨论】:

  • 几乎肯定只是抱怨您没有使用最佳版本,如果您更改为支持 AVX2 的版本,您可以获得更好的性能。
  • 在启用 MKL + AVX2+FMA 的情况下自己构建 Tensorflow 是否有任何加速?如果有任何工作没有交给 MKL 函数,它将使用 128 位 SSE/SSE2 指令完成,而不是 256 位 AVX。
  • @PeterCordes 我会尽快回答这个细节。

标签: tensorflow keras anaconda intel-mkl avx2


【解决方案1】:

张量流执行的 MKL-DNN 部分(这是 MKL 工程师提供的主要加速)在运行时是 JIT 的。因此,针对二进制创建的指令集与 MKL-DNN 代码无关。它只会影响其他数学,主要是 Eigen 库和任何没有被 MKL-DNN 函数替换的函数。

【讨论】:

  • 你能指出我可以确定的文件或类似的东西吗?如果你说的是真的,那似乎是一个错误。因为 AFAIK,tensorflow 和 numpy 对所有向量运算都使用 MKL(如果可用);不需要 AVX2。
  • vpirogov 在这个旧的 github 答案中解释了 JITing 策略(他是 mkl-dnn 团队的首席 ENG)。 github.com/intel/mkl-dnn/issues/3 。否则,我不知道有任何官方文档提到这一点。
  • 另外,该警告在我自己的英特尔网站文档中的“AVX2 之上的 ISA 警告:”部分中得到解决:software.intel.com/en-us/articles/…
  • @NathanGreeneltch,有点离题,但相关的问题。如果主机系统相当老旧,并且 TensorFlow 在带有 MKL-DNN 的 docker 容器中运行,它会受益于 CPU 指令集,还是与提供相关标志的编译相比仍然会落后于性能?
【解决方案2】:

可以忽略此警告。出现这种情况的原因是在构建 TF 时设置了指令集标志。但是,MKL-DNN(负责在 tensorflow-mkl 中执行核心计算的数学库)在运行时将使用您的机器支持的最新向量指令集。如果您查看英特尔优化的 tensorflow install guide,您可以获得更多详细信息。 所以底线是,尽管出现了这些警告消息,但 MKL 在运行时正在使用 AVX2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    相关资源
    最近更新 更多