Как заставить l oop работать параллельно в тензорном потоке - PullRequest
1 голос
/ 18 июня 2020

Я везде искал этот чрезвычайно простой вопрос, но безуспешно. У меня есть следующий код:

@tf.function
def parTest():
    for i in tf.range(tf.constant(10)):
        insideFunc(0,i)

@tf.function
def insideFunc(x_in,j):
    for i in tf.range(tf.random.uniform([],0,1000,dtype=tf.int32)):
        x_in += tf.cast(i,tf.int32)
    tf.print(j)
return x_in

И когда я запускаю его, он не запускается параллельно, даже если нет зависимости между l oop итерациями. Я пробовал запустить insideFun c с помощью tf.map_fn, и он запускает его параллельно (все отпечатки смешиваются), однако tf.map_fn не может обрабатывать входы / выходы переменной длины, поэтому я не могу его использовать: (Должен быть способ построить график с использованием al oop, который работает параллельно.

Исходная проблема у меня проста: у меня есть список тензоров разной длины, и мне нужно выполнить те же операции с тензорами в списке, но поскольку они имеют разную длину, мне нужно сделать это в al oop, и черт знает, по какой причине это делает невозможным выполнение этих операций параллельно.

1 Ответ

0 голосов
/ 18 июня 2020

Поворачивает, наша функция @ tf. как-то портит параллельное выполнение. Удалось заставить его работать параллельно с этой функцией:

def parTest(v):
y = v
for i in range(5):
    y += insideFunc(v,i)
return y

, но если я добавил @ tf.function, он больше не работал параллельно.

...