Tensorflow: использование нескольких графических процессоров - PullRequest
1 голос
/ 19 июня 2019

У меня действительно большая матрица (A), которую я хочу нарезать, а затем запустить умножение матриц на двух разных графических процессорах, потому что у графических процессоров только 16 ГБ памяти. Проблема в том, что (по моему мнению) tenorflow обрабатывает операцию 1,3,5 (см. Пример кода) параллельно, что также вызывает ошибку памяти. Как я могу запустить их последовательно? Я думал о прохождении через устройства, но я не уверен, если устройства работают параллельно, чем. Я хочу потерять как можно меньше производительности. Потому что вычисление времени - вещь для моего проекта.

Надеюсь, вы поняли мою проблему.

Привет

import matplotlib.pyplot as plt
import time
import tensorflow as tf
from tensorflow.python.client import timeline

tf.set_random_seed(42)

T = tf.constant(1,tf.float32, name = 'Maturity')
N =tf.constant(500,tf.int32, name = 'Issuer')
sigma    = tf.random.uniform([N],0,1)
riskfreeRate   = 0.02
S0=tf.random.uniform([N],5,10)
simulation     = 10000



S     = tf.placeholder(tf.float32, name = 'StartingPrice')
z     = tf.random_normal([N, simulation], dtype = tf.float32, name =     'standardNormRandomValues')
mu    = tf.placeholder(tf.float32, name = 'riskfreeRate')

ST = S0*tf.exp((mu - tf.square(sigma)/2) * T + sigma * tf.transpose(z) *     tf.sqrt(T))


#A is created with numpy and has 500x1.000.000 entries

A2=tf.convert_to_tensor(np.asmatrix(A),dtype=tf.float32)


#Operation 1
with tf.device('/device:GPU:0'):
    A3=A2[:,0:tf.cast((scenarios/5),tf.int32)]
    SC1=tf.matmul(ST,A3)

#Operation 2     
with tf.device('/device:GPU:1'):
    A4=A2[:,tf.cast((scenarios/5),tf.int32):tf.cast(2*scenarios/5,tf.int32)]
    SC2=tf.matmul(ST,A4)

#Operation 3
with tf.device('/device:GPU:0'):
    A5=A2[:,tf.cast((2*scenarios/5),tf.int32):tf.cast(3*scenarios/5,tf.int32)]
    SC3=tf.matmul(ST,A5)

#Operation 4
with tf.device('/device:GPU:1'):
    A6=A2[:,tf.cast((3*scenarios/5),tf.int32):tf.cast(4*scenarios/5,tf.int32)]
    SC4=tf.matmul(ST,A6)

#Operation 5
with tf.device('/device:GPU:0'):
    A7=A2[:,tf.cast((4*scenarios/5),tf.int32):tf.cast(scenarios,tf.int32)]
    SC5=tf.matmul(ST,A7)


SC=tf.concat(SC1,SC2,SC3,SC4,SC5)


with tf.Session() as sess:

    priceTensor=sess.run(SC, {mu : riskfreeRate})
    sess.close()
...