Ubuntu中的Tensorflow MKL-DNN构建默默地产生错误结果

Ubuntu中的Tensorflow MKL-DNN构建默默地产生错误结果,tensorflow,deep-learning,keras,intel-mkl,Tensorflow,Deep Learning,Keras,Intel Mkl,我已经从Ubuntu 16.04的源代码构建了Tensorflow 1.6.0-rc0,并提供了以下MKL-DNN支持。构建过程没有任何问题。在一个简单的convnet上使用keras2.1.3从原样测试它比使用非MKL构建慢两倍 现在,按照中的建议调整MKL参数将导致比非MKL构建快近2倍的速度。但就准确性和损失而言,这完全是胡说八道: 控制台中没有错误或警告。MKL参数调整如下: from keras import backend as K K.set_session(K.tf.Sessio

我已经从Ubuntu 16.04的源代码构建了Tensorflow 1.6.0-rc0,并提供了以下MKL-DNN支持。构建过程没有任何问题。在一个简单的convnet上使用keras2.1.3从原样测试它比使用非MKL构建慢两倍

现在,按照中的建议调整MKL参数将导致比非MKL构建快近2倍的速度。但就准确性和损失而言,这完全是胡说八道:

控制台中没有错误或警告。MKL参数调整如下:

from keras import backend as K
K.set_session(K.tf.Session(config=K.tf.ConfigProto(inter_op_parallelism_threads=1)))
os.environ["KMP_BLOCKTIME"] = "0"
os.environ["KMP_AFFINITY"] = "granularity=fine,verbose,compact,1,0"
CPU是一个i7-4790K

作为参考,从未调整MKL参数的运行中获得的结果与预期一致:


有没有人遇到过类似的问题?在GitHub上发布问题之前,只需对照社区进行检查。

如果参数inter_op_parallelism_threads为2,您将无法获得如此精确的结果

下面给出的是MKL调优参数的修改版本,可能会加快代码的速度:

from keras import backend as K
import tensorflow as tf
config = tf.ConfigProto(intra_op_parallelism_threads=<Number.of Cores>, inter_op_parallelism_threads=2, allow_soft_placement=True,  device_count = {'CPU': <Number.of Cores>})
session = tf.Session(config=config)
K.set_session(session)
os.environ["OMP_NUM_THREADS"] = "<Number.of Cores>"
os.environ["KMP_BLOCKTIME"] = "30"
os.environ["KMP_SETTINGS"] = "1"
os.environ["KMP_AFFINITY"]= "granularity=fine,verbose,compact,1,0"

由于某些优化参数对不同的代码有不同的作用,您也可以使用上面的参数来查看更好的速度

谢谢@anju paul的解决方案,我可以用它解决问题。同时,在最近的Tensorflow提交中,问题似乎已经解决:Tensorflow指南中建议的MKL调整参数产生了合理的数值结果和加速比,请参阅
from keras import backend as K
import tensorflow as tf
config = tf.ConfigProto(intra_op_parallelism_threads=8, inter_op_parallelism_threads=2, allow_soft_placement=True,  device_count = {'CPU': 8})
session = tf.Session(config=config)
K.set_session(session)
os.environ["OMP_NUM_THREADS"] = "8"
os.environ["KMP_BLOCKTIME"] = "30"
os.environ["KMP_SETTINGS"] = "1"
os.environ["KMP_AFFINITY"]= "granularity=fine,verbose,compact,1,0"