Tensorflow tf.map_fn不能通过更高的并行_迭代提高速度

Tensorflow tf.map_fn不能通过更高的并行_迭代提高速度,tensorflow,tensorflow2.0,Tensorflow,Tensorflow2.0,我有一个自定义的损失函数,在这个函数中,我需要对张量中的所有值求值。为了实现并行化,我尝试使用tf.map\u fn方法,并将parallel\u iterations参数设置为8(我的cpu有16个内核)。然而,我发现这并没有提高计算损失的速度,不管值设置为parallel\u iterations 为了便于说明,无论为并行\u迭代指定的值如何,下面的代码都具有相同的执行时间。我错过了什么 import tensorflow as tf import time import numpy as

我有一个自定义的损失函数,在这个函数中,我需要对张量中的所有值求值。为了实现并行化,我尝试使用tf.map\u fn方法,并将
parallel\u iterations
参数设置为8(我的cpu有16个内核)。然而,我发现这并没有提高计算损失的速度,不管值设置为
parallel\u iterations

为了便于说明,无论为
并行\u迭代
指定的值如何,下面的代码都具有相同的执行时间。我错过了什么

import tensorflow as tf
import time
import numpy as np

def some_fn(x):
    return tf.math.exp(x)

@tf.function
def map_fn_test(samples):
    some_fn_vals = tf.map_fn(some_fn, samples, parallel_iterations=8)
    return some_fn_vals

samples = tf.constant(np.linspace(0,10,100000))
start_time = time.time()
values = map_fn_test(samples)
print("--- %s seconds ---" % (time.time() - start_time))

当急切地执行时,
map\u fn
不会并行执行,即使并行迭代设置为值>1。有关库的详细信息,请参见

输出

--- 24.097240209579468 seconds ---
--- 87.56250762939453 seconds ---
当我们在没有decorator(
@tf.function
)的情况下执行代码时,需要更多的时间

import tensorflow as tf
import time
import numpy as np

def some_fn(x):
    return tf.math.exp(x)


def map_fn_test(samples):
    some_fn_vals = tf.map_fn(some_fn, samples, parallel_iterations=8)
    return some_fn_vals

samples = tf.constant(np.linspace(0,10,100000))
start_time = time.time()
values = map_fn_test(samples)
print("--- %s seconds ---" % (time.time() - start_time))
输出

--- 24.097240209579468 seconds ---
--- 87.56250762939453 seconds ---
请通过类似的考试