18.04 - 升级至 Nvidia 435 驱动程序后,Tensorflow 在待机期间导致间歇性冻结

18.04 - 升级至 Nvidia 435 驱动程序后,Tensorflow 在待机期间导致间歇性冻结

我最近将我的 Nvidia 驱动程序从 418 升级到了 435(我有一台 RTX 2070)。说来话长,但我遇到了一些驱动程序冲突问题,所以我不得不切换到 nouveau 驱动程序,然后再切换回来。根据 dpkg 的输出,我很确定这已经清除了 418 个驱动程序。

然而,我遇到了一个奇怪的问题:每当我尝试将系统置于待机状态时,系统就会挂起。我会看到一个完全没有响应的空白屏幕,我必须手动重新启动,这很令人沮丧,因为我会丢失所有工作。奇怪的是,这种情况并不是每次待机时都会发生,我不知道为什么。

我曾尝试在启动时将“initcall_debug”添加到 GRUB 命令行,但我不确定这是否适合我的情况。无论如何,以下是没有添加的行的输出returned 0

$ dmesg -s 128000 | grep “initcall” | sed “s/\(.*\)after\(.*\)/\2 \1/g” | sort -n | grep ‘returned -’
 0 微秒 [ 0.176011] initcall xen_pvh_gnttab_setup+0x0/0x3a回 -19
 0 微秒 [ 0.176400] initcall __gnttab_init+0x0/0x40回 -19
 0 微秒 [ 0.176444] initcall bts_init+0x0/0xc2回 -19
 0 微秒 [ 0.176444] initcall numachip_timer_init+0x0/0x5a回 -19
 0 微秒 [ 0.176444] initcall pt_init+0x0/0x352回 -19
 0 微秒 [ 0.176444] initcall setup_vcpu_hotplug_event+0x0/0x31回 -19
 0 微秒 [ 0.176444] initcall xenbus_init+0x0/0x2d1回 -19
 0 微秒 [ 0.176444] initcall xen_pcpu_init+0x0/0xc5回 -19
 0 微秒 [ 0.276002] initcall balloon_init+0x0/0x1ba回 -19
 0 微秒 [ 0.276002] initcall xen_acpi_pad_init+0x0/0x52回 -19
 0 微秒 [ 0.276002] initcall xen_setup_shutdown_event+0x0/0x40回 -19
 0 微秒 [ 0.277672] initcall save_microcode_in_initrd+0x0/0xa0回 -22
 0 微秒 [ 0.808110] initcall calgary_fixup_tce_spaces+0x0/0x106回 -19
 0 微秒 [ 0.808911] initcall amd_iommu_pc_init+0x0/0x22a回 -19
 0 微秒 [ 0.808916] initcall intel_uncore_init+0x0/0x24d回 -19
 0 微秒 [ 0.810834] initcall efivarfs_init+0x0/0x39回 -19
 0 微秒 [ 0.839467] initcall intel_idle_init+0x0/0x5e2回 -19
 0 微秒 [ 0.841296] initcall bgrt_init+0x0/0xba回 -19
 0 微秒 [ 0.841303] initcall ghes_init+0x0/0x142回 -19
 0 微秒 [ 0.841336] initcall xenbus_probe_initcall+0x0/0x53回 -19
 0 微秒 [ 0.841338] initcall xenbus_init+0x0/0x3b回 -19
 0 微秒 [ 0.841340] initcall xenbus_backend_init+0x0/0x4d回 -19
 0 微秒 [ 0.841341] initcall hypervisor_subsys_init+0x0/0x2a回 -19
 0 微秒 [ 0.841342] initcall hyper_sysfs_init+0x0/0x191回 -19
 0 微秒 [ 0.841349] initcall xen_late_init_mcelog+0x0/0x66回 -19
 0 微秒 [ 0.841351] initcall xen_acpi_processor_init+0x0/0x1d9回 -19
 0 微秒 [ 0.841381] initcall xen_hvc_init+0x0/0x24b回 -19
 0 微秒 [ 0.865921] initcall xlblk_init+0x0/0xf0回 -19
 0 微秒 [ 0.866405] initcall netif_init+0x0/0x77回 -19
 0 微秒 [ 1.187288] initcall intel_pstate_init+0x0/0xb3回 -19
 0 微秒 [ 1.191312] initcall efivars_sysfs_init+0x0/0x210回 -19
 0 微秒 [ 1.191314] initcall esrt_sysfs_init+0x0/0x2d9回 -三十八
 0 微秒 [ 1.191522] initcall pmc_core_probe+0x0/0x242回 -19
 0 微秒 [ 1.317488] initcall boot_wait_for_devices+0x0/0x2e回 -19
 0 微秒 [ 1.330870] initcall powernowk8_init+0x0/0x1e0回 -19
 0 微秒 [ 1.330873] initcall centrino_init+0x0/0x30回 -19
 0 微秒 [ 1.336981] initcall efi_shutdown_init+0x0/0x44回 -19
 0 微秒 [ 1.336983] initcall itmt_legacy_init+0x0/0x5b回 -19
 0 微秒 [ 1.336989] initcall software_resume+0x0/0x2a0回 -2
 4 微秒 [ 1.191529] initcall pmc_atom_init+0x0/0x2b2回 -19
 7 微秒 [ 0.865931] initcall htcpld_core_init+0x0/0x32回 -19
 10 微秒 [ 9.639314] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 10 微秒 [ 9.947048] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 12 微秒 [ 8.432809] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 12 微秒 [ 9.328536] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 13 微秒 [ 7.579790] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 15 微秒 [ 7.760494] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 15 微秒 [ 8.032654] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 16 微秒 [ 9.200728] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 17 微秒 [ 7.652451] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 17 微秒 [ 9.421129] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 18微秒[7.932705] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 20 微秒 [ 8.932645] initcall amd64_edac_init+0x0/0x1000 [amd64_edac_mod]回 -19
 22 微秒 [ 0.863365] initcall agp_amd64_mod_init+0x0/0x26回 -19
 57 微秒 [ 2.464629] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 57 微秒 [ 2.568959] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 57 微秒 [ 2.656072] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 57 微秒 [ 2.920610] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 58 微秒 [ 2.376457] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 58 微秒 [ 2.420686] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 58微秒 [2.850913] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 65 微秒 [ 2.728445] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 65 微秒 [ 2.800692] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 66 微秒 [ 2.116499] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 66 微秒 [ 2.316528] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 66 微秒 [ 2.496452] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 66 微秒 [ 2.768653] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 72 微秒 [ 2.888681] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 76 微秒 [ 2.220657] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 78 微秒 [ 2.612693] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 80 微秒 [ 2.688437] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 89 微秒 [ 9.421155] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 91 微秒 [ 2.276836] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 95 微秒 [ 2.072491] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 97 微秒 [ 1.955728] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 104 微秒 [ 2.176572] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 108 微秒 [ 10.176986] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 109 微秒 [ 10.080899] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 109 微秒 [ 10.216712] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 109 微秒 [ 10.313008] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 109 微秒 [ 10.373069] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 115 微秒 [ 10.042520] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 120 微秒 [ 10.261266] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 124 微秒 [ 7.652694] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 129 微秒 [ 7.760871] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 138 微秒 [ 8.433073] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 138 微秒 [ 9.201083] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 141 微秒 [ 7.403532] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 147 微秒 [ 7.561564] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 152 微秒 [ 7.933158] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 155 微秒 [ 7.489113] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 158 微秒 [ 10.124370] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 165 微秒 [ 8.032815] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 167 微秒 [ 8.932793] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 179 微秒 [ 9.946483] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 183 微秒 [ 9.639479] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 249 微秒 [ 9.329127] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 270 微秒 [ 1.851350] initcall fjes_init_module+0x0/0xd0 [fjes]回 -19
 3545 微秒 [ 1.161088] initcall i8042_init+0x0/0x474回 -19
 5940 微秒 [ 1.336958] initcall edd_init+0x0/0x2d8回 -19 

有人有更好的方法来调试待机问题吗?

附加问题:我有点犹豫是否要再次执行 Nvidia 驱动程序的完全清除,因为我有一个可运行的 Tensorflow 配置,我不想弄乱它。清除是否意味着我必须重新安装 CUDA 驱动程序?如果是这样,这可以独立于 Tensorflow 所需的其他软件包完成吗?

多谢!

编辑:我尝试进入待机状态sudo sh -c "sync && echo 1 > /sys/power/pm_trace && pm-suspend",然后检查 dmesg 输出。我发现以下输出:

[    1.320847]   Magic number: 0:236:250
[    1.323713]   hash matches /build/linux-UDHJtG/linux-4.15.0/drivers/base/power/main.c:1559
[    1.326768] pci 0000:0a:00.0: hash matches
[    1.329815] memory memory124: hash matches

检查后lspci我发现 0000:0a:00.0 是“VGA 兼容控制器:NVIDIA Corporation Device 1f07 (rev a1)”,所以看起来我必须再次尝试清除 Nvidia 驱动程序。但是,我不知道这memory memory 124是什么 - 有人知道吗?

编辑 2:彻底清除并重新安装 Nvidia 驱动程序。同样的问题发生了。但是,我注意到了一件事:只有当我通过 Anaconda 打开 Spyder 并开始使用我的 GPU 训练神经网络模型时,才会发生这种情况。知道为什么吗?

编辑 3:回到 Nvidia 418 驱动程序。出现同样的问题,所以我切换回 435 驱动程序。这是我的输出dpkg -l | grep -i nvidia

ii cuda-nsight-计算-10-1 10.1.243-1 amd64        英伟达Nsight 计算
ii cuda-nsight-系统-10-1 10.1.243-1 amd64        英伟达Nsight 系统
ii cuda-nvtx-10-1 10.1.243-1 amd64        英伟达工具扩展
ii lib英伟达-cfg1-435:amd64 435.21-0ubuntu0.18.04.2 amd64        英伟达二进制 OpenGL/GLX 配置库
ii lib英伟达-common-435 435.21-0ubuntu0.18.04.2 所有使用的共享文件英伟达
ii lib英伟达-计算-435:amd64 435.21-0ubuntu0.18.04.2 amd64        英伟达libcompute 包
ii lib英伟达-计算-435:i386 435.21-0ubuntu0.18.04.2 i386         英伟达libcompute 包
ii lib英伟达-decode-435:amd64 435.21-0ubuntu0.18.04.2 amd64        英伟达视频解码运行库
ii lib英伟达-解码-435:i386 435.21-0ubuntu0.18.04.2 i386         英伟达视频解码运行库
ii lib英伟达-encode-435:amd64 435.21-0ubuntu0.18.04.2 amd64 NVENC 视频编码运行库
ii lib英伟达-encode-435:i386 435.21-0ubuntu0.18.04.2 i386 NVENC 视频编码运行库
ii lib英伟达-fbc1-435:amd64 435.21-0ubuntu0.18.04.2 amd64        英伟达基于 OpenGL 的帧缓冲区捕获运行库
ii lib英伟达-fbc1-435:i386 435.21-0ubuntu0.18.04.2 i386         英伟达基于 OpenGL 的帧缓冲区捕获运行库
ii lib英伟达-gl-435:amd64 435.21-0ubuntu0.18.04.2 amd64        英伟达OpenGL/GLX/EGL/GLES GLVND 库和 Vulkan ICD
ii lib英伟达-gl-435:i386 435.21-0ubuntu0.18.04.2 i386         英伟达OpenGL/GLX/EGL/GLES GLVND 库和 Vulkan ICD
ii lib英伟达-ifr1-435:amd64 435.21-0ubuntu0.18.04.2 amd64        英伟达基于 OpenGL 的带内帧读回运行库
ii lib英伟达-ifr1-435:i386 435.21-0ubuntu0.18.04.2 i386         英伟达基于 OpenGL 的带内帧读回运行库
ii nsight-计算-2019.4.0 2019.4.0.12-1 amd64        英伟达Nsight 计算
ii nsight-systems-2019.3.7 2019.3.7.5-3837e03 amd64        英伟达Nsight Systems 是一个具有跟踪功能的统计抽样分析器。英伟达-计算-实用程序-435 435.21-0ubuntu0.18.04.2 amd64        英伟达计算实用程序英伟达-dkms-435 435.21-0ubuntu0.18.04.2 amd64        英伟达DKMS 包英伟达-驱动程序-435 435.21-0ubuntu0.18.04.2 amd64        英伟达驱动程序元包英伟达-kernel-common-435 435.21-0ubuntu0.18.04.2 amd64 与内核模块一起使用的共享文件英伟达-内核源-435 435.21-0ubuntu0.18.04.2 amd64        英伟达内核源码包英伟达-prime 0.8.8.2 所有工具启用英伟达的 Prime英伟达-settings 418.87.00-0ubuntu1 amd64 配置工具英伟达图形驱动程序英伟达-utils-435 435.21-0ubuntu0.18.04.2 amd64        英伟达驱动程序支持二进制文件
ii xserver-xorg-video-英伟达-435 435.21-0ubuntu0.18.04.2 amd64        英伟达二进制 Xorg 驱动程序

答案1

找到了一个解决方法 - 我必须将内存增长设置为 TRUE,详情请见https://www.tensorflow.org/guide/gpu#allowing_gpu_memory_growth。我觉得有点烦人,但很有必要。感谢@ubfan1 的帮助!

如果有人知道如何彻底解决这个问题,我将不胜感激。

相关内容