为什么停止TensorFlow目标检测脚本后内存占用仍未下降?
TensorFlow 2.6 目标检测训练脚本停止后内存残留解决方案
问题描述
基于TensorFlow 2.6官方目标检测API开展自定义数据集训练,终止model_main_tf2.py运行实例后,同名旧进程仍持续占用大量内存,重启新训练实例前需要先清理残留进程,内存占用情况如下图:
解决方法
临时清理方案(立即释放内存)
- 执行命令查询所有残留
model_main_tf2进程PID:ps aux | grep model_main_tf2 - 执行强制杀进程命令释放内存:
kill -9 <查到的进程PID> - 批量清理所有同名进程可直接执行:
pkill -9 model_main_tf2
永久修复方案(避免后续出现残留)
启动参数优化
启动训练脚本时添加内存动态分配参数,避免TensorFlow预占全部内存,同时降低进程卡住概率:TF_FORCE_GPU_ALLOW_GROWTH=true python model_main_tf2.py <你的原有训练参数>源码修改补全退出逻辑
在model_main_tf2.py文件开头添加信号处理逻辑,让脚本收到终止信号时主动释放资源退出:
import signal import sys def graceful_exit(sig, frame): sys.exit(0) # 注册Ctrl+C和进程终止信号的处理函数 signal.signal(signal.SIGINT, graceful_exit) signal.signal(signal.SIGTERM, graceful_exit)
- 版本升级修复
若允许调整依赖版本,可升级到TensorFlow 2.10+,搭配对应版本的官方目标检测API,该版本已修复model_main_tf2进程残留的已知问题。
内容的提问来源于stack exchange,提问作者Sajal Randhar
相关产品推荐
相关产品推荐

