为什么在 RTX 3070/cudnn8/CUDA11.1 上运行时添加卷积/池层会导致 Keras/Tensorflow 模型崩溃?

Tay*_*wte 3 python gpu keras tensorflow

系统信息

  • 操作系统:Windows 10,
  • 库德恩:8.0,
  • CUDA 工具包:11.1 安装在 10.2 之上,
  • GPU:Nvidia RTX 3070,
  • CPU:英特尔I7 10700f,
  • Tensorflow:(截至 2020 年 12 月 7 日tf.__version__==2.4.0rc-0也尝试过)tf-nightly-gpu
  • CUDA、cudnn 从源代码手动编译

测试代码

下面的代码成功编译了模型,但在model.fit(...)调用时崩溃了。


from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

train_images, test_images = train_images / 255.0, test_images / 255.0

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))

model.compile(optimizer='Adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))

history = model.fit(train_images, train_labels, batch_size=10, epochs=100)
Run Code Online (Sandbox Code Playgroud)

通过删除卷积层和最大池化层并在输入后展平张量,模型能够很好地训练(显然该模型的输出是无用的,但它仍然能够训练)。

程序崩溃时的错误代码是 >Process finish with exit code -1073740791 (0xC0000409)

此外,tensorflow 能够打开库、查找 GPU,并在tf.config.list_physical_devices('GPU')调用时将 GPU 记录为可用

更新 我在tensorflow github页面上打开了一个问题,你可以 在这里找到

Tay*_*wte 5

无论出于何种原因,在 IDE 终端中运行时,错误消息都会被抑制并Process finished with exit code -1073740791 (0xC0000409)记录为错误消息。

从命令行运行时,显示以下错误消息,而不是记录退出代码错误。

Could not load library cudnn_ops_infer64_8.dll. Error code 126
Please make sure cudnn_ops_infer64_8.dll is in your library path!
Run Code Online (Sandbox Code Playgroud)

我认识到这是cudnn库中包含的包,并将其从cudnn中的bin文件夹复制并粘贴到NVIDIA GPU计算工具包> CUDA > V11.0 > bin。对以下软件包重复此过程,问题得到解决。

cudnn_adv_infer64_8.dll
cudnn_adv_train64_8.dll
cudnn_cnn_infer64_8.dll
cudnn_cnn_train64_8.dll
cudnn_ops_infer64_8.dll
cudnn_ops_train64_8.dll
Run Code Online (Sandbox Code Playgroud)