我在Ubuntu 16.04中从源代码构建了Tensorflow 1.6.0-rc0,并在this guide之后支持MKL-DNN。构建过程没有任何问题。使用keras 2.1.3在this example“as is”的简单卷轴上测试它比使用非MKL构建慢两倍。
现在,按照the guide的建议调整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"
例如:
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"
由于某些优化参数对于不同的代码有不同的工作方式,因此您还可以使用上述参数来查看更快的速度