5.3 KiB
Matching cache snapshot stages (#114)
The reported layer-35 zero-sign difference came from the oracle measurement.
tools/issue109-model-reference.py called snapshot_cache on the reference
trunk but compared it with the native server's lazy bank entry. Pinned
cache_state.py::_clone_tree implements a deep clone as value + zeros, which
turns negative zero into positive zero. snapshot_cache_lazy_hybrid, selected
by the server's default MTPLX_SESSION_LAZY_SNAPSHOT policy, retains the QSA key
bits. Native production already implements these two contracts correctly.
The oracle tool now compares the actual bank stages: policy-selected lazy/deep trunk, always-deep committed MTP head, and the suffix owner's final hidden row. Every cache leaf must match its raw-bit hash. The old zero-sign exception and numerical/canonical-zero comparison are removed. The #113 entry point invokes this same strict implementation so the two tools cannot drift. Historical #109 receipts are preserved and annotated with this correction.
This resolves a verification defect. There is no production arithmetic, RoPE, cache-format, model or DS4/GLM change, and no platform mismatch to approve. Changing the native zero sign would violate the actual lazy-snapshot oracle. This is a correction to the Qwen MTPLX comparison, not a DS4Server-only feature.
First changed bit
Pinned MTPLX 9882703f3105363ddc37eca9f97aa09a1d387112, MLX 0.32.2,
Bare-Speed artifact 74559cdf34fbfc0b593de72d17e93f37fd4f9ea7 on M5 Max.
Native starting commit: d9026aa7bfbc8f74ec82c120178c34c5f08510d3.
The independent snapshot probe reads the original #109 native and oracle
raw key files. Reconstructing the BF16 key from its F32 export is required to
round-trip every bit before the probe proceeds. Installing it in a real pinned
QSACache and reading raw state / lazy snapshot preserves the native hash.
Taking the additional deep snapshot reproduces the original oracle file
byte-for-byte. In all three states, the only changed coordinate is
[0, 1, 0, 2]: F32 export 0x80000000 → 0x00000000.
| Original state | Key shape | Raw/lazy hash prefix | Extra deep snapshot / old oracle hash prefix |
|---|---|---|---|
| Cold prefill | 1×2×46×256 | d81b466dea1ff5b7 | 520dd44032eda478 |
| Cold final | 1×2×58×256 | 6a1c56e7333fc86e | 44b87b49e9f9853e |
| Warm final | 1×2×88×256 | 061f8fe052fe21c8 | 98186c7fec249807 |
Full hashes, coordinates and independently generated BF16/F32 fixtures are in
tests/fixtures/mtplx-snapshot-zero.json. This locates the first changed bit at
the measurement clone, without attributing it to an earlier model operation.
Regression and reproduction
The native regression exercises actual snapshot and restore paths for
BF16 and F32, lazy/deep snapshots and both restore-cloning modes. It compares
all bits to the independent fixture and verifies the source and banked arrays
remain unchanged, together with the restored cache offset.
Generate the fixture under isolated MLX 0.32.2 Python using:
tools/issue114-snapshot-reference.py PINNED_CHECKOUT ORIGINAL_NATIVE_DIR ORIGINAL_ORACLE_DIR tests/fixtures/mtplx-snapshot-zero.json.
The original directories contain cold-prefill-key35.f32, cold-key35.f32
and warm-key35.f32 from the #109 run, before the harness correction.
Build the release test executable (cargo test --release --all-features --bin ds4-server issue114 --no-run), copy it outside target, and run
issue114_snapshot_stage_preserves_zero_bits --ignored --nocapture --test-threads=1 under target/debug/test-supervisor 4096 60 120 --command.
For complete model verification, run the shared native
issue113_default_verify_and_checkpoint test in separate default/off processes
under the 114688 MiB supervisor, using the #113 documented environment and new
output directories. Run tools/issue109-model-reference.py against the original
explicit-off reproduction and tools/issue113-model-reference.py against the
default run. Both now use identical strict raw-bit comparison. The native
request is the original 46-token low-reasoning prompt, greedy seed 1, MTP depth
3 and max 12, with MTPLX_CONTEXT_COPY=0.
Completion review
Fresh serial default and explicit-off native/oracle runs pass: all eight verify forwards per configuration, every prefill/final logit and hidden byte, all trunk/MTP cache bits, emitted tokens, warm reuse and disk reopen. There are no remaining key coordinates with different bits. The original prefill key is negative zero in both implementations at the reported coordinate. All eight BF16/F32 snapshot/restore combinations match the independent reference. Installed DeepSeek session switching and GLM verifier/recurrent-state controls also pass; production code is unchanged.
Formatting, Clippy with -D warnings, signed app bundle and the full suite
pass (313 application + 8 tool tests; 237 ignored hardware/reference tests).
The first full-suite attempt reproduced existing #115: an unquoted Git SHA
parsed as a YAML float (5568000000.0). Its failure evidence is retained; the
unchanged retry passed. #115 remains a separate next-priority commit.
Review against the issue and pinned source is complete. The diagnostic cause is isolated, the incorrect oracle comparison is fixed, the raw-bit exception is removed, and focused plus full-model regressions verify the actual contract. No runtime mismatch is waived and no implementation is deferred.