Ship v0.1.1–v0.1.5: first-live-run fixes and dashboard viewer
- v0.1.1: config persistence — FileHelper paths made absolute (/media/startos/volumes/main/...); relative paths resolved into the JS runtime's ephemeral cwd so action saves never reached /data - v0.1.2: preJobStopContainers (Configure Grading) — docker-stop resident vLLM containers on the head Spark at job start, no auto-restart - v0.1.3: preflight auth (LiteLLM master_key gates /models), poll-until-loaded, crash fast-fail (restarting counts as dead) - v0.1.4: HF_HUB_OFFLINE/TRANSFORMERS_OFFLINE in airgapped serving (--internal network has no DNS); grader _post timeout 600→1800s for ~3.6 tok/s GB10 generation - v0.1.5: dashboard viewer survives the periodic background refresh; download buttons for deck reports, deck JSON, and SCORECARD.md - .gitignore: .startos/ build workspace, start-technologies/ Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
1d1074b625
commit
91212322c1
@@ -65,6 +65,22 @@ def remove_network(cfg: dict, log) -> None:
|
||||
sc.run(head, f"docker network rm {shlex.quote(net_name(cfg))} 2>/dev/null; true", timeout=30)
|
||||
|
||||
|
||||
# ---------------------------------------------------------- resident models
|
||||
def clear_resident_containers(cfg: dict, log) -> None:
|
||||
"""Stop the user-listed containers on the head Spark so a grading job gets
|
||||
the GPU to itself (both Sparks normally run an always-on 31B vLLM).
|
||||
|
||||
Deliberately NOT restarted after the job: whatever owns them is responsible
|
||||
for bringing them back (the Gazette's Fleet job reloads its own models)."""
|
||||
names = (cfg.get("preJobStopContainers") or "").replace(",", " ").split()
|
||||
if not names:
|
||||
return
|
||||
head = sc.head(cfg)
|
||||
quoted = " ".join(shlex.quote(n) for n in names)
|
||||
log(f"[serving] freeing the GPU on {head.host}: docker stop {' '.join(names)}")
|
||||
sc.run(head, f"docker stop {quoted} 2>/dev/null; true", timeout=180)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------ vLLM
|
||||
def _vllm_run(cfg: dict, model: dict, hf_token: str | None) -> tuple[sc.Spark, str]:
|
||||
"""Build the docker run command for one model on its assigned Spark."""
|
||||
@@ -75,6 +91,10 @@ def _vllm_run(cfg: dict, model: dict, hf_token: str | None) -> tuple[sc.Spark, s
|
||||
parser = cfg.get("toolCallParser", "hermes")
|
||||
tools = (f"--enable-auto-tool-choice --tool-call-parser {shlex.quote(parser)} " if parser else "")
|
||||
env = f"-e HF_TOKEN={shlex.quote(hf_token)} " if hf_token else ""
|
||||
if cfg.get("networkMode") == "airgapped":
|
||||
# The --internal network has no DNS/egress; without offline mode the HF
|
||||
# hub client dies on name resolution even with the model fully cached.
|
||||
env += "-e HF_HUB_OFFLINE=1 -e TRANSFORMERS_OFFLINE=1 -e VLLM_NO_USAGE_STATS=1 -e DO_NOT_TRACK=1 "
|
||||
cache = _hf_cache(cfg)
|
||||
name = _vllm_name(alias)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user