在AWS p2.xlarge实例用Keras训练Mask RCNN时出现CUDA报错求助
解决Mask RCNN训练中出现的CUDA Launch Config错误
你遇到的这个CUDA启动错误,是TensorFlow在尝试运行GPU核函数时发现没有可处理的工作元素导致的,在Mask RCNN训练场景下,通常和batch size设置、输入数据质量或者显存配置有关,我给你几个针对性的解决方案:
1. 优先调整Batch Size
AWS p2.xlarge搭载的Tesla K80显存是12GB,Mask RCNN默认的batch size(通常为2)可能会让显存吃紧,甚至触发这种空张量计算错误。你可以:
- 打开训练脚本的配置类,把
IMAGES_PER_GPU和BATCH_SIZE都设为1:
让单GPU每次只处理一张图,既能大幅降低显存压力,也能避免因batch内数据异常导致的空计算问题。class CustomConfig(Config): # ... 其他配置项 ... IMAGES_PER_GPU = 1 BATCH_SIZE = 1
2. 检查输入数据与Anchor配置
这个错误也常出现在输入图像尺寸过小、标注数据异常的场景下:
- 排查数据集样本:确保没有尺寸远小于预设Anchor的图像(Mask RCNN默认最小Anchor为32x32),如果存在这类样本,要么过滤掉,要么在Config里设置
IMAGE_MIN_DIM=512,统一将图像resize到合理尺寸 - 检查标注的bbox:有没有标注框超出图像范围、或者完全没有标注的样本?这类无效样本会让模型计算时产生空的ROI张量,直接触发错误,建议过滤掉这类数据
- 适配Anchor参数:如果你的数据集目标尺寸和默认Anchor差异很大,可以修改
RPN_ANCHOR_SCALES,比如改成(16, 32, 64, 128, 256)来适配更小的目标
3. 优化GPU显存使用
除了调小batch size,还可以让TensorFlow动态分配显存,避免一次性占满显存导致的异常:
在训练脚本最开头添加这段代码:
import tensorflow as tf from keras.backend.tensorflow_backend import set_session tf_config = tf.ConfigProto() tf_config.gpu_options.allow_growth = True # 开启动态显存分配 set_session(tf.Session(config=tf_config))
同时可以用nvidia-smi命令实时查看显存占用,确保没有其他无关进程占用GPU资源。
4. 适配TensorFlow与Keras版本
你遇到的这个错误在TensorFlow 1.8.x版本中比较常见,如果你正在使用这个版本,可以尝试降级到TensorFlow 1.7.0或者升级到1.13.x,同时要确保Keras版本和TensorFlow兼容(比如Keras 2.2.4对应TensorFlow 1.13.x)。
你可以先试试调整batch size和检查数据,这两个是最常见的解决办法,一般都能快速解决这个问题。
内容的提问来源于stack exchange,提问作者soling
相关产品推荐
相关产品推荐

