v1.8.2 "Adularescence"
Facet 1.8.2 "Adularescence"
Fix-only, and mostly about measurements that were quietly wrong rather than features that were missing. DeQA-Score was refused on every Mac, --recompute-iqa logged Metal machines as running on CPU, and the throughput benchmark had almost certainly never reported a real memory figure on any platform. Nothing here changes what Facet does — it changes what it correctly notices about the machine it's running on.
Fixed
- DeQA-Score is no longer refused on every Mac. Its
can_runcheck compared Apple unified memory against a dedicated-VRAM bar — anddetect_vram()reports0.0on Metal — so the model was skipped however much memory the machine had. CUDA is still judged on dedicated VRAM, unchanged; Metal is judged on total unified memory against roughly twice the model's footprint (32 GB for DeQA's 16 GB bar, the same derivation that sizes theautoprofile in 1.8.1). The skip message now names the budget that actually applies rather than quoting VRAM to a machine that has none. --recompute-iqano longer logs an accelerated run as "CPU" on Apple Silicon. The pass packing stays deliberately conservative there — one model at a time, because unified memory is shared with macOS and everything else running — and that choice is now pinned by a test rather than surviving as a side effect of the0.0comparison.FACET_DEVICE=cpuon an NVIDIA host now refuses DeQA-Score instead of loading a 16 GB vision-language model onto the CPU: the capability check read the card's VRAM while the loader honoured the override.- Pending rating syncs are flushed at shutdown rather than dropped. The debounced timers that mint rating-derived comparison rows were never fired or disarmed when the server stopped, so a sync in flight was simply lost. It now runs bounded at five seconds on a daemon thread, after the checkpoint thread has stopped (so it doesn't contend for SQLite's single writer) and before the final truncating checkpoint (so its rows land in the database rather than in a WAL the next start inherits).
- The throughput benchmark measured the wrong process.
peak_vram_mbsampled Torch's allocator counters in the harness while the work ran as a subprocess, and those counters are process-local — so the figure was0.0on CUDA as much as on Metal. GPU memory now comes fromnvidia-smi's per-process table, filtered to the scoring child and the workers it forks, as a high-water mark. Metal exposes no per-process equivalent, so rather than invent one no GPU figure is reported there at all: unified memory is system RAM, and the process tree's RSS is reported under its own name with the method stated beside it. A metric that could not be sampled reports as unavailable, never as zero.
Internal
- The retry helper's wall-clock budget, added in 1.8.0, gained the test it never had — it was covered only indirectly through an endpoint, so a regression to counting attempts would have gone unnoticed.
- CI installs
psutil, a declared dependency its hardcoded subset had omitted, and the two tests that needtorchorpsutilskip cleanly where those are absent.
Upgrade notes
- Benchmark output schema changed (
scripts/bench/scoring_throughput.py):peak_vram_mbis removed rather than aliased, since it never held a real value.peak_gpu_memory_mbandpeak_rss_mbreplace it and are nullable, withgpu_memory_method/rss_methodstating what was measured and how. Nothing outside the harness read these fields. - On an NVIDIA host,
FACET_DEVICE=cpunow skips DeQA-Score instead of running it on the CPU. If you relied on that, unset the override or accept the skip — the column is left NULL. - Nothing to run after upgrading; no schema or config changes.
Still unverified
Carried forward and honest about it: whether DeQA-Score actually loads and runs on Metal, and whether the profile tier 1.8.1 selects there fits in practice, both need a Mac. The nvidia-smi column format and the assumption that forked workers each get their own row need a CUDA box. The Windows library-lock path added in 1.8.0 has still not been exercised on Windows. Reports welcome on any of them.
Full changelog: https://github.com/ncoevoet/facet/blob/master/CHANGELOG.md