В наши дни я не смог использовать графический процессор для запуска своей новой программы.Мой графический процессор - Nvidia 1080Ti, и я ускорил свою программу с графическим процессором раньше.(Поскольку GPU-утилита достигает более 60%, а время намного короче, чем при использовании CPU).Поэтому я думаю, что нет проблем с настройкой среды.
По сравнению с моими предыдущими программами, которые хорошо работают с графическим процессором, в новой программе я определил сложную функцию потерь со многими тензорными операциями.Поскольку сетевая модель похожа, я думаю, что сложные потери приводят к увеличению времени.
Мой код указан в следующем виде:
import numpy as np
import os
from keras.callbacks import ModelCheckpoint, EarlyStopping
from keras import backend as K
NT, H_num, Nk = 64, 100000, 64
Input_H = np.load('Input_H10W.npy')
print(Input_H.shape)
input_dim = NT * Nk
Nt = int(NT/2)
model = tf.keras.models.Sequential([
tf.keras.layers.InputLayer(input_shape=(input_dim,)) ,
# tf.keras.layers.Dense(4096, activation='relu') ,
# tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(2048, activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(1024, activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(Nt, activation='tanh')
])
def channel(y_true, y_pred):
results, CSI = y_pred, y_true
a = tf.constant(3.1415926)
wr = tf.cos(results* a)
wi = tf.sin(results* a)
w = tf.complex(wr,wi) #actually W^H 1*16
mse = 0
for i in range(Nk):
hr = tf.slice(CSI, [0, NT*i], [-1, Nt])
hi = tf.slice(CSI, [0, NT*i+Nt], [-1, Nt])
h = tf.complex(hr,hi)
equal_H = K.batch_dot(w, tf.transpose(h))
euqal_H_conj = equal_H - 2j * tf.cast(tf.imag(equal_H), dtype=tf.complex64)
snr = euqal_H_conj * equal_H
snr = tf.cast(snr, dtype=tf.float32)
mse += 1 / (snr/Nt + 1)
mse = mse/Nk
return tf.reduce_mean(mse)
optimizer = tf.train.AdamOptimizer()
model.compile(optimizer, loss=channel)
print(model.summary())
checkpoint = ModelCheckpoint('./trained.h5', monitor='val_loss', verbose=0, save_best_only=True, mode='min', save_weights_only=True)
model.fit(Input_H, Input_H, epochs=2000, batch_size=2048, verbose=2, callbacks=[checkpoint], validation_split=0.2)
model.load_weights('./trained.h5')
С программой все в порядке, но она работает слишком медленно.Поскольку все нормально, кроме сложной функции потерь, я думаю, что это и есть причина.Я отслеживаю использование графического процессора с помощью некоторого программного обеспечения, во время обучения оно иногда достигает 30%, но в большинстве случаев составляет 0%.И поэтому моя программа работает очень медленно.
Итак, как я могу использовать свой графический процессор для ускорения моей программы?Заранее спасибо и извините за мой английский.