如何释放Segment-Anything在JupyterLab中占用的未释放内存?
Segment-Anything运行后CUDA内存无法释放的解决方法
1. 显式释放模型资源与CUDA缓存
你的代码仅释放了masks变量,但加载到GPU的SAM模型本身仍占用大量内存。需要显式删除模型实例并清空CUDA缓存:
修改代码末尾部分为:
plt.show() # 释放所有相关变量 del masks, sam, mask_generator # 强制垃圾回收 gc.collect() # 清空CUDA缓存 import torch torch.cuda.empty_cache()
2. 利用Jupyter魔法命令重置环境
在新的单元格中运行以下命令,强制清除所有变量并释放GPU内存:
%reset -f import gc import torch gc.collect() torch.cuda.empty_cache()
3. 减少模型内存占用
如果不需要最高精度,可以切换到更小的SAM模型:
- 将
sam_model_registry["default"]改为sam_model_registry["vit_b"]或sam_model_registry["vit_l"],对应的权重文件替换为sam_vit_b_01ec64.pth或sam_vit_l_0b3195.pth,内存占用会大幅降低。
另外,还可以调整SamAutomaticMaskGenerator的参数减少生成的掩码数量,比如:
mask_generator = SamAutomaticMaskGenerator( sam, points_per_side=32, # 降低该值减少采样点 pred_iou_thresh=0.8, # 提高阈值过滤低置信度掩码 stability_score_thresh=0.8 )
4. 重启Jupyter内核
如果上述方法都无效,直接重启JupyterLab的内核是最彻底的方式,能完全释放所有占用的GPU内存。
内容的提问来源于stack exchange,提问作者forestbat
相关产品推荐
相关产品推荐

