背景
随着最近视觉大模型的爆火,openmmlab的playground对SAM进行了各种应用类型的研究。
在对mmdet_sam/detector_sam_demo.py进行了改造,以批量推理的时候,遇到了内存增长的问题,128g的内存生生给卡爆炸了。
解决过程
- 利用tracemalloc分析原因,具体参照链接
分析到原因在matplotlib引起的内存泄露,查询资料发现这是一个共性问题,解决方案是在plt.savefig()
之后,进行plt.clf()
,保险起见,又导入了gc
库进行内存垃圾清理。
import gc
...
def draw_and_save(image, pred_dict, save_path, random_color=True, show_label=True):
plt.figure(figsize=(10, 10))
plt.imshow(image)
...
plt.axis("off")
plt.savefig(save_path)
# del cache
plt.clf()
plt.close()
gc.collect()