Tensorflow / Keras转换操作非常慢

时间:2019-04-03 13:38:29

标签: performance tensorflow

我有一个在PyTorch中实现的模型,由于我想在Tensorflow中实现的生产问题,因此该模型。

我已经在Tensorflow 2.0中实现了该模型,现在我想对其进行培训。 但是在运行模型时,我什至无法对整个数据进行一次正向传递。(我具有嵌入的静态内容tf.constant,只能转发其中的一小部分)。

如前所述,我尝试使用静态输入的一部分运行,该输入通过但非常缓慢。用整个输入运行时,我永远都不会通过转换操作(等待了半个多小时)。

我有这个转换层列表(当前设置是[(1, 800), (2, 400)]的两层

self.convs = [tf.keras.layers.Conv2D(filters=num_filters, kernel_size=(f_size, self.embedding_size), padding='SAME') for f_size, num_filters in self.params['filters']]

执行的操作是:

tensors = tf.expand_dims(tensors, 1)
conved = [tf.keras.activations.relu(conv(tensors)) for conv in self.convs]
conved = [tf.squeeze(x, axis=1) for x in conved]
conved = [tf.reduce_max(x, axis=1, keepdims=False) for x in conved]
emb = self.dropout(tf.concat(conved, axis=1))

我同时在模型输入和恒定张量上执行这些操作。

对于模型输入张量:

输入形状:(b​​atch_size,37,300)
Expanded_dims时间:9.0e-05
转化+回复时间:1.82
挤压时间:0.00016
减少最大时间:0.00051

对于恒定张量:
输入形状:(704、550、300)
Expanded_dims:2.932-05
...

我很清楚这是一个非常昂贵的操作,但是相比之下,以相同的硬件和pytorch在调试模式下运行大约需要10秒钟。

从系统监视器的角度看,所有内核都以接近100%的速度工作,但内存仅以66%的速度工作。

系统信息

  • Ubuntu 18.10
  • Python 3.6
  • 使用pip install tf-nightly-2.0-preview安装的Tensorflow 2.0
  • 在CPU上运行

希望有人可以提供帮助:)

0 个答案:

没有答案