检查点自动化清理需先精准判定过期或冗余再安全删除:DeepSpeed依latest锚点保留最优及前N代,smolvm按窗口保留最近5个并跳过keep标记,备份类按修改时间留最新5个;脚本须带路径权限校验、--dry-run预览、失败即停、操作留痕,并用crontab或CronJob定时执行。
检查点管理的自动化清理,核心是让脚本按规则识别“该删的”,而不是盲目清空。不同场景(deepspeed、smolvm、数据库备份等)虽技术细节不同,但逻辑共通:先精准判定过期或冗余,再安全执行删除,全程可验证、可回溯。
明确哪些检查点属于“过期”或“无用”
不能只看文件名或时间戳,必须结合业务语义判断:
-
DeepSpeed 类训练检查点:以
latest文件为锚点,保留它指向的最优目录及其前 N 个历史代(如 global_step100、200),其余非引用目录视为冗余 -
smolvm 检查点:依赖
--branchable启动的机器才能生成可恢复检查点;定期快照后,应按保留窗口(如最近 5 个)清理旧代,同时跳过手动标记为keep的分支点 -
通用备份类检查点(如 tar.gz、SQL dump):优先用
find -mtime +7清理 7 天前文件;更稳妥则按修改时间排序,保留最新 5 个:find /path -name "*.tar.gz" -printf '%T@ %p\n' | sort -n | head -n -5 | cut -d' ' -f2- | xargs -r rm
编写轻量、带防护的清理脚本
脚本不追求功能全,而要易读、易调、失败即停:
在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。
- 开头检查关键路径是否存在、权限是否足够,缺失则
exit 1并写日志 - 所有删除操作前加
--dry-run开关,默认只打印将删项(如echo "[DRY] rm -rf $ckpt_dir"),首次运行必须人工核对 - 真正执行时,用
rm -rf或对应 API 调用,并捕获返回值;失败立即中断,不继续遍历 - 每轮清理后记录数量、耗时、磁盘变化(如
df -h),写入统一日志文件,便于监控突增或归零异常
用系统级定时器驱动,别依赖应用内调度
避免用 Python 的 threading.Timer 或框架自带 scheduler——进程重启或异常退出会导致任务丢失:
-
Linux 环境:用
crontab -e添加稳定任务,例如每天凌晨 2:15 执行:15 2 * * * /usr/bin/python3 /opt/clean_checkpoints.py --log-dir /var/log/ckpt-clean >> /var/log/ckpt-clean.log 2>&1 -
Kubernetes 环境:用 CronJob,镜像内置脚本,通过
concurrencyPolicy: Forbid防止重叠执行,失败自动重试并触发告警 - 频率建议 12–24 小时一次;高频(如每分钟)既无必要,又可能干扰正常 I/O
上线前必做三件事:验证、隔离、留痕
清理不可逆,防护层缺一不可:
-
预检验证:在测试环境跑
--dry-run,确认输出的待删列表符合预期(比如没误包含 latest 指向的目录) -
白名单隔离:把 CI 基础镜像、标准测试模板、人工冻结的调试检查点 ID 或路径写入
keep_list.txt,脚本加载后跳过匹配项 - 操作留痕:每条删除记录含时间、检查点路径、判定依据(如 “not referenced by latest”)、执行节点(多机环境),日志保留至少 7 天

















