最近在调一个UNet做医学图像分割,输入patch是256x256,batch size设的8,显卡是3090(24G)。刚开始训练loss下降挺正常,结果跑到第20个epoch左右,突然报CUDA out of memory。但我用nvidia-smi看显存占用才60%左右,而且显存是慢慢涨上去的,不是一下子爆的。我怀疑是不是PyTorch的缓存机制在搞鬼,还是有内存碎片化的问题?试过torch.cuda.empty_cache()也没啥用。另外,我用了混合精度(autocast),但感觉反而更吃显存了?有没有大佬遇到过类似情况,求指点排查方向,或者有没有什么工具能可视化显存分配?谢谢了。