问题背景:
用paddle做ocr识别训练,每隔一段时间后的训练,会自动评估(eval)一次,之前都好好的,训练一整晚都不会报错。
结果打美赛打了5天之后再弄,就出现了一些奇奇怪怪的错误。
问题重述:
问题简洁明了,发生在评估之后,直接告诉你0号显卡进程终止。没有任何错误提示。就连log里面也没写什么有用的东西。
模型建立:
解决之路:
最开始怀疑是用了LMDB数据集的问题,重新用回了简单数据集,还是报错。
怀疑是数据集出bug了,换了个少一点的测试集,问题没能解决。
美赛期间安装了很多python库,怀疑是版本不兼容。重装了numpy、opencv等,没有解决问题。然后我重装了paddle,也没能解决问题。
----------------------------------------------情绪失控分割线-------------------------------------------------------
找了很多别的办法,都没能解决问题。这个时候偶然发现,我的C盘满了。
我:?
本来还有18多个G,怎么突然满了。我运行了系统盘自动清理程序,腾出来2个G,还有16个G不知道被谁吃了。
找了好久,罪魁祸首终于被我揪出来了:
是python的错误报告文件,一个就1.6个G,好家伙这个文件夹里有10个。
一看时间,就是我刚刚我调试产生的。我好奇的打开它看了一下。(恰巧我电脑有Visual Studio)
然后找到了问题原因。
大概意思是,线程访问了一个地址,而这个地址不让它访问,于是线程就崩溃了。
然后我用管理员权限打开cmd运行eval,还是没能解决问题。
----------------------------------------------绝望分割线-------------------------------------------------------
吃了个午饭回来接着debug。一个1.6G的错误报告不应该只有这些信息。观察了一下VS,发现了这个按钮:
启动后,系统加载了发生错误时的模块,直到出现了一个异常:
未经处理的异常发生在动态链接库msvcp110.dll中,就是它:
注意文件大小604KB
由于我用的Utools的everything搜索,同时还能看到好多其他msvcp110.dll文件
他们的大小居然不一样?
我找了一个大一点的(也许是功能全的新版本),复制进system32文件夹内当做新的msvcp110.dll(注意源文件备份)
然后进行了eval,
问题解决了。