From 1684fddd7f880788adffe2a63fa6d2c4318d101e Mon Sep 17 00:00:00 2001 From: Shaun Zhou Date: Tue, 22 Sep 2026 13:36:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(scripts):=20=E9=87=8D=E8=AE=AD=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E5=8F=AF=E8=B7=B3=E8=BF=87=E9=87=8D=E5=90=AF=20ML=20b?= =?UTF-8?q?ackend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 手动跑重训时会无条件启动后端——纯手动路线并不想要它常驻占显存。 RESTART_BACKEND=0 可跳过;被后端调用时保持默认 1(权重只在启动时加载一次, 不重启就换不了模型)。 Co-Authored-By: Claude Opus 5 --- scripts/retrain_from_label_studio.sh | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/scripts/retrain_from_label_studio.sh b/scripts/retrain_from_label_studio.sh index 2e3edbb..7046253 100755 --- a/scripts/retrain_from_label_studio.sh +++ b/scripts/retrain_from_label_studio.sh @@ -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"