MMClassification 1.X版本在Google Colab运行崩溃问题求助
MMClassification 1.X在Colab崩溃的排查分析
先排查实现层面的问题
- 数据集加载逻辑不兼容:MMClassification 1.X对文件夹结构数据集的处理和0.X不一样,哪怕你设了
ann_file=None,也得确认data_root和data_prefix的路径完全正确,而且必须显式指定classes参数为你的30个类别——1.X不会像0.X那样自动从文件夹里推断类别数量,漏了这个很容易出问题。 - 模型输出维度不匹配:你改了输出节点到30类,得确认模型最后一层全连接层的
num_classes确实设成了30。1.X的模型构建API变了,比如head组件的参数传递方式和0.X不同,要是这里错了,张量计算维度不匹配,GPU上直接就崩了,CPU环境也可能因为内存异常挂掉。 - 代码/配置的API兼容性:1.X和0.X的API不兼容,比如数据预处理pipeline里的组件名称、参数格式可能变了。比如原来的
Resize可能改成了RandomResize,归一化的参数传递也有变化,用了0.X的写法在1.X里跑,很可能在加载数据时就触发崩溃。
再考虑Colab的资源限制
- GPU显存溢出:1.X默认的模型可能用了更重的backbone,或者默认开了更多数据增强,哪怕数据集一样,内存占用也比0.X高。Colab的GPU显存一般12GB左右,要是你的batch_size设得大,加上模型本身的占用,很容易OOM(内存不足)直接崩。试试把batch_size降到1或者2,再关掉同步BN这类占显存的组件。
- CPU内存不够:Colab的CPU内存大概12-16GB,要是数据集大,1.X的数据加载器预处理逻辑更复杂,内存占用会飙升,超过限制就被系统强制杀进程。可以把
num_workers改成0,避免多进程加载数据带来的额外内存开销。
实用排查步骤
- 定位崩溃触发阶段:在代码里加几个打印,比如数据加载完成、模型初始化完成、开始第一个batch训练前分别打日志,看是在哪一步崩的。模型初始化后就崩,大概率是维度不匹配;加载数据时崩,查路径和类别配置;训练第一个batch崩,优先查内存和维度。
- 用极小数据集测试:每个类别只拿1张图做测试子集,要是小数据集能跑,那就是资源不够;要是还崩,肯定是实现有问题。
- 逐行对比官方示例:找MMClassification 1.X里用文件夹加载数据的官方例子,把你的代码和配置跟官方的逐行比,重点看
dataset、model.head、data.pipeline这几块的参数差异。
内容的提问来源于stack exchange,提问作者lianjie99
相关产品推荐
相关产品推荐

