在我的一个实验中,Caffe出现了崩溃。我的实验涉及使用AlexNet模型在同一数据的不同子集上训练网络。每次试验,我都会为该特定数据子集生成一个LMDB,然后修改我的网络.prototxt以匹配参数。在40多次试验中,我没有遇到任何问题。然而,有一个特定的试验在227次训练迭代后持续崩溃。给出的错误信息只是“总线错误(核心已转储)”。无论是在GPU还是CPU上进行训练,这种情况都会发生。我的搜索没有找到其他人遇到过这种错误的记录。显然,这似乎是某种内存寻址错误。我使用的是配备64GB内存和12GB显存的Nvidia DIGITS设备。系统监视器显示我使用的内存远未达到系统的最大容量。如果有帮助,我可以提供我的prototxt文件。然而,数据集太大无法上传(超过20GB)。
I1128 12:50:01.558748 20000 solver.cpp:228] 迭代227,损失 = 5.8273
I1128 12:50:01.558786 20000 solver.cpp:244] 训练网络输出#0:损失 = 5.8273 (* 1 = 5.8273 损失)
I1128 12:50:01.558796 20000 sgd_solver.cpp:106] 迭代227,学习率 = 0.001总线错误(核心已转储)
根据这个问题,在现代英特尔机器上不存在总线错误,而我使用的正是这种机器。是什么可能导致这个问题?
回答:
我发现了原因。我使用另一台电脑生成LMDB,并通过U盘传输到运行Caffe的机器上。不知为何,将文件传输到这个U盘导致lmdb从大约20GB被截断到15GB,而我没有收到任何警告。我认为当Caffe到达lmdb的意外结尾时就崩溃了。重新传输文件并确保它没有被截断解决了问题。