Используемые версии :ensorflow-GPU: 2.0, CUDA v10, CuDNN v7.6.5, Python 3.7.4
Системные характеристики: i9-7920X, 4 x RTX 2080Ti, 128 ГБ 2400 МГц RAM, 2 ТБ SATA SSD
Проблема:
Во время обучения любой модели, использующей tenorflow 2.0, случайным образом в течение эпохи графический процессор будет зависать, а энергопотребление графического процессора упадет примерно до 70 Вт, а использование ядра - 0 ииспользование памяти также зафиксировано на некотором случайном значении. Я также не получаю никакой ошибки или исключения, когда это происходит. Единственный способ восстановить это перезапустить ядро jupyter и запустить его с самого начала. Сначала я подумал, что, возможно, что-то не так с моим кодом. Поэтому я решил, что попытаюсь повторить проблему во время обучения Densenet на Cifar100, и проблема не исчезнет.
Если я запустил обучение на нескольких графических процессорах, то и графические процессоры зависнут, но это происходит очень редко. Но с одним GPU гарантированно застрянет в тот или иной момент.
Ниже приведен код, используемый для обучения Cifar100
from densenet import DenseNet
from tensorflow.keras.datasets import cifar100
import tensorflow as tf
from tqdm import tqdm_notebook as tqdm
# the data, shuffled and split between train and test sets
(X_train, y_train), (X_test, y_test) = cifar100.load_data(label_mode='fine')
num_classes = 100
y_test_original = y_test
# Convert class vectors to binary class matrices. [one hot encoding]
y_train = tf.keras.utils.to_categorical(y_train, num_classes)
y_test = tf.keras.utils.to_categorical(y_test, num_classes)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
for i in range(3):
mean = np.mean(X_train[:,:,:,i])
std = np.std(X_train[:,:,:,i])
X_train[:,:,:,i] = (X_train[:,:,:,i] - mean)/std
X_test[:,:,:,i] = (X_test[:,:,:,i] - mean)/std
with tf.device('/gpu:0'):
model = DenseNet(input_shape=(32,32,3), dense_blocks=3, dense_layers=-1, growth_rate=12, nb_classes=100, dropout_rate=0.2,
bottleneck=True, compression=0.5, weight_decay=1e-4, depth=100)
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01,
momentum=0.9,
nesterov=True,
name='SGD')
model.compile(loss = 'categorical_crossentropy', optimizer = optimizer, metrics = ['accuracy'])
def scheduler(epoch):
if epoch < 151:
return 0.01
elif epoch < 251:
return 0.001
elif epoch < 301:
return 0.0001
callback = tf.keras.callbacks.LearningRateScheduler(scheduler)
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=300, verbose = 2)
PS: я даже пробовал код на своемноутбук с i7-8750h и RTX 2060 с 32 ГБ и 970 EVO NVME. К сожалению, у меня была такая же проблема с зависанием графического процессора.
Кто-нибудь знает, в чем проблема?