feat(scripts): 重训脚本可跳过重启 ML backend

手动跑重训时会无条件启动后端——纯手动路线并不想要它常驻占显存。
RESTART_BACKEND=0 可跳过;被后端调用时保持默认 1(权重只在启动时加载一次,
不重启就换不了模型)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Shaun Zhou
2026-09-22 13:36:25 +08:00
co-authored by Claude Opus 5
parent 3c964abaa2
commit 1684fddd7f
+17 -7
View File
@@ -26,6 +26,10 @@ export LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT="${LABEL_STUDIO_LOCAL_FILES_DOCUME
# 训练参数的额外覆盖,冒烟测试时用,如 RETRAIN_EXTRA_SET="train.epochs=1 train.fraction=0.02"
EXTRA_SET="${RETRAIN_EXTRA_SET:-}"
# 训完要不要重启 ML backend。被后端调用时必须重启(权重只在启动时加载一次);
# 纯手动路线不跑后端的话设 0,免得凭空起一个常驻进程占显存
RESTART_BACKEND="${RESTART_BACKEND:-1}"
echo "===== [$(date '+%F %T')] 开始重训(项目 $PROJECT)====="
echo "--- 1/4 导出标注 -> $EXPORT"
@@ -41,14 +45,20 @@ echo "--- 3/4 训练 -> $WORK_DIR"
--work-dir "$WORK_DIR" \
--set data.yaml="$DATASET/data.yaml" $EXTRA_SET
echo "--- 4/4 切换权重并重启 ML backend"
# 指向最新权重的稳定软链接:启动脚本读它,于是换模型不用改任何脚本
echo "--- 4/4 切换权重"
# 指向最新权重的稳定软链接:启动脚本与 push_predictions 都读它,换模型不用改任何脚本
ln -sfn "$WORK_DIR/weights/best.pt" "$REPO/runs/detect/current.pt"
# 必须显式传 YOLO_WEIGHTS 并清掉继承来的变量:本脚本是旧后端的子进程,
# 它环境里已经 export 了 YOLO_WEIGHTS(旧权重)和可能的 RETRAIN_EXTRA_SET(冒烟参数),
# 不清掉的话新后端会继续用旧模型、下次训练也会沿用冒烟参数
env -u RETRAIN_EXTRA_SET YOLO_WEIGHTS="$REPO/runs/detect/current.pt" \
bash "$REPO/scripts/start_ml_backend.sh"
if [ "$RESTART_BACKEND" = "1" ]; then
echo "--- 重启 ML backend"
# 必须显式传 YOLO_WEIGHTS 并清掉继承来的变量:本脚本可能是旧后端的子进程,
# 它环境里已经 export 了 YOLO_WEIGHTS(旧权重)和可能的 RETRAIN_EXTRA_SET(冒烟参数),
# 不清掉的话新后端会继续用旧模型、下次训练也会沿用冒烟参数
env -u RETRAIN_EXTRA_SET YOLO_WEIGHTS="$REPO/runs/detect/current.pt" \
bash "$REPO/scripts/start_ml_backend.sh"
else
echo "--- 跳过重启 ML backend(RESTART_BACKEND=0)"
fi
echo "===== [$(date '+%F %T')] 重训完成:$WORK_DIR ====="
echo "指标见 $WORK_DIR/metrics.json,曲线见 $WORK_DIR/results.png"