#!/usr/bin/env python3 """镜像入口:镜像不带权重,启动前从 Hugging Face 拉取模型,然后 exec uvicorn。 - LAYA_MODEL_VERSION:HF tag/分支(默认 v2) - LAYA_HF_ENDPOINT:模型源(默认 https://huggingface.co,可设 https://hf-mirror.com) - LAYA_PRELOAD:显式预载精度,如 fp8,int4 - 未设 LAYA_PRELOAD 且本地无模型时,自动下载 LAYA_MODEL_PRECISION(默认 fp8); LAYA_AUTO_DOWNLOAD=0 可关闭自动下载(改为管理员经 /internal/models/catalog 手动下载) """ import os import time from server.model_manager import ModelManager def main(): mm = ModelManager(os.environ.get("LAYA_MODEL_DIR", "/data/models/ad-clf"), os.environ.get("LAYA_DEVICE") or None) preload = [p.strip() for p in os.environ.get("LAYA_PRELOAD", "").split(",") if p.strip()] if not preload and not mm.installed() and os.environ.get("LAYA_AUTO_DOWNLOAD", "1") != "0": preload = [os.environ.get("LAYA_MODEL_PRECISION", "fp8").strip() or "fp8"] for p in preload: r = mm.download(p) print(f"[entrypoint] preload {p}: {r}", flush=True) if not r.get("accepted"): continue while mm.status()["state"] == "downloading": time.sleep(1) st = mm.status() print(f"[entrypoint] preload {p} -> {st['state']}", flush=True) if st.get("error"): print(f"[entrypoint] error: {st['error']}", flush=True) os.execvp("uvicorn", ["uvicorn", "server.main:app", "--host", "0.0.0.0", "--port", "8080", "--workers", "1", "--proxy-headers"]) if __name__ == "__main__": main()