У меня есть нейронная сеть, написанная на PyTorch, которая выводит некоторый Tensor a
на GPU.Я хотел бы продолжить обработку a
с высокоэффективным слоем TensorFlow.
Насколько я знаю, единственный способ сделать это - переместить a
из памяти GPU в память CPU, преобразовать в numpy, а затем передать это в TensorFlow.Упрощенный пример:
import torch
import tensorflow as tf
# output of some neural network written in PyTorch
a = torch.ones((10, 10), dtype=torch.float32).cuda()
# move to CPU / pinned memory
c = a.to('cpu', non_blocking=True)
# setup TensorFlow stuff (only needs to happen once)
sess = tf.Session()
c_ph = tf.placeholder(tf.float32, shape=c.shape)
c_mean = tf.reduce_mean(c_ph)
# run TensorFlow
print(sess.run(c_mean, feed_dict={c_ph: c.numpy()}))
Возможно, это немного неправдоподобно, но есть ли способ сделать так, чтобы либо
a
никогда не покидало память GPU, либо a
переходит из памяти GPU в закрепленную память в память GPU.
Я попытался 2. в приведенном выше коде использовать non_blocking=True
, но я не уверен, что он делает то, что делаетЯ ожидаю (т.е. перенесу его в закрепленную память).
В идеале мой график TensorFlow должен работать непосредственно с памятью, занятой тензором PyTorch, но я предположил, что это невозможно?