为什么TensorFlow在Python中的运行速度明显快于在GPU上的Java运行速度?

时间:2017-06-26 19:26:42

标签: java python performance tensorflow gpu

我已经训练过TensorFlow模型,我已经在Python和Scala(使用Java API)上对GPU进行了测试。从Java运行一直表现更差,以大约一半的速度计时,我不知道为什么。

该模型是一个标准的文本分类器:我使用的是卷积,在嵌入层上有偏差,然后汇集;并排是一个完全连接的层,具有偏置和压降,具有额外的功能;这两个小工具都会进入两个完全连接的层,带有偏差和辍学。

我正在对微博文本进行分类,因此输入很小。减速取决于批量大小:一次处理一个输入,两种语言执行几乎相同;随着批量大小的增加,间隙变宽,最大值为128,批量大小为128,其中Python的性能不到2倍Scala。

Python代码的内部循环调用:

session.run([output], feed_dict)

Scala代码同样调用:

session.runner()
    .feed(input1, input1Tensor)
    .feed(input2, input2Tensor)
    .fetch(output)
    .run()

我确信这两个版本都在使用GPU(并且可以通过在CPU上运行它们来使两者运行得更慢)。我还检查了两种语言都提供完全相同的输入并接收相同的输出。我还对Scala代码进行了分析,发现上面的TensorFlow代码几乎花费了很多时间,所以代码的多余部分没有减慢速度。

我正在使用Python 3,Scala 2.11,Java 8 VM和Java TensorFlow API 1.2版,并且正在Linux服务器上的Tesla K80上运行。

我为这个问题的模糊性道歉。我不确定哪些细节是相关的,但很乐意根据要求提供更多细节。

0 个答案:

没有答案