У меня действительно большая матрица (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()