Ubuntu下Yolo训练触发缓冲区溢出崩溃问题求助
Darknet(AlexeyAB分支)训练缓冲区溢出崩溃问题解决
问题现象
此前训练正常,本地运行AlexeyAB分支Darknet做YOLO训练时,程序仅运行短时间、未完成一个epoch就触发缓冲区溢出崩溃。GPU/CPU内存仅初始阶段有小幅波动,后续状态正常直到崩溃。
报错信息
v3 (mse loss, Normalizer: (iou: 0.75, obj: 1.00, cls: 1.00) Region 106 Avg (IOU: 0.000000), count: 6, class_loss = 13507.688477, iou_loss = 1962709219740518995334266880.000000, total_loss = 1962709219740518995334266880.000000 total_bbox = 5305, rewritten_bbox = 0.245052 % seen 64, trained: 266 K-images (4 Kilo-batches_64) Learning Rate: 0.001, Momentum: 0.9, Decay: 0.0005 Detection layer: 82 - type = 28 Detection layer: 94 - type = 28 Detection layer: 106 - type = 28 If error occurs - run training with flag: -dont_show Resizing, random_coef = 1.40 608 x 608 try to allocate additional workspace_size = 1138.23 MB CUDA allocate done! Loaded: 0.000037 seconds (next mAP calculation at 230 iterations) 131: 193631524938497389469106176.000000, 193631524938497389469106176.000000 avg loss, 0.001000 rate, 38.027819 seconds, 268288 images, -1.000000 hours left *** buffer overflow detected ***: terminated
已排查内容
已知该报错常因标签含\r导致,通过Python检查标签文件,确认格式正常:
0 0.2846875 0.001953125 0.008125 0.00390625 0 0.6734375 0.30859375 0.014375 0.1953125 0 0.298125 0.626953125 0.01 0.16015625 0 0.285625 0.912109375 0.0125 0.17578125
解决方法
减小workspace_size参数
在yolov3.cfg中手动降低workspace_size数值(比如从默认值改为600或800),避免大内存分配操作触发缓冲区溢出。关闭动态尺寸调整
训练命令中添加-dont_resize参数,禁用随机调整输入尺寸的功能,减少内存波动带来的潜在问题。检查数据集完整性
遍历数据集,删除无法正常读取的损坏图片及对应标签文件,排除数据损坏导致的异常。降低batch_size
如果当前batch_size设置较大(比如64),尝试改为32或16,降低单步训练的内存负载。更新并重新编译Darknet
拉取AlexeyAB分支的最新代码重新编译,该分支持续修复bug,可能已解决此缓冲区溢出问题。核对CUDA与cuDNN版本兼容性
确保使用的CUDA、cuDNN版本与编译Darknet时的配置匹配,版本不兼容易引发内存管理异常。
内容的提问来源于stack exchange,提问作者Ahmed SALIHI
相关产品推荐
相关产品推荐

