diff --git a/.env.example b/.env.example index f3cac27e..7faf6e13 100644 --- a/.env.example +++ b/.env.example @@ -60,6 +60,9 @@ POLYWEATHER_EMOS_AUTO_MIN_SAMPLES=50 POLYWEATHER_EMOS_AUTO_MAX_DELTA_CRPS=0 POLYWEATHER_EMOS_AUTO_MAX_DELTA_MAE=0.05 POLYWEATHER_EMOS_AUTO_MIN_DELTA_BUCKET_HIT_RATE=-0.05 +# Optional: set this to a writable runtime path if you want auto retrain to +# promote new EMOS parameters without rebuilding the image. +# POLYWEATHER_PROBABILITY_CALIBRATION_FILE=/var/lib/polyweather/probability_calibration/default.json POLYWEATHER_LGBM_ENABLED=false POLYWEATHER_LGBM_MODEL_PATH=/app/artifacts/models/lgbm_daily_high.txt POLYWEATHER_LGBM_SCHEMA_PATH=/app/artifacts/models/lgbm_daily_high_schema.json diff --git a/docs/EMOS_TRAINING_REPORT_ZH.md b/docs/EMOS_TRAINING_REPORT_ZH.md index 81367248..c247b91b 100644 --- a/docs/EMOS_TRAINING_REPORT_ZH.md +++ b/docs/EMOS_TRAINING_REPORT_ZH.md @@ -117,7 +117,13 @@ python scripts\auto_retrain_probability_calibration.py 候选产物默认写入: ```text -artifacts/probability_calibration/candidates// +/var/lib/polyweather/probability_calibration/candidates// +``` + +最新自动训练报告默认写入: + +```text +/var/lib/polyweather/probability_calibration/auto_retrain_report.json ``` 允许门禁通过后自动发布: @@ -146,12 +152,31 @@ Docker 手动触发: docker compose exec -T polyweather_web python scripts/auto_retrain_probability_calibration.py ``` +查看最新报告: + +```text +docker compose exec -T polyweather_web cat /var/lib/polyweather/probability_calibration/auto_retrain_report.json +``` + Docker 允许门禁发布: ```text docker compose exec -T polyweather_web python scripts/auto_retrain_probability_calibration.py --promote-if-passed --run-tests ``` +如果希望自动发布不需要重建镜像,需要在 `.env` 中指定可写参数文件: + +```text +POLYWEATHER_PROBABILITY_CALIBRATION_FILE=/var/lib/polyweather/probability_calibration/default.json +``` + +首次启用该路径前,先用当前镜像内置参数初始化一次: + +```text +docker compose exec -T polyweather_web mkdir -p /var/lib/polyweather/probability_calibration +docker compose exec -T polyweather_web cp /app/artifacts/probability_calibration/default.json /var/lib/polyweather/probability_calibration/default.json +``` + 建议后续挂到宿主机 `cron` 或 systemd timer: ```text diff --git a/scripts/auto_retrain_probability_calibration.py b/scripts/auto_retrain_probability_calibration.py index df273365..be8b9ebe 100644 --- a/scripts/auto_retrain_probability_calibration.py +++ b/scripts/auto_retrain_probability_calibration.py @@ -15,8 +15,20 @@ from src.analysis.probability_calibration import DEFAULT_CALIBRATION_FILE # noq ARTIFACT_DIR = os.path.join(PROJECT_ROOT, "artifacts", "probability_calibration") -DEFAULT_CANDIDATE_ROOT = os.path.join(ARTIFACT_DIR, "candidates") -DEFAULT_DECISION_REPORT = os.path.join(ARTIFACT_DIR, "auto_retrain_report.json") + + +def _runtime_calibration_dir() -> str: + runtime_dir = str(os.getenv("POLYWEATHER_RUNTIME_DATA_DIR") or "").strip() + if runtime_dir: + return os.path.join(runtime_dir, "probability_calibration") + return ARTIFACT_DIR + + +DEFAULT_CANDIDATE_ROOT = os.path.join(_runtime_calibration_dir(), "candidates") +DEFAULT_DECISION_REPORT = os.path.join( + _runtime_calibration_dir(), + "auto_retrain_report.json", +) def _sf(value: Any) -> Optional[float]: