【发布时间】:2020-03-26 08:37:43
【问题描述】:
正在使用的版本: tensorflow-gpu:2.0,CUDA v10,CuDNN v7.6.5,Python 3.7.4
系统规格: i9-7920X, 4 x RTX 2080Ti, 128GB 2400MHz RAM, 2TB SATA SSD
问题:
在使用 tensorflow 2.0 训练任何模型时,在一个 epoch 期间随机地,GPU 将冻结,GPU 的功耗将下降到 70W 左右,核心使用量为 0,内存利用率也固定为某个随机值。发生这种情况时,我也没有收到任何错误或异常。恢复的唯一方法是重新启动 jupyter 内核并从头开始运行。 我首先认为我的代码可能有问题。所以我想我会在 Cifar100 上训练 Densenet 时尝试复制这个问题,但问题仍然存在。
如果我在多个 GPU 上运行训练,那么 GPU 也会冻结,但这种情况很少发生。但是对于单 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 和配备 32GB 和 970 EVO NVME 的 RTX 2060 的笔记本电脑上尝试了代码。不幸的是,我遇到了同样的 GPU 冻结问题。
有谁知道问题出在哪里?
【问题讨论】:
-
没有什么特别令我大惊小怪的问题,但这些系统可能非常微妙。您是否尝试过任何组件的旧版本、可能更稳定的版本,例如使用 TensorFlow 1.14 而不是 2?还是您需要使用所有内容的最新版本?
-
我实际上是在这个领域进行研究,因为我不得不在不同的层中处理很多权重。我可以使用 tf 1.14 并且我已经尝试过 1.15。 tf 1.15 的问题是我的权重修改代码在旧版本中运行需要非常长的时间。但如果我找不到修复程序,我将不得不回滚到旧版本。
-
什么是
densenet? -
它只是一个model 架构。
标签: tensorflow keras nvidia freeze tensorflow2.0