Files
club-3090/scripts/tests/test-profiles-compat.sh
T
noonghunnaandClaude Opus 4.8 af1e909b04 Wire DiffusionGemma into the catalog via stock-nightly sideload
Make `vllm/diffusiongemma-dual` usable through setup/pull/switch/launch, and
pivot the engine delivery from a baked local image to a SIDELOADED overlay on a
stock, pullable nightly (so non-rig users can actually run it).

Delivery (no baked image):
- Engine `vllm-diffusion-gemma` pins a STOCK `vllm/vllm-openai:nightly-2c9c07c8…`
  and sideloads the vendored overlay at boot via install_script (entrypoint).
- `models/diffusiongemma-26b-a4b/vllm/patches/dgemma-overlay/` is the vendored
  payload: the FULL stock-vs-`dgemma`-branch `vllm/` delta (123 .py) — a lean
  PR-#45163-only overlay version-skews (`build_attn_metadata() got an unexpected
  keyword argument 'causal'`: load-bearing dgemma changes live outside the PR
  diff) — plus Codex's 3 fixes (marlin K-pad ×2 + diffusion_gemma TP-vocab/dtype).
  install.sh cp's it over the installed vllm pkg, fail-loud arch assert.
- base.yml rewired: stock image + overlay mount + install_script entrypoint;
  drops the 3 standalone marlin-k-pad mounts (folded into the overlay) and the
  baked-image dependency. The dgemma-pr45163 Dockerfile is now the overlay-
  regeneration helper, not the runtime engine.

Catalog wiring:
- Model profile `diffusiongemma-26b-a4b` (gemma4-swa-moe backbone + block
  diffusion; text; valid_tp [1,2]; kv_calc_supported=false → kvcalc_key SKIP).
- Engine profile `vllm-diffusion-gemma` (stock install + vendored_overlays).
- compose_registry `vllm/diffusiongemma-dual` (port 8042, status upstream-gated).
  NO DEFAULTS row — upstream-gated is non-functional, reachable only by slug.
- patches.yml `dgemma-vllm45163-sideload` (install_script + drift_guard) and the
  diagnose_profile_cli overlay-path hint.
- docs/UPSTREAM.md row for vllm#45163 (re-pin + drop triggers).

Output-length fix carried in base.yml: lift the model's 256-tok max_new_tokens
default to 16384 via --override-generation-config (keeps the diffusion denoising
params; fixes OWUI truncation + next-turn echo).

Tests: bump the count fixtures for +1 model / +1 engine / +1 compose / +1 registry
entry (test-profiles-compat 6→7 models, 11→12 engines; test-compose-registry-disk
44→45 registry, 45→46 disk). Full gate green except test-compose-registry-disk
local-only redness from untracked nex-n2-mini WIP in the shared tree (CI-clean
validated green: tracked-only disk=46, registry=45, disk-only set all-allowed).

Validated live on 2x RTX 3090: stock nightly + sideloaded overlay boots, serves
coherent output, 262K, via `docker compose -f base.yml up` (the switch/launch path).
Upstream-gated until #45163 merges into a pinnable engine.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-11 04:00:30 +00:00

439 lines
19 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
cd "$ROOT_DIR"
export PYTHONPATH="$ROOT_DIR${PYTHONPATH:+:$PYTHONPATH}"
run_test() {
local name="$1"
local tmp
tmp="$(mktemp)"
cat > "$tmp"
if python3 "$tmp"; then
echo "PASS: $name"
rm -f "$tmp"
else
echo "FAIL: $name"
rm -f "$tmp"
exit 1
fi
}
run_test "load_profiles parses all profile groups" <<'PY'
from scripts.lib.profiles.compat import load_profiles
p = load_profiles()
assert len(p.hardware) == 9
assert len(p.models) == 7
assert len(p.workloads) == 5
assert len(p.engines) == 12
assert len(p.drafters) == 9
assert len(p.calibration) == 5
PY
run_test "fits() happy path: Qwen dual on 2x3090" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits(
hardware=[p.hardware["rtx-3090"], p.hardware["rtx-3090"]],
model=p.models["qwen3.6-27b"],
workload=p.workloads["long-ctx-single"],
engine=p.engines["vllm-nightly-mtp"],
drafter=p.drafters["qwen-mtp-builtin"],
tp=2,
pp=1,
project_vram=False,
)
assert r.valid, r.reasons
assert r.recommended_kv_format == "turboquant_3bit_nc"
assert r.diagnostics["constraints_skipped"] == ["C12"]
PY
run_test "topology: single card classified" <<'PY'
from scripts.lib.profiles.compat import load_profiles, classify_hardware_topology, TopologyClass
p = load_profiles()
r = classify_hardware_topology([p.hardware["rtx-3090"]])
assert r == TopologyClass.SINGLE_CARD
PY
run_test "topology: 2x3090 classified homogeneous" <<'PY'
from scripts.lib.profiles.compat import load_profiles, classify_hardware_topology, TopologyClass
p = load_profiles()
r = classify_hardware_topology([p.hardware["rtx-3090"], p.hardware["rtx-3090"]])
assert r == TopologyClass.HOMOGENEOUS
PY
run_test "topology: 3090+4090 classified compute-mismatched" <<'PY'
from scripts.lib.profiles.compat import load_profiles, classify_hardware_topology, TopologyClass
p = load_profiles()
r = classify_hardware_topology([p.hardware["rtx-3090"], p.hardware["rtx-4090"]])
assert r == TopologyClass.VRAM_MATCHED_COMPUTE_MISMATCHED
PY
run_test "topology: 3090+3060 classified VRAM-mismatched" <<'PY'
from scripts.lib.profiles.compat import load_profiles, classify_hardware_topology, TopologyClass
p = load_profiles()
r = classify_hardware_topology([p.hardware["rtx-3090"], p.hardware["rtx-3060-12gb"]])
assert r == TopologyClass.VRAM_MISMATCHED
PY
run_test "topology: VRAM cluster wins over mixed compute" <<'PY'
from scripts.lib.profiles.compat import load_profiles, classify_hardware_topology, TopologyClass
p = load_profiles()
r = classify_hardware_topology([p.hardware["rtx-3090"], p.hardware["rtx-3060-12gb"], p.hardware["rtx-4090"]])
assert r == TopologyClass.VRAM_MISMATCHED
PY
run_test "C16 topology advisory emits note for compute mismatch" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits, TopologyClass
p = load_profiles()
r = fits(
hardware=[p.hardware["rtx-3090"], p.hardware["rtx-4090"]],
model=p.models["qwen3.6-27b"],
workload=p.workloads["long-ctx-single"],
engine=p.engines["vllm-nightly-mtp"],
drafter=p.drafters["qwen-mtp-builtin"],
tp=2,
pp=1,
project_vram=False,
)
assert r.topology_class == TopologyClass.VRAM_MATCHED_COMPUTE_MISMATCHED
assert "C16" in r.diagnostics["constraints_passed"]
assert any("C16" in n and "vram_matched_compute_mismatched" in n for n in r.notes), r.notes
PY
run_test "C16 topology advisory is silent for homogeneous GPUs" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits, TopologyClass
p = load_profiles()
r = fits(
hardware=[p.hardware["rtx-3090"], p.hardware["rtx-3090"]],
model=p.models["qwen3.6-27b"],
workload=p.workloads["long-ctx-single"],
engine=p.engines["vllm-nightly-mtp"],
drafter=p.drafters["qwen-mtp-builtin"],
tp=2,
pp=1,
project_vram=False,
)
assert r.topology_class == TopologyClass.HOMOGENEOUS
assert "C16" in r.diagnostics["constraints_passed"]
assert not any("C16" in n for n in r.notes), r.notes
PY
run_test "C1 card count: world size mismatch rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-nightly-mtp"], tp=2, project_vram=False)
assert not r.valid
assert any(reason.startswith("C1:") for reason in r.reasons), r.reasons
PY
run_test "C2 head divisibility: invalid TP rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
hw = [p.hardware["h100-80gb"]] * 8
r = fits(hw, p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-nightly-mtp"], tp=8, project_vram=False)
assert not r.valid
assert any(reason.startswith("C2:") for reason in r.reasons), r.reasons
PY
run_test "C3 SM floor: low-SM card rejected" <<'PY'
from dataclasses import replace
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
bad_hw = replace(p.hardware["rtx-3090"], id="gtx-1080", sm=6.1)
r = fits([bad_hw], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-nightly-mtp"], kv_format="fp8_e5m2", tp=1, project_vram=False)
assert not r.valid
assert any(reason.startswith("C3:") for reason in r.reasons), r.reasons
PY
run_test "C4 engine KV support: llama.cpp rejects bf16 KV" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["llama-cpp-local"], kv_format="bf16", weights_variant="gguf", tp=1, project_vram=False)
assert not r.valid
assert any(reason.startswith("C4:") for reason in r.reasons), r.reasons
PY
run_test "C5 hardware KV support: Ampere rejects fp8_e4m3" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-nightly-mtp"], kv_format="fp8_e4m3", tp=1, project_vram=False)
assert not r.valid
assert any(reason.startswith("C5:") for reason in r.reasons), r.reasons
PY
run_test "C6 Genesis one-way: TQ3 KV on non-Genesis engine rejected (via C15)" <<'PY'
# Under the TQ3-only Genesis policy, no model declares requires_genesis=true
# (so C6 has no current model-level trigger). Genesis is enforced at the
# *feature* level via C15: requesting turboquant_3bit_nc on an engine that
# doesn't expose it (e.g. vllm-stable-next) fails C15. The previous
# C6 assertion (Qwen on non-Genesis vLLM rejected) no longer holds —
# Qwen 27B with fp8 is valid on non-Genesis engines.
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
# Positive: Qwen 27B + fp8 on non-Genesis engine is now valid.
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-stable-next"], kv_format="fp8_e5m2", tp=1, project_vram=False)
assert r.valid, r.reasons
# Negative: Qwen 27B + TQ3 on non-Genesis engine fails C15.
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-stable-next"], kv_format="turboquant_3bit_nc", tp=1, project_vram=False, required_engine_features=["turboquant_3bit_nc"])
assert not r.valid
assert any(reason.startswith("C15:") for reason in r.reasons), r.reasons
PY
run_test "C7 drafter method: DFlash on MTP-only engine rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"], p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-nightly-mtp"], p.drafters["zlab-qwen-dflash"], kv_format="fp8_e5m2", tp=2, project_vram=False)
assert not r.valid
assert any(reason.startswith("C7:") for reason in r.reasons), r.reasons
PY
run_test "C8 drafter model compatibility rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-nightly-full"], p.drafters["gemma-it-assistant"], kv_format="fp8_e5m2", tp=1, project_vram=False)
assert not r.valid
assert any(reason.startswith("C8:") for reason in r.reasons), r.reasons
PY
run_test "C9 drafter engine type compatibility rejected" <<'PY'
from dataclasses import replace
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
engine = replace(p.engines["vllm-nightly-full"], supported_drafters=p.engines["vllm-nightly-full"].supported_drafters + ("mtp_gguf",))
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], engine, p.drafters["unsloth-mtp-gguf"], kv_format="fp8_e5m2", tp=1, project_vram=False)
assert not r.valid
assert any(reason.startswith("C9:") for reason in r.reasons), r.reasons
PY
run_test "C10 model family support rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["gemma-4-31b"], p.workloads["long-ctx-single"], p.engines["llama-cpp-local"], kv_format="q4_0", tp=1, project_vram=False)
assert not r.valid
assert any(reason.startswith("C10:") for reason in r.reasons), r.reasons
PY
run_test "C11 model max context rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"], p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-nightly-mtp"], p.drafters["qwen-mtp-builtin"], kv_format="fp8_e5m2", tp=2, max_ctx=300000, project_vram=False)
assert not r.valid
assert any(reason.startswith("C11:") for reason in r.reasons), r.reasons
PY
run_test "C12 KV projection fail rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["gemma-4-31b"], p.workloads["fast-chat"], p.engines["vllm-nightly-mtp"], p.drafters["gemma-it-assistant"], kv_format="bf16", tp=1, max_ctx=8192, max_num_seqs=256, mem_util=0.95)
assert not r.valid
assert any(reason.startswith("C12:") for reason in r.reasons), r.reasons
assert r.diagnostics["kv_calc_invoked"] is True
PY
run_test "C12 PP estimate demotes hard failure to advisory" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"], p.hardware["rtx-3090"]], p.models["gemma-4-31b"], p.workloads["fast-chat"], p.engines["vllm-nightly-mtp"], p.drafters["gemma-it-assistant"], kv_format="bf16", tp=1, pp=2, max_ctx=8192, max_num_seqs=256, mem_util=0.95)
assert r.valid, r.reasons
assert r.kv_projection["confidence"] == "PP_ESTIMATE"
assert r.kv_projection["verdict"] == "TIGHT"
PY
run_test "C12 skipped for non-vLLM engines" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["llama-cpp-local"], kv_format="q4_0", weights_variant="gguf", tp=1)
assert r.valid, r.reasons
assert "C12" in r.diagnostics["constraints_skipped"]
assert r.diagnostics["kv_calc_invoked"] is False
PY
# NOTE: the C13 "NVLink-required compose rejected" scenario was removed with the
# nvlink-* composes (vllm dual-nvlink prune, 2026-05-29). They were the only
# composes with requires_nvlink=True, so the C13/E3 estate-NVLink-gating code is
# now dormant (no compose users) — retained, cleanup tracked as a follow-up.
run_test "C14 explicit unsupported weight variant rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["llama-cpp-local"], kv_format="q4_0", weights_variant="autoround-int4", tp=1, project_vram=False)
assert not r.valid
assert any(reason.startswith("C14:") for reason in r.reasons), r.reasons
PY
run_test "C15 compose-required engine feature rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"], p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-nightly-mtp"], p.drafters["qwen-mtp-builtin"], kv_format="fp8_e5m2", tp=2, required_engine_features=["int8_per_token_head"], project_vram=False)
assert not r.valid
assert any(reason.startswith("C15:") for reason in r.reasons), r.reasons
PY
run_test "weight fallthrough: Qwen llama.cpp resolves GGUF" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["llama-cpp-local"], kv_format="q4_0", tp=1, project_vram=False)
assert r.valid, r.reasons
assert r.weights_variant == "gguf"
PY
run_test "helpers expose compatible engines, drafters, KV formats, TP values" <<'PY'
from scripts.lib.profiles.compat import load_profiles, compatible_engines, compatible_drafters, compatible_kv_formats, valid_tp_values
p = load_profiles()
hw = [p.hardware["rtx-3090"], p.hardware["rtx-3090"]]
engines = [e.id for e in compatible_engines(hw, p.models["qwen3.6-27b"], profiles=p)]
assert "vllm-nightly-mtp" in engines
drafters = [d.id for d in compatible_drafters(p.models["qwen3.6-27b"], p.engines["vllm-nightly-mtp"], profiles=p)]
assert drafters == ["qwen-mtp-builtin"]
assert "turboquant_3bit_nc" in compatible_kv_formats(hw, p.engines["vllm-nightly-mtp"])
assert valid_tp_values(p.models["qwen3.6-27b"], 4) == [1, 2, 4]
PY
run_test "to_compose_name strict match resolves dual compose" <<'PY'
from scripts.lib.profiles.compat import load_profiles, to_compose_name
p = load_profiles()
name = to_compose_name(
p.models["qwen3.6-27b"],
p.engines["vllm-stable"],
p.drafters["qwen-mtp-builtin"],
"fp8_e5m2",
2,
1,
workload=p.workloads["long-ctx-single"],
weights_variant="autoround-int4",
max_ctx=262144,
max_num_seqs=2,
)
assert name == "vllm/dual", name
PY
run_test "FitsResult diagnostics populated on every call" <<'PY'
from scripts.lib.profiles.compat import load_profiles, fits
p = load_profiles()
r = fits([p.hardware["rtx-3090"]], p.models["qwen3.6-27b"], p.workloads["long-ctx-single"], p.engines["vllm-nightly-mtp"], tp=1, project_vram=False)
d = r.diagnostics
assert d["constraints_evaluated"] == [f"C{i}" for i in range(1, 17)]
assert "constraints_passed" in d and "constraints_failed" in d and "constraints_skipped" in d
assert isinstance(d["elapsed_ms"], float)
PY
run_test "self-test: all registry entries fit canonical scenarios" <<'PY'
from scripts.lib.profiles.compat import load_profiles, from_compose_name, calibration_status
from scripts.lib.profiles.compose_registry import COMPOSE_REGISTRY
from scripts.lib.profiles.canonical_scenarios import CANONICAL_SCENARIOS
p = load_profiles()
unfit = []
for compose_name in COMPOSE_REGISTRY:
hit = None
for sc in CANONICAL_SCENARIOS:
hardware = [p.hardware[h] for h in sc["hardware"]]
r = from_compose_name(compose_name, hardware=hardware, nvlink_active=sc["nvlink_active"], profiles=p)
if r.valid:
status, row = calibration_status(p, compose_name, hardware, r.effective_max_ctx)
suffix = f"{status}"
if row:
suffix += f", {row.get('source')}"
print(f"SELFTEST {compose_name} on {sc['name']}: PASS ({suffix})")
hit = True
break
if not hit:
unfit.append(compose_name)
assert not unfit, f"composes with no fitting canonical scenario: {unfit}"
PY
run_test "estate happy path: two disjoint instances on 4x3090" <<'PY'
from scripts.lib.profiles.compat import load_profiles, InstanceSpec, validate_estate
p = load_profiles()
instances = [
InstanceSpec("qwen", "vllm/dual", (0, 1), 8010),
InstanceSpec("gemma", "vllm/gemma-bf16-mtp", (2, 3), 8030),
]
r = validate_estate(instances, [p.hardware["rtx-3090"]] * 4, p, nvlink_active=False)
assert r.valid, (r.cross_instance_failures, {k: v.reasons for k, v in r.per_instance.items()})
PY
run_test "E1 estate GPU collision rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, InstanceSpec, validate_estate
p = load_profiles()
instances = [
InstanceSpec("a", "llamacpp/default", (0,), 8020),
InstanceSpec("b", "llamacpp/default", (0,), 8021),
]
r = validate_estate(instances, [p.hardware["rtx-3090"], p.hardware["rtx-3090"]], p, nvlink_active=False)
assert not r.valid
assert any(msg.startswith("E1:") for msg in r.cross_instance_failures), r.cross_instance_failures
PY
run_test "E4 estate port collision rejected" <<'PY'
from scripts.lib.profiles.compat import load_profiles, InstanceSpec, validate_estate
p = load_profiles()
instances = [
InstanceSpec("a", "llamacpp/default", (0,), 8020),
InstanceSpec("b", "llamacpp/default", (1,), 8020),
]
r = validate_estate(instances, [p.hardware["rtx-3090"], p.hardware["rtx-3090"]], p, nvlink_active=False)
assert not r.valid
assert any(msg.startswith("E4:") for msg in r.cross_instance_failures), r.cross_instance_failures
PY
# (E3 estate NVLink-pairing scenarios removed with the nvlink-* composes —
# see the C13 note above; the estate-NVLink machinery is dormant, follow-up tracked.)
run_test "estate per-instance failure bubbles up" <<'PY'
from scripts.lib.profiles.compat import load_profiles, InstanceSpec, validate_estate
p = load_profiles()
instances = [InstanceSpec("bad", "vllm/dual", (0,), 8010)]
r = validate_estate(instances, [p.hardware["rtx-3090"], p.hardware["rtx-3090"]], p, nvlink_active=False)
assert not r.valid
assert not r.per_instance["bad"].valid
PY
run_test "EstateResult diagnostics populated" <<'PY'
from scripts.lib.profiles.compat import load_profiles, InstanceSpec, validate_estate
p = load_profiles()
r = validate_estate([InstanceSpec("a", "llamacpp/default", (0,), 8020)], [p.hardware["rtx-3090"]], p, nvlink_active=False)
d = r.diagnostics
assert d["constraints_evaluated"] == ["E1", "E2", "E3", "E4"]
assert "constraints_passed" in d and "constraints_failed" in d
assert isinstance(d["elapsed_ms"], float)
PY
run_test "estate self-test: two llama.cpp instances on 2x3090" <<'PY'
from scripts.lib.profiles.compat import load_profiles, InstanceSpec, validate_estate
p = load_profiles()
instances = [
InstanceSpec("llama-a", "llamacpp/default", (0,), 8020),
InstanceSpec("llama-b", "llamacpp/mtp", (1,), 8021),
]
r = validate_estate(instances, [p.hardware["rtx-3090"], p.hardware["rtx-3090"]], p, nvlink_active=False)
assert r.valid, (r.cross_instance_failures, {k: v.reasons for k, v in r.per_instance.items()})
PY
run_test "estate self-test: Qwen plus Gemma on 4x3090" <<'PY'
from scripts.lib.profiles.compat import load_profiles, InstanceSpec, validate_estate
p = load_profiles()
instances = [
InstanceSpec("qwen", "vllm/dual", (0, 1), 8010),
InstanceSpec("gemma", "vllm/gemma-int8-mtp", (2, 3), 8032),
]
r = validate_estate(instances, [p.hardware["rtx-3090"]] * 4, p, nvlink_active=False)
assert r.valid, (r.cross_instance_failures, {k: v.reasons for k, v in r.per_instance.items()})
PY
run_test "estate self-test: three-instance mix on 6x3090" <<'PY'
from scripts.lib.profiles.compat import load_profiles, InstanceSpec, validate_estate
p = load_profiles()
instances = [
InstanceSpec("qwen", "vllm/dual", (0, 1), 8010),
InstanceSpec("gemma", "vllm/gemma-bf16-mtp", (2, 3), 8030),
InstanceSpec("llama", "llamacpp/default", (4,), 8020),
]
r = validate_estate(instances, [p.hardware["rtx-3090"]] * 6, p, nvlink_active=False)
assert r.valid, (r.cross_instance_failures, {k: v.reasons for k, v in r.per_instance.items()})
PY
echo ""
echo "test-profiles-compat: ok"