我从源文件编译了tensorflow 1.3,并且对产品的性能感到不愉快。考虑到在CPU上进行计算时,社区的评论已经设法将numpy优于tensorflow的优势从45%降低到35%。但是,差异仍然巨大。基准代码如下:
#! /usr/bin/env python3
import sys
import time
import numpy as np
import tensorflow as tf
print('Python', sys.version)
print('TensorFlow', tf.__version__)
gDType = np.float64
size = 8192
# Numpy calculation
rand_array = np.random.uniform(0, 1, (size, size))
timer0 = time.time()
res = np.dot(np.dot(rand_array, rand_array), rand_array)
print("numpy multiply: %f" % (time.time() - timer0))
# TensorFlow calculation
x = tf.Variable( tf.random_uniform(shape=(size, size), minval=0, maxval=1, dtype=gDType), dtype=gDType, name='x')
x3 = tf.matmul(tf.matmul(x, x), x)
# Avoid optimizing away redundant nodes
config = tf.ConfigProto(graph_options=tf.GraphOptions(optimizer_options=tf.OptimizerOptions(opt_level=tf.OptimizerOptions.L0)))
sess = tf.Session(config=config)
# sess = tf.Session()
sess.run(tf.global_variables_initializer())
# Exclude delays caused by initialization of the graph
timer0 = time.time()
sess.run(x3.op)
print("tensorflow multiply 1 pass: %f" % (time.time() - timer0))
timer0 = time.time()
sess.run(x3.op)
print("tensorflow multiply 2 pass: %f" % (time.time() - timer0))
以下是脚本的输出:
$ ./matmul_benchmark.py
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609]
TensorFlow 1.3.0
numpy multiply: 37.464786
tensorflow multiply 1 pass: 61.245776
tensorflow multiply 2 pass: 49.944690
此过程中的脚本消耗4 GB的RAM,您可能希望将 size 变量减少到4096.
比较显示numpy的优越性为35%(50秒/ 37秒)。
请告诉我,这次测试有什么错误吗?
PS。我的CPU Sandy-bridge标志:
$ lscpu | grep Flags
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr
pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx
rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable
nonstop_tsc aperfmperf pni pclmulqdq ssse3 cx16 **sse4_1 sse4_2** popcnt aes
xsave **avx** hypervisor lahf_lm epb xsaveopt dtherm ida arat pln pts
答案 0 :(得分:0)
您使用的是优化numpy(np.__config__.get_info()
)吗?您的TensorFlow是否已使用所有优化进行编译? (build -c opt --config=opt
)
Numpy和tensorflow分别管理内存,session.run的默认行为是将结果复制到numpy运行时。您可以将所有数据保留在TF运行时以降低开销。
这是一个避免常见陷阱的版本(减少不必要地将结果复制回numpy的开销) - Testing GPU with tensorflow matrix multiplication
对于最佳情况,我在GPU上获得11 T操作/秒,在Xeon V3上获得1.1 T操作/秒(与0.5%操作/秒和conda numpy相比)
答案 1 :(得分:0)
英特尔通过使用深度神经网络的数学核心库,为Xeon和Xeon Phi添加了TensorFlow优化。在编译tensorflow 1.3+时,您应该考虑在编译期间添加--config=mkl
选项。它只支持Linux操作系统。不确定它会为您进行基准测试提供多少加速。
一些numpy发行版已包含MKL支持。例如,Anaconda版本2.5及更高版本,默认情况下可以使用MKL。