Files
2026-07-13 13:22:34 +08:00

58 lines
1.5 KiB
Python

import logging
import os
import subprocess
import sys
from pathlib import Path
import mlflow.server
from mlflow.demo import generate_all_demos
logging.basicConfig(level=logging.INFO)
_logger = logging.getLogger(__name__)
def setup():
# Extract UI build assets into the mlflow package's expected location
tar_path = Path(__file__).parent.resolve() / "build.tar.gz"
target_dir = Path(mlflow.server.__file__).parent / "js"
target_dir.mkdir(parents=True, exist_ok=True)
_logger.info("Extracting UI assets to %s", target_dir)
subprocess.check_call(["tar", "xzf", tar_path, "-C", target_dir])
# Generate demo data. Always refresh so the preview app reflects the latest
# demo content (e.g. new trace types) even if the SQLite database persisted
# from a previous deploy with stale demo data.
os.environ["MLFLOW_TRACKING_URI"] = "sqlite:///mlflow.db"
_logger.info("Generating demo data...")
generate_all_demos(refresh=True)
_logger.info("Demo data generated.")
def main():
setup()
cmd = [
sys.executable,
"-m",
"mlflow",
"server",
"--backend-store-uri",
"sqlite:///mlflow.db",
"--default-artifact-root",
"./mlartifacts",
"--serve-artifacts",
"--host",
"0.0.0.0",
"--port",
"8000",
"--workers",
"1",
]
_logger.info("Starting MLflow server: %s", " ".join(cmd))
os.execvp(cmd[0], cmd)
if __name__ == "__main__":
main()