张量流C++;评估性能不如Python
我用Tensorflow(使用Python)构建了一个LSTM分类器,现在我正在做一系列基准测试来衡量执行性能。基准代码加载在训练期间保存的模型,并针对大量输入执行该模型。我既有Python基准,也有C++。p> 使用C++时,使用Python(CPU)和张量流C++;评估性能不如Python,python,c++,tensorflow,Python,C++,Tensorflow,我用Tensorflow(使用Python)构建了一个LSTM分类器,现在我正在做一系列基准测试来衡量执行性能。基准代码加载在训练期间保存的模型,并针对大量输入执行该模型。我既有Python基准,也有C++。p> 使用C++时,使用Python(CPU)和6MS时,每次输入时,我得到 5ms < /COD>。我期待C++版本至少有类似的性能。 是什么导致了这种差异?我不太熟悉TysFooFor的内部结构,但我的猜测之一是Python版本使用BLAS(我的NUMPI与BLAS链接)和C++不。如果
是什么导致了这种差异?我不太熟悉TysFooFor的内部结构,但我的猜测之一是Python版本使用BLAS(我的NUMPI与BLAS链接)和C++不。如果是,这是否意味着某些图形操作是在Python中执行的?您可以尝试一个更简单的基准来缩小问题的范围。以下操作需要2-5秒的CPU时间
import tensorflow as tf
a=tf.Variable(tf.random_normal([8192, 8192], stddev=0.35))
b=tf.Variable(tf.random_normal([8192, 8192], stddev=0.35))
c=tf.matmul(a, b)
sess.run([tf.initialize_all_variables()])
import time
start_time = time.time()
sess.run(c)
print time.time()-start_time
我不确定现在发布答案是否为时已晚。我面临同样的问题,并从tensorflow github页面得到了答案:
解决方案很简单,只需使用
-c opt
标志是用优化标志编译的C++吗?C++和Python都应该使用相同的后端(基于EGEN)来进行实际计算,所以差异是奇怪的。如果执行一个不受带宽限制的大型操作,会有什么不同吗?(即,将两个4k x 4k矩阵相乘)你找到答案了吗?构建有问题,清理和重建以某种方式解决了问题。10.4 CPU和0.58 GPU。lscpu:体系结构:x86_64 CPU操作模式:32位,64位字节顺序:小端CPU:12个在线CPU列表:0-11个线程/内核:2个内核/插槽:6个插槽:1个NUMA节点:1供应商ID:GenuineIntel CPU系列:6型号:62步进:4 CPU MHz:1200.117 BogoMIPS:4190.02虚拟化:VT-x L1d缓存:32K L1i缓存:32K二级缓存:256K三级缓存:15360Kw关于计时使用C++?您可以使用打印tf.get_default_graph().as_graph_def()获取graphdef。init op被称为init:0
,矩阵乘法被称为MatMul:0
需要419秒。。。我想我的盒子或代码都有问题。这是我使用的代码:嗯,可能使用不同的线程?但这并不能解释CPU时间相差20倍的原因。可能值得就此向test.cc repo提交一个问题对于以后发现此问题的任何人来说,现在的标志似乎是--config=opt()