Я часами настраивал свой компьютер и, наконец, получил данные для обучения Python на графических процессорах, а не на ЦП. Однако по какой-то причине мои модели прерываются на полпути в середине их эпох, и я не могу завершить обучение моделей.
Ожидание компа не решает эту проблему и я тоже не могу прервать работу ядра. Я попробовал решение других людей, и мне все еще не повезло.
Я могу нормально обучать свою модель, если использую ЦП (со скоростью сканирования), но когда я переключаюсь на ГП, моя модель обучается очень быстро, прежде чем они зависают на полпути, не завершая все требуемые эпохи. После этого мое ядро python также зависает при запуске, и я не могу прервать его, если не завершу все это из диспетчера задач.
Судя по истории производительности моего диспетчера задач, во время обучения на моем графическом процессоре наблюдается устойчивый всплеск, чего и следовало ожидать. Но когда он зависает, активность моего графического процессора возвращается к 0, хотя мое ядро указывает, что обучение все еще находится в середине своей эпохи. Это происходит случайным образом и не зависит от времени или количества эпох, хотя вероятность этого выше, чем дольше я обучаю данные.
Вот моя последовательная модель.
def prepare_sequences(notes, n_vocab, seq_len):
""" Prepare the sequences used by the Neural Network """
sequence_length = seq_len
names = sorted(set(item for item in notes))
note_to_int = dict((note, number) for number, note in enumerate(names))
network_input = []
network_output = []
# create input sequences and the corresponding outputs
for i in range(0, len(notes) - sequence_length, 1):
sequence_in = notes[i:i + sequence_length]
sequence_out = notes[i + sequence_length]
network_input.append([note_to_int[char] for char in sequence_in])
network_output.append(note_to_int[sequence_out])
n_patterns = len(network_input)
# reshape the input into a format compatible with LSTM layers
network_input = numpy.reshape(network_input, (n_patterns, sequence_length, 1))
# normalize input
network_input = network_input / float(n_vocab)
network_output = np_utils.to_categorical(network_output)
return (network_input, network_output)
def create_network(network_input, n_vocab, LSTM_node_count, Dropout_count):
""" create the structure of the neural network """
model = Sequential()
model.add(LSTM(
LSTM_node_count,
input_shape=(network_input.shape[1], network_input.shape[2]),
recurrent_dropout= Dropout_count,
return_sequences=True
))
model.add(LSTM(
LSTM_node_count,
return_sequences=True,
recurrent_dropout= Dropout_count,))
model.add(LSTM(LSTM_node_count))
model.add(BatchNorm())
model.add(Dropout(Dropout_count))
model.add(Dense(256))
model.add(Activation('relu'))
model.add(BatchNorm())
model.add(Dropout(Dropout_count))
model.add(Dense(n_vocab))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
return model
def train(model, network_input, network_output, epoch, batchsize):
""" train the neural network """
filepath = "trained_weights/" + "weights-improvement-{epoch:02d}-{loss:.4f}-bigger.hdf5"
checkpoint = ModelCheckpoint(
filepath,
monitor='loss',
verbose=0,
save_best_only= True,
mode='min'
)
callbacks_list = [checkpoint]
model.fit(network_input,
network_output,
epochs= epoch,
batch_size= batchsize,
callbacks= callbacks_list)
configproto = tf.compat.v1.ConfigProto()
configproto.gpu_options.allow_growth = True
configproto.gpu_options.polling_inactive_delay_msecs = 10
sess = tf.compat.v1.Session(config=configproto)
tf.compat.v1.keras.backend.set_session(sess)
Во время тренировки я также получаю предупреждающее сообщение, и я не знаю, что это значит.
WARNING:tensorflow:Layer lstm will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU
WARNING:tensorflow:Layer lstm_1 will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU
C:\Users\David>nvidia-smi
Sun Dec 27 15:56:16 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.89 Driver Version: 460.89 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce GTX 1050 WDDM | 00000000:01:00.0 Off | N/A |
| N/A 47C P8 N/A / N/A | 120MiB / 4096MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 5496 C+G ...5n1h2txyewy\SearchApp.exe N/A |
| 0 N/A N/A 7372 C+G ...nputApp\TextInputHost.exe N/A |
| 0 N/A N/A 8268 C+G ...wekyb3d8bbwe\Music.UI.exe N/A |
| 0 N/A N/A 9420 C+G ...artMenuExperienceHost.exe N/A |
| 0 N/A N/A 10084 C+G ...ekyb3d8bbwe\YourPhone.exe N/A |
| 0 N/A N/A 11292 C+G Insufficient Permissions N/A |
| 0 N/A N/A 14684 C+G ...cw5n1h2txyewy\LockApp.exe N/A |
+-----------------------------------------------------------------------------+
В настоящее время я использую tensorflow 2.4, CUDA 11.2,
Что означает «мои модели продолжают прерываться»? Пожалуйста, предоставьте доказательства этого.
Активация = «релу». Прерванные модели относятся к тому, что он застрял в середине эпохи. Проблема похоже на описание в этой теме github.com/keras-team/keras/issues/8595
Пожалуйста, предоставьте полную информацию, модель, код и т. д. Чем больше деталей, тем лучше.
Я обновил свой вопрос последовательной моделью и описанием проблемы.
Вы используете recurrent_dropout > 0
, который не соответствует требованиям совместимости LSTM для обеспечения оптимизации CuDNN. Сделайте recurrent_dropout = 0
, чтобы решить проблему.
Спасибо, я изменил recurrent_dropout = 0 и проблема исправлена. Я понятия не имею, почему это происходит, но это решает проблему.
Какова функция активации вашей ячейки/слоя LSTM?