Несколько графических процессоров tensorflow работают одновременно?

Чтобы узнать о механизме распределенного тензорного потока, я написал простой тестовый код тензорного потока с использованием нескольких GPU.

def cv_data(SEED):
    np.random.seed(SEED)
    return np.random.rand(5,2,2)


def test(data):
    for i in range(5):
        with tf.device('/gpu:%d' %i ):
            with tf.name_scope('cv%d' %i):
                x = tf.placeholder(tf.float32,[2,2],name='x')
                y = tf.matmul(x,x)
    init = tf.initialize_all_variables()
    sess = tf.Session()
    with sess as sess:
        writer=tf.summary.FileWriter("test_graph",sess.graph)
        sess.run(init)
        print("y is ")
        print(sess.run(y,feed_dict={'cv0/x:0':np.ones((2,2)),'cv1/x:0':2*np.ones((2,2)),'cv2/x:0':3*np.ones((2,2)),'cv3/x:0':4*np.ones((2,2)),'cv4/x:0':5*np.ones((2,2))))
        #tf.train.Saver.save(sess,"./model")
        writer.close()

Но sess.run() выполняет только граф /gpu:4, как я могу позволить всем gpu работать одновременно?


person Yushin Liu    schedule 21.04.2018    source источник


Ответы (1)


Вы можете создать список операций Python и передать их все sess.run. Или вы можете агрегировать результаты (например, tf.add_n) и запустить эту операцию.

В любом случае вам, вероятно, нужен один заполнитель вне цикла, что означает, что вы подадите значение, и оно будет скопировано на все устройства.

person Allen Lavoie    schedule 23.04.2018
comment
Спасибо, это то, что вы имеете в виду? sess.run(['cv2/MatMul:0','cv1/MatMul:0'],feed_dict={'cv0/x:0':np.ones((2,2)),'cv1/x:0':2*np.ones((2,2)),'cv2/x:0':3*np.ones((2,2))}) #runing at the same time Я обнаружил, что он действительно работает параллельно - person Yushin Liu; 26.04.2018