num_workers = 4
解决方案:为您的 CPU “减负”
导致 CPU 内存耗尽的最主要原因有两个:批量大小(Batch Size) 和 数据加载的工作线程数(num_workers)。
方案一:大幅减小 num_workers - 最直接的解决方案
这是解决这个问题的首选方案。
-
在 PyCharm 中,打开您的 train.py 文件。
-
找到配置区的最下方,大约在第 229 行左右,您会看到这个参数:
Generated python
Use code with caution.Pythonnum_workers = 4 ```3. **这是什么意思?** 它表示您雇了 **4 个工人(子进程)**在后台同时为您准备数据。每个工人都需要消耗自己的一份内存。当 Batch Size 较大时,4 个工人同时开工,内存消耗就是 4 倍,很容易就爆掉了。
-
请将这个值大幅减小!
-
首先,请直接把它改成 num_workers = 0。
-
解释:设置为 0 意味着“不要雇工人了,我自己(主进程)来准备数据”。这会关闭多进程数据加载,虽然准备数据的速度可能会变慢,但它能从根本上解决多进程带来的额外内存消耗问题。
-
方案二:再次确认并减小批量大小 (Batch Size)
虽然您已经解决了 GPU 显存问题,但 Batch Size 同样也影响着 CPU 内存的消耗。一次处理的图片越多,在 CPU 端需要整理的数据量也越大。
-
请再次检查您的 Freeze_batch_size 和 Unfreeze_batch_size。
-
根据报错前的进度条 Batch size from DataLoader should be: 8,我们可以看到当前有效的批量大小是 8。
-
在 num_workers=0 的基础上,如果问题还存在,可以尝试将 Freeze_batch_size 和 Unfreeze_batch_size 都设置成一个更小的值,比如 4 或 2。