Skip to content

v1.1.1

Choose a tag to compare

@automatosx automatosx released this 03 Aug 15:28
· 81 commits to main since this release

AXQuant v1.1.1 is a stability release for the AWQ/GPTQ calibration path introduced in v1.1.0 — no new quantization algorithms. Certification remains evidence-gated; this release does not claim certified public model releases.

Fixed

  • BF16 capture crash: capture-activations failed on every real BF16 checkpoint because np.asarray rejects bfloat16 MLX buffers at the PEP 3118 check. Activations are now cast inside MLX before numpy export. Found by a real-model smoke on Mac Studio M2 Ultra; tiny fp32 fixtures never exercised it. Regression tests cover both the conversion and its premise.
  • GPTQ peak memory: Hessian accumulated in float32 (float64 only on factorization retry), diagonal damping without materializing identity matrices, group-level (not full-width) static grids, and prompt freeing of intermediates — measured 6.7 GB → 4.7 GB peak RSS at in = 8192 (−30%), identical numerical output.

Added

  • Resumable activation capture: segmented replay (--segment-batches) with a binding-verified capture_progress.json; an interrupted capture resumes byte-identically instead of starting over. Final artifacts are deflate-compressed, can be grouped into shard archives (--modules-per-shard), and load_capture_activations now fails closed without the completion.json marker.
  • Real-hardware integration tests: tests/test_integration_mac.py (marker integration, Apple Silicon only) drives tokenize → capture → measured AWQ/GPTQ probe → GPTQ plan → real mlx_lm.convert end to end, plus a resume byte-equality smoke. Run with pytest -m integration.
  • CI: macos-14 job runs the full MLX test suite on Apple Silicon; Ubuntu job runs ruff + mypy. README badge added.
  • Signed release artifacts: a v* tag workflow builds sdist/wheel, emits SHA256SUMS.txt, and signs dists with keyless Sigstore build-provenance attestation. Note: this workflow ships in v1.1.1 itself, so attestations begin with the next tag.
  • Docs: docs/migration-v1.1.md (v1.0.x → v1.1.x renames and state invalidation), docs/compatibility.md (environment matrix), docs/known-issues.md.

Verification

  • 528 tests passing locally (macOS arm64, Python 3.13, mlx 0.32.0) and on Mac Studio M2 Ultra (Python 3.12), including the new integration tests; ruff and strict mypy clean.
  • Real-model smoke on Mac Studio M2 Ultra (MiniCPM5-1B BF16, 168 modules): tokenized cache → activation capture → measured probe — mean task-loss delta at 4-bit: GPTQ 0.0000 vs affine 0.0015, the first real-model confirmation that the GPTQ refinement materially reduces measured degradation.

Known limitations carried forward

  • Measured probing through the CLI still defaults capture_points to ("output", "hidden"); plain dense backbones (non-multimodal layouts such as MiniCPM5/Qwen3-dense) only expose logits, so CLI measured probing on those families fails closed today. The library API accepts capture_points=("output",) and works (used by the smoke above). A CLI escape hatch is planned for a follow-up.
  • The v* release workflow ships in this tag, so signed dist attestations begin with the next release; v1.1.1 itself carries source artifacts only.