半个纪元后,GPU 会出现 nan 损失,但 CPU 不会出现损失

问题描述 投票:0回答:1

当使用 GPU 进行训练时,我发现损失和 val-loss 波动相当大,而且很快我就得到了损失 NaN。 如果我大幅降低学习率,有时我就能防止它出现 NaN 损失。但模型性能相当糟糕。

我的 CPU 和 GPU 训练之间的初始化值与我将模型保存到磁盘并从该文件开始针对 CPU 和 GPU 进行训练是相同的。

我尝试过剪辑值、标准值

如果我使用 CPU 进行训练,我可以使用高学习率,并且我会看到损失和 val-loss 稳步下降。即使在与 GPU 相同的学习率下,CPU 在相同数量的 epoch 中也会看到较低的损失和 val-loss。

我正在训练一个具有 3 个 LSTM 分支(32 个参数输入)的模型,每个 LSTM 分支有一层 512 个单元,另一个有 128 个单元,连接起来,然后是 2 个 265 个单元的密集层。 我在 LSTM 层上使用少量的 l2 reg(0.00001),在密集层上使用少量的 dropout(0.05)。我尝试过使用或不使用 Dropout 和 L2 reg。

我使用标准均方损失。

模型架构似乎与我的问题没有任何关系,因为我尝试了很多不同的层和参数。 批次大小不会产生影响。我尝试过非常低的批量大小。 我努力了: 各种调节技术。 剪辑值 标准值 较低的学习率 GPU 烧录测试(无错误) 许多不同的模型架构。甚至有些没有 LSTM 层。

我的GPU是GTX 1080。我尝试过烧录测试。显示 0 个错误。

我用 张量流2.13 cuDNN 8.6 Nvidia 驱动程序 535.86.05

这是我的模型:

num_properties = 12
dropout_rate = 0.05
l2_reg_value = 0.00001

input_branch1 = Input(shape=(32, num_properties))
input_branch2 = Input(shape=(32, num_properties))
input_branch3 = Input(shape=(32, num_properties))

lstm_branch1 = LSTM(512, return_sequences=True, kernel_regularizer=l2(l2_reg_value))(input_branch1)
lstm_branch1 = LSTM(128, kernel_regularizer=l2(l2_reg_value))(lstm_branch1)

lstm_branch2 = LSTM(512, return_sequences=True, kernel_regularizer=l2(l2_reg_value))(input_branch2)
lstm_branch2 = LSTM(128, kernel_regularizer=l2(l2_reg_value))(lstm_branch2)

lstm_branch3 = LSTM(512, return_sequences=True, kernel_regularizer=l2(l2_reg_value))(input_branch3)
lstm_branch3 = LSTM(128, kernel_regularizer=l2(l2_reg_value))(lstm_branch3)

concatenated = concatenate([lstm_branch1, lstm_branch2, lstm_branch3])

dense = Dense(256, activation='selu')(concatenated)
dense = Dropout(dropout_rate)(dense)
dense = Dense(256, activation='selu')(dense)
dense = Dropout(dropout_rate)(dense)

output = Dense(1, activation='linear')(dense)

model = Model(inputs=[input_branch1, input_branch2, input_branch3], outputs=output)

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001, clipnorm=1), loss="mae")

有什么建议吗?

我只是尝试在具有 A10 GPU 的 Lambda GPU 云机器上使用完全相同的模型和训练数据进行训练。没问题。

所以问题出在我的电脑或张量流等版本上。 我尝试重新安装 Ubuntu 并按照tensorflow 的安装说明进行操作。同样的问题。

接下来我要尝试的是另一个 GPU。

tensorflow gpu nan nvidia
1个回答
0
投票

GTX 1080 就是问题所在,即使它没有以任何其他方式接缝出现故障。

更换为RTX 3090即可解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.