Tensorflow:具有num_parallel_calls的数据集映射没有加速

时间:2018-11-27 18:09:59

标签: python tensorflow tensorflow-datasets

我正在使用TensorFlow和tf.data.Dataset API来执行一些文本预处理。在我的num_parallel_calls调用中不使用dataset.map时,预处理10K记录需要0.03s。

当我使用num_parallel_trials=8(计算机上的内核数)时,预处理10K记录也需要0.03s。

我在Google上四处搜寻,发现:Parallelism isn't reducing the time in dataset map

它们表示您需要使用TensorFlow操作来查看加速。事情是这样的:我 am 仅使用TensorFlow操作。具体来说,我正在映射此函数:

def preprocess(self, x, data_table):
    x['reviews'] = tf.string_split(x['reviews'], delimiter=' ')
    x['reviews'] = tf.sparse_tensor_to_dense(x['reviews'], default_value=' ')
    x['reviews'] = tf.cast(data_table.lookup(x['reviews']), tf.int32)
    nbatch = tf.cast(tf.shape(x['reviews'])[0], tf.int32)
    nseq = tf.cast(tf.shape(x['reviews'])[1], tf.int32)
    padding = tf.cond(tf.less(nseq, 100),
                      lambda: 0 * tf.ones([nbatch, 100 - nseq], tf.int32),
                      lambda: 0 * tf.ones([nbatch, 0], tf.int32))
    x['reviews'] = tf.concat((x['reviews'], padding), axis=1)[:, :100]
    x['reviews'].set_shape([None, 100])
    return x

有人知道为什么我看不到加速吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我的第一个假设是对lambda的调用正在降低您的速度,因为每次迭代和内核的延迟初始化都是如此。根据这个网址,他在速度和核心使用上也有类似的问题。 Is there a way to use tensorflow map_fn on GPU? 我几乎是一个使用张量和管道的初学者,但是稍后我将在可以访问计算机时进行调查,我想知道在哪里运行了哪些可执行文件。