From cf497cf3a23130d0c8f506b9e749de7505599fde Mon Sep 17 00:00:00 2001 From: second_constantine Date: Mon, 20 Jul 2026 22:59:11 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20opt-out=20=D0=B8=D0=B7=20maintenance=20m?= =?UTF-8?q?ode=20file-store=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=B1=D1=8D=D0=BA=D0=B5=D0=BD=D0=B4=D0=B0?= =?UTF-8?q?=20(MLFLOW=5FALLOW=5FFILE=5FSTORE=3Dtrue)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 1 + start_ui.sh | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 4fb9a2b..81d37ce 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -142,6 +142,7 @@ mlflow run . -P epochs=10 -P batch_size=256 -P lr=0.001 --entry-point gpu - `train_gpu.py` передаёт `input_example` → сигнатура авто-infer'ится. - `autolog_demo.py` намеренно отключает сигнатуры (`log_model_signatures=False`) как демо опций autolog — там warning ожидаем. - **INFO про переменные окружения** (`OPENAI_API_KEY` и т.п.) при логировании подавлено через `MLFLOW_RECORD_ENV_VARS_IN_MODEL_LOGGING=false` в скриптах, логирующих модели. +- **File-store как СЕРВЕРНЫЙ бэкенд в maintenance mode (MLflow 3.x)**: `mlflow server --backend-store-uri file://...` по умолчанию падает с `MlflowException ... filesystem tracking backend is in maintenance mode`. Официальный opt-out — `export MLFLOW_ALLOW_FILE_STORE=true` (уже выставлено в `start_ui.sh` перед file-блоком). Это касается ТОЛЬКО сервера; клиентский file store (как пишут скрипты в `./mlruns`) работает без opt-out. Альтернатива без opt-out — SQLite-бэкенд (закомментированный блок в `start_ui.sh`), но тогда скрипты должны логировать на сервер через `mlflow.set_tracking_uri('http://localhost:5555')`. - **`input_example` для `mlflow.pytorch.log_model` — только numpy**, не `torch.Tensor`: MLflow 3.x валидирует пример входа и падает с `MlflowException ... but got ''`. В `train_gpu.py` передаётся `np.random.rand(1,1,28,28).astype(np.float32)`. Аналогично для других flavor'ов — пример должен быть DataFrame/ndarray/dict/list/скаляр. - **urllib3 `NotOpenSSLWarning`** на macOS (системный `ssl` собран с LibreSSL 2.8.3, urllib3 v2 просит OpenSSL 1.1.1+) — стороннее шумовое предупреждение, к проекту отношения не имеет; не подавляем (чтобы не прятать реальные предупреждения). - **«Эксперимент не виден в UI» (главная причина)**: скрипты по умолчанию пишут в локальный file store `./mlruns`, а `start_ui.sh` раньше поднимал сервер на **SQLite** (`mlflow.db`) — два разных хранилища, UI ничего не показывал. Теперь `start_ui.sh` использует `--backend-store-uri file://${PWD}/mlruns` — **то же хранилище, что и скрипты**, поэтому всё видно без настройки tracking URI. Альтернатива (SQLite-бэкенд) оставлена закомментированной в `start_ui.sh`; при её включении в скриптах нужно задать `mlflow.set_tracking_uri('http://localhost:5555')` (или `MLFLOW_TRACKING_URI`). diff --git a/start_ui.sh b/start_ui.sh index 0033470..654afca 100755 --- a/start_ui.sh +++ b/start_ui.sh @@ -7,9 +7,14 @@ # пишут по умолчанию). Поэтому UI видит все эксперименты/запуски # без доп. настройки tracking URI в скриптах. # -# Альтернатива — SQLite-бэкенд (нужен, только если хотите SQL-запросы -# к запускам). Тогда раскомментируйте блок SQLITE ниже и закомментируйте -# FILE, а в скриптах задайте mlflow.set_tracking_uri("http://localhost:5555") +# ВАЖНО: file-store как СЕРВЕРНЫЙ бэкенд в новых MLflow (3.x) переведён в +# maintenance mode и по умолчанию запрещён. Официальный opt-out — +# MLFLOW_ALLOW_FILE_STORE=true (его и выставляем ниже). Это касается только +# `mlflow server`; клиентский file store (как пишут скрипты) работает и без него. +# +# Альтернатива — SQLite-бэкенд (recommended MLflow, без opt-out). Тогда +# раскомментируйте блок SQLITE ниже и закомментируйте FILE, а в скриптах +# задайте mlflow.set_tracking_uri("http://localhost:5555") # (или export MLFLOW_TRACKING_URI=http://localhost:5555). # ============================================================ set -e @@ -26,6 +31,8 @@ echo " Нажмите Ctrl+C для остановки" echo "" # ─── FILE backend (по умолчанию — единое хранилище со скриптами) ─── +# MLFLOW_ALLOW_FILE_STORE=true — opt-out из maintenance mode file-store бэкенда. +export MLFLOW_ALLOW_FILE_STORE=true mlflow server \ --backend-store-uri "file://${PWD}/mlruns" \ --default-artifact-root "file://${PWD}/artifacts" \