我正在使用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
有人知道为什么我看不到加速吗?
谢谢!
答案 0 :(得分:0)
我的第一个假设是对lambda的调用正在降低您的速度,因为每次迭代和内核的延迟初始化都是如此。根据这个网址,他在速度和核心使用上也有类似的问题。 Is there a way to use tensorflow map_fn on GPU? 我几乎是一个使用张量和管道的初学者,但是稍后我将在可以访问计算机时进行调查,我想知道在哪里运行了哪些可执行文件。