Skip to content

v1.8.2 "Adularescence"

Choose a tag to compare

@ncoevoet ncoevoet released this 09 Aug 08:32
· 370 commits to master since this release

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_run check compared Apple unified memory against a dedicated-VRAM bar — and detect_vram() reports 0.0 on 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 the auto profile 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-iqa no 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 the 0.0 comparison.
  • FACET_DEVICE=cpu on 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_mb sampled Torch's allocator counters in the harness while the work ran as a subprocess, and those counters are process-local — so the figure was 0.0 on CUDA as much as on Metal. GPU memory now comes from nvidia-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 need torch or psutil skip cleanly where those are absent.

Upgrade notes

  • Benchmark output schema changed (scripts/bench/scoring_throughput.py): peak_vram_mb is removed rather than aliased, since it never held a real value. peak_gpu_memory_mb and peak_rss_mb replace it and are nullable, with gpu_memory_method / rss_method stating what was measured and how. Nothing outside the harness read these fields.
  • On an NVIDIA host, FACET_DEVICE=cpu now 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