如何检查是否发生了使用 MKL 的 Tensorflow 图重写?

How to check that Tensorflow graph rewrites that use MKL occur?

从查看 Tensorflow code, some MKL optimizations are done by a graph rewrite replacing sets of nodes by fused functions that use MKL. I tried to look for the rewrites with tf.logging.set_verbosity(1) but never see of the log messages I expect.

我已经从 CPU 上的源代码构建了 Tensorflow,并启用了 MKL 和 XLA。我认为构建使用的是 MKL,因为如果 tf.nn.conv2dtf.nn.bias_add 一起出现,我可以在正向传递中使用 'NCHW' 数据格式。它还运行得更快并且充分利用了 CPU。向后传递虽然错误说 "CPU BiasGradOp only supports NHWC",但看起来 MKL 函数存在以将 Conv2D 和 BiasAdd 向前和向后与 'NCHW' 融合。所以我想直接看重写。

如何查看图表是否正在重写?

一种方法是使用 timeline/trace 功能。您可以关注此 答案。如果它使用 MKL,您会看到名称为 _MklReshape_MklConv2D

的节点

Tensorflow 有一个带有教程的调试器 (tfdbg) here。调试器打印出 运行 之前的 session.run() 将访问的所有图形节点的列表。

您还可以探索输入张量、输出张量和每个节点的属性。

如果您不想花时间使用 tfdbg 进行编译,Ariel 的回答也适用于查看操作类型。

这不是专门测试图形重写,但您可以检查是否在 tensorflow 中启用了 mkl,方法是:

tf.python.pywrap_tensorflow.IsMklEnabled()

发件人:https://github.com/tensorflow/tensorflow/issues/17176#issuecomment-371364155

对于 v2.0.0+,命令是:

python -c "from tensorflow.python import pywrap_tensorflow; print(pywrap_tensorflow.IsMklEnabled())"

来源:https://software.intel.com/en-us/forums/intel-optimized-ai-frameworks/topic/837000