Instructions to use malaiwah/GLM-5.2-EXL3-FQ-segments with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Trellis
How to use malaiwah/GLM-5.2-EXL3-FQ-segments with Trellis:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
Fungible Quant Segments β GLM-5.2 (K2 Β· K3 Β· K4 Β· K5)
TLDR
Mixed-K quants as a service β assemble your own EXL3 checkpoint from shared, attested, per-expert segments. Pure safetensors. No new format.
Fungible Quant Segments (for use in Progressive Tensors): offline per-expert bit-width selection and EXL3 checkpoint assembly for the Gilded Gnosis vLLM stack. This repository does not implement live runtime per-expert bit-width reallocation. The core of this repo is the shared K3 base tier β the "everyone downloads this once" layer of the progressive-JPEG model for quants β covering every MoE layer (3β78).
Do not infer exact coverage from a layer range printed in this card. Read
the signed index-kK.json keys for the actual published layer set. When an
fq-layer-coverage/1 per_k[K].layer_coverage.layers field is present, it is
also an exact set. Legacy per_k[K].layers and layer_range are extrema only;
segment_count is an inventory count, not membership. Segments are
content-addressed and per-layer, so every published window is durable value on
its own.
Everything here is pure, unmodified safetensors β this is a fetch/assembly scheme, not a container format. Any safetensors tool can read these files.
- HF Repo: https://huggingface.co/malaiwah/GLM-5.2-EXL3-FQ-segments
- Tooling: https://github.com/malaiwah/progressive-tensors
Inventory β snapshot, not authority
Measured from the live repository listing at commit c64a3f60,
2026-08-11 10:07 UTC. An unattended encode campaign publishes to main
roughly hourly, so these numbers grow. fq-manifest.json is the authority;
this table is a convenience.
| tier | segments | layers | on-disk | one expert | provenance predicate |
|---|---|---|---|---|---|
| K3 (base) | 76 | 3β78, contiguous | 278.6 GB | 13.65 MiB | repack-of |
| K2 (fast-load) | 75 | 3β77, contiguous | 184.4 GB | 9.15 MiB | encode-of |
| K4 (promotion) | 56 | 3β58, contiguous | 273.0 GB | 18.15 MiB | encode-of |
| K5 (hot) | 24 | 3β10 and 35β50 β sparse, layers 11β34 absent | 146.0 GB | 22.65 MiB | encode-of |
sources/ (community-primed K4) |
105 files | 3β10 | 79.7 GB | β | repack-of / derived-from |
| metadata, indexes, attestations | 241 files | β | 102.8 MB | β | β |
| whole repository | 961.8 GB |
K5's per_k["5"].layers reads [3, 50] β that is a min/max, not a range.
Read index-k5.json for the actual layer set. This is exactly the drift the
warning above exists for.
Do not hf download this repository whole. No recipe needs all of it.
Read this before you download
Four constraints that decide whether these files are useful to you. All are measured, and each links to the report that measured it.
1. TP4 only. Not TP2, not TP1, and TP8/TP16 is unimplemented.
The four rank slices in every segment are four independent quantizations,
not four slices of one quantization. EXL3 stores a per-(expert, projection,
rank) input rotation suh and output rotation svh; if the ranks were slices
of a single quant, the H-side vectors (on the axis TP does not split) would
be byte-identical across ranks. They are not β sha256 of
gate_proj.suh and down_proj.svh at layer 3 differs across all four ranks,
in every artifact family checked (ours, and two community quants).
Consequences:
- TP4 β TP4: identity, works today.
- TP4 β TP2 / TP1: impossible as a repack. Merging needs two slices to
share the un-split-axis rotation, and they measurably do not. It requires
dequantize β concat β re-quantize, and the fq tooling has no dequant/
requant path by construction (
fq_repackis byte-verbatim; predicaterepack-of). - TP4 β TP8 / TP16: arithmetically valid β splitting a 512-wide slice into 2Γ256 or 4Γ128 keeps the H-side rotation intact and cuts the I-side one on 128-aligned, whole-trellis-tile boundaries β but not implemented. Zero code, zero evidence. TP32 is blocked outright (64 < 128).
- Expert parallelism (EP) and data parallelism (DP > 1): refused by the loader, in both cases before any of our code runs.
- A TP mismatch fails closed at model construction, not silently:
rank-sliced EXL3 checkpoint TP does not match runtime.
You will download hundreds of gigabytes before a loader can tell you this, so:
if you are not serving TP4, these segment files are not usable as-is.
Full analysis with file:line citations: runs/m5-serve/topology-neutrality.md.
2. K5 cannot currently be served as a mixed tier on SM120 / Blackwell.
The mixed K3/K5 checkpoint assembles and verifies clean, loads its weights (77.83 GiB/rank in 81.8 s), and then all four TP workers die during kernel construction:
ValueError: W4A16 shared-memory footprint exceeds device opt-in limit:
109568 > 101376 bytes (layout=trellis3_t256)
Measured cause: the mixed-trellis path forces one tile config across every
tier and only varies trellis_bits, so the tile is sized for the base tier and
applied to the widest one. Footprint grows ~8192 bytes per bit of tier width;
K4 at the failing configuration lands at exactly 101,376 bytes β the opt-in
limit, to the byte β so K3+K4 is the viable mixed ladder on SM120 today and
K5 is the first tier that cannot fit at all.
The K5 segments are valid artifacts. This is a runtime kernel limit, not a
problem with the encoded weights: they will work on hardware with a larger
shared-memory budget, or once tile selection accounts for max(tier_bits)
rather than the base tier (from the same measurements, cta_m=2, 128x128 fits
K5 at 82,432 bytes with 19% headroom). Details:
runs/m5-serve/k5-shared-memory-limit.md.
3. You also need the source checkpoint on disk.
Segments carry routed-expert tensors only. Attention, shared experts,
router, norms, embeddings and lm_head are copied byte-exact from the source
quant β brandonmusic/GLM-5.2-EXL3-TR3-3.0bpw
@ 9297b9f1d53af5c67cffa01e30cc071a1ff7144b, 316.4 GB.
Not from zai-org/GLM-5.2. That was tried and is wrong: the non-expert tensors
in an EXL3 checkpoint are already in rank-sliced EXL3 form, and z.ai ships BF16
in a different layout. Budget source checkpoint + fetched segments + assembled
output.
4. Mixed-K needs a loader that understands it; all-K3 does not.
A mixed recipe emits hybrid_tr3_tail.bits: "mixed" and needs Gilded Gnosis
r33+ to load it. An all-K3 recipe is byte-identical to the source
checkpoint and therefore loads anywhere the source does.
What has been proven, with numbers
Four independent results, all on real GLM-5.2 (not a proxy), on an 8Γ RTX PRO 6000 (SM120) box.
Reassembly is bit-exact β 81/81 shards
fq_assemble rebuilt the full checkpoint from the published K3 segments and
compared it against the source quant's own MANIFEST.sha256:
| check | result |
|---|---|
| shard hashes vs source | 97 shard-checks, 97 identical, 0 divergent (81 unique shards) |
| segment attestations, ed25519 under the pinned signer | 76/76 verified, 0 failures |
| tensors | 935,105 == 935,105, delta 0 |
| parameters | 158,152,144,896 == source, delta 0 |
| tensor bytes | 316,304,795,648 == source, delta 0 |
| index | 935,105 entries, 0 dangling, 0 missing |
| file set | 81/81 shards, none missing, none unexpected |
No tensor was anything other than bit-exact. A separate mixed K3/K5 build
diverged from the source on exactly the 12 K5-bearing shards and was
byte-identical on the other 69 β the intended shape.
Report: runs/m5-serve/assembly-report.md.
It boots and serves
A checkpoint assembled by this tooling, out of these segments under GG vLLM,
TP4, exl3, B12X_MLA_SPARSE, fp8_ds_mla KV:
| metric | value |
|---|---|
| model loading | 76.14 GiB/rank, 400.9 s (95.6 GiB card, GMU 0.92) |
| KV cache after weights | 6.54 GiB β 130,048 tokens |
| load probe | 120 s at concurrency 8, max_tokens=128 |
| requests | 208 issued, 208 succeeded, 0 failed |
| aggregate throughput | 219.2 tok/s (median scraped decode 225.6 tok/s) |
| single stream | 34.9 tok/s |
Run concurrently with an encode campaign on the other four GPUs β the
coexistence case, deliberately. 76.14 GiB/rank is 80% of the card, which bounds
promotion: promotion comes out of a fixed budget, not out of headroom that
does not exist. Report: runs/m5-serve/m0-boot-gate.md.
It is still competent β GSM8K 89.2%
gsm8k_cot_zeroshot (lm-eval v3) against the assembled serve:
| metric | value |
|---|---|
| flexible-extract exact_match | 0.892 Β± 0.0197 |
| strict-match exact_match | 0.116 Β± 0.0203 |
| items | 250-item subsample, seed 1234 (not the full 1319) |
| concurrency | 16 |
Both numbers are reported because quoting only the good one would be
cherry-picking. Read the flexible one. strict-match requires the answer in
a rigid #### N form; GLM-5.2 is a reasoning model that emits chain-of-thought
and almost never satisfies that format, so 0.116 measures format compliance,
not arithmetic. A 250-item subsample carries Β±2% stderr, so a 1β2 point
difference against a future re-tiered run would be inside the noise.
Report: runs/m5-serve/results/axes/GSM8K-BASELINE.md.
How to use it
git clone https://github.com/malaiwah/progressive-tensors && cd progressive-tensors
uv venv && uv pip install -e '.[hub]'
cat keys/FINGERPRINTS # take the signer fingerprint from HERE, not from the download
The pinned signer for everything in this repository is
a58b7bb79ba58457 (short form; full 64-hex
a58b7bb79ba5845716aa6fee7d54e714ef243c2875f23a617e1ef3247c565525). Pass it as
--trust-signer to every tool. Under pinning, a compromised artifact
repository can deny you service β it cannot make you accept the wrong bytes.
1. Get the source checkpoint (non-expert tensors live here)
hf download brandonmusic/GLM-5.2-EXL3-TR3-3.0bpw \
--revision 9297b9f1d53af5c67cffa01e30cc071a1ff7144b \
--local-dir ./source-quant # 316.4 GB
2. Fetch only the segments your recipe names (fq_fetch)
fq_fetch reads index-kK.json, turns a recipe into per-expert byte spans,
coalesces them, and HTTP-Range-fetches exactly those. Every expert is verified
against the signed attestation of the source it came from as it lands, before
the file is finalized. It is resumable, and --dry-run prints ranged bytes vs
whole files vs whole repo before you spend bandwidth.
REPO=malaiwah/GLM-5.2-EXL3-FQ-segments
REV=release-2026-08-10 # a tag on one immutable commit (64e582a1β¦, 2026-08-10 23:11 UTC)
# `main` moves under you β pin something.
uv run tools/fq_fetch.py --policy recipes/glm52-3.0bpw-all-k3.json \
--out ./segments --source "$REPO@$REV" \
--trust-signer a58b7bb79ba58457 --dry-run # then drop --dry-run
An all-K3 recipe is the whole base tier, so it fetches essentially everything (278.6 GB); the saving appears as soon as the recipe is narrower than the repo β a layer window, or a sparse K4/K5 hot set over a K3 base.
Whole-file downloads work too, but --include must be repeated once per
pattern β --include "a" "b" makes the CLI read b as a filename and
silently ignore the include list:
hf download "$REPO" --revision "$REV" --local-dir ./segments \
--include "fq-manifest.json" --include "fq-release.json" \
--include "index-k*.json" --include "attestations/*" \
--include "recipes/*" --include "LICENSE" --include "NOTICE" \
--include "layer-*.k3.safetensors"
3. Verify
# one signature over every file's sha256 + size, at a release commit
uv run tools/fq_release.py verify --dir ./segments --complete \
--trust-signer a58b7bb79ba58457
# byte-identity of a reconstruction against the source checkpoint
uv run tools/fq_verify.py --identity --segments ./segments \
--source ./source-quant --json id.json --md id.md
--complete fails on any listed file that is absent and on any local file
the signature does not cover, which is what makes "nothing was added"
checkable. It is only meaningful against a pinned release commit: against
main there will be segments newer than the release manifest, reported as
unlisted, and fq-manifest.json will read as MISMATCHED because every
incremental publish rewrites it from the live inventory. That is the mechanism
working, not a fault.
4. Assemble
uv run tools/fq_assemble.py \
--segments ./segments --source ./source-quant \
--policy recipes/glm52-3.0bpw-all-k3.json --out ./my-checkpoint \
--trust-signer a58b7bb79ba58457
sha256sum -c MANIFEST.sha256 # in the output dir
Assembly fails closed without a pinned signer: every fragment's signature,
predicate, fragment digest and per-expert digests are recomputed from the bytes
on disk before anything is written. --insecure exists for local development
and says so loudly.
Two fingerprints, one chain. For fetch, --trust-signer is the
publisher's fingerprint from keys/FINGERPRINTS in the tooling repo β the point
being that it does not come from the download you are checking. For assemble
over a range-fetched tree it is your own: a fetched subset is a new file
with fewer experts, new offsets and a new digest, so no publisher signature can
cover it. fq_fetch signs what it materialized as derived-from, pins the
publisher fragments by digest as parents, and prints the exact assemble command.
Assembling a tree you downloaded whole pins the publisher directly.
On --reflink: safe and sometimes faster, but not a guaranteed space
saver. Measured on XFS: every expert region went through copy_file_range
with zero fallbacks and byte-identity always held, but zero extents ended up
shared β 0.00% of expert bytes are 4K-congruent between segment and shard
offsets. Whole-file cloning of a byte-identical shard does share (100% of
extents, measured by filefrag), which is how the all-K3 rebuild cost ~0
incremental disk.
Recipes shipped in the repo
recipes/ holds ready-to-use fq-policy/2 documents, each pinned to a window
we actually validated. A policy is just a per-layer, per-expert map of K β widen
one yourself as the campaign publishes more layers.
| recipe | rebuilds | proof |
|---|---|---|
glm52-3.0bpw-all-k3.json |
brandonmusic 3.0bpw, byte-for-byte | 81/81 shards sha256-identical; boots, 219.2 tok/s, GSM8K 89.2% |
glm52-r28-partition-primed-k4.json |
willfalco 3.42bpw r28 partition from primed K4 over the K3 base | fragment byte-identity vs fresh ranged reads; expanded family re-derived 2048/2048 |
glm52-fastload-k2-window1.json |
K2 on layers 3β10, K3 elsewhere | our encodes, encode-of |
glm52-hot-k5-window1.json |
K5 on layers 3β10, K3 elsewhere | encode-of; assembles and verifies, does not serve on SM120 β see limitation 2 |
Provenance
Each K tier terminates in a different, pinned, auditable chain. Every segment
carries a signed fq-attestation/1 line (ed25519, keyid =
a58b7bb7β¦c565525) recording fragment.sha256, materials, and
expert_sha256 β one digest per expert's contiguous byte-span, so a third
party can spot-check a single expert with one ranged read.
| tier | predicate | comes from |
|---|---|---|
| K3 | repack-of |
brandonmusic/GLM-5.2-EXL3-TR3-3.0bpw @ 9297b9f1β¦. Trellis bytes copied verbatim; materials names the source file and its sha256, cross-checked against the source repo's own MANIFEST.sha256. |
| K2 / K4 / K5 | encode-of |
Encoded by us from zai-org/GLM-5.2 @ b4734de4β¦ with the capture pipeline. materials pins base model + revision, capture_fingerprint c442aa4cβ¦, encoder encode_tr3_v31.py, encoder_sha256 e9a85a47β¦; quant_args records K, codebook, seed_base, sigma_reg, tp. |
sources/willfalco-3.36bpw |
repack-of |
K4, layers 3β10, primed from willfalco/GLM-5.2-EXL3-TR3-3.36bpw @ 8d9aa923β¦. |
sources/willfalco-3.42bpw |
repack-of + derived-from |
K3/K4, layers 3β10, from willfalco/GLM-5.2-EXL3-TR3-3.42bpw @ ae68c659β¦; the expanded view is re-derived by rule shared_h_expand_v1 from the shared-h parent, pinned by parent sha256. |
The community-primed K4 under sources/ is the point of the exercise made
concrete: not our encode β somebody else's quant, decomposed into fragments a
recipe can name. It is kept separate from the root tiers precisely so the two
chains never get confused. The root layer-*.k4.safetensors tier is ours
(encode-of); the willfalco material covers layers 3β10 only.
How a consumer checks it
- Take the fingerprint from
keys/FINGERPRINTSin the tooling repo's git history β never from this download. fq_release.py verify --completeat a release commit: one signature over every file. Because the attestation files are themselves covered by it, their per-expert digests become trusted data.- Read any attestation's
predicateandmaterialsto see what the chain terminates in, then re-derive: forrepack-of, one ranged read against the pinned source revision reproduces the expert's bytes exactly; forencode-of,materialsnames the exact stack that produced them.
One honest caveat on encode-of: it is stack-scoped, and says so. Every
encode-of attestation carries a determinism_scope block naming
gpu_arch: sm120 and torch: 2.12.0+cu132. A deterministic re-encode
reproduces bytes only within the same encoder sha, exllamav3 version,
torch/CUDA build and GPU architecture. Measured, not assumed: CUDA pow()
differs from CPU by 1 ulp on 3 of 32 exponents at this model's rope base β
enough on its own to flip ~1.4% of routings per layer β and grouped/cuBLAS
GEMMs are not row-stable across batch shape. Across stacks the honest predicate
is equivalence-of: decode both fragments and attest both reconstruction
errors against the same BF16 ground truth.
(The first 16 encode-of segments were briefly published with a repack-of
label inherited from the publishing path. All were re-emitted correctly on
2026-08-10, each carrying a supersedes note recording the correction.)
Layout
fq-manifest.json # fq-manifest/1 β THE authority on coverage; rebuilt
# from the remote inventory on every publish
fq-release.json # fq-release/1 β ONE signature over every file's sha256
index-kK.json # per-layer -> per-expert [lo,hi) byte ranges
layer-LLL.kK.safetensors # one MoE layer at one K; 256 experts, body
# per-expert contiguous -> range-readable
attestations/layer-LLL.kK.jsonl # one signed attestation per segment
recipes/*.json # fq-policy/2 documents
sources/<uploader>-<bpw>/β¦ # fragments primed from other community quants
LICENSE / NOTICE # our licence; the upstream attribution chain
Each segment holds
model.layers.{L}.mlp.experts.{E}.{gate,up,down}_proj.rank{0-3}.{trellis,suh,svh,mcg}
β rank-sliced TP4 layout, layout tag rank_sliced_tp4 in every header.
Schema strings fq-segment/1, fq-attestation/1, fq-manifest/1,
fq-release/1 are stable API.
Status and known gaps
Active research artifact (2026-08). The segment/assembly side is heavily verified: bit-exact reassembly on 81/81 shards, boots and serves at 219 tok/s, GSM8K 89.2%. The runtime side β the progressive loader and live per-expert reallocation β is experimental: routing selection has been measured against a human reference, but no expert has been promoted on a live serve and no eval has been run against a re-tiered model.
- Verification hardening is in flight. Fixes from an independent review are
landing in the tools repo.
git pullbefore you rely on a verification result, and readTRUST.mdΒ§7. - Pinning is not optional in practice. Without
--trust-signerthe tools fall back to "any key this project has authorized" β a weaker claim than you probably want. mainmoves. Pin--revision. Note the current release tag (release-2026-08-10) predates the K4 tier entirely: it carries K2 30 / K3 76 / K5 8 and no K4. Pinning it gets you a single-signature, immutable tree; trackingmaingets you the campaign's output with only per-fragment attestations. Choose deliberately.- Borrowed-buffer tensor loaders corrupt EXL3 checkpoints β with or without
fungible quant. The EXL3 quant methods retain every loaded tensor until
process_weights_after_loadingand their two "copy" operations are identity functions when the tensor is already contiguous and on-device. AvoidinstanttensorwithINSTANTTENSOR_COPY=0, andfastsafetensorsat world size > 1.--load-format auto|hf|safetensorsis the tested path.
Evidence
Every number in this card is measured, not estimated: the boot gate and
throughput from a TP4 serve of a checkpoint assembled out of these segments,
the GSM8K score from lm-eval against that serve, the bit-exactness from a
tensor-by-tensor comparison against the source quant, and the TP4 and K5
limits from direct measurement on SM120 hardware.
Full upstream attribution β base model, every source quant, the EXL3 format and
the tooling, each pinned by revision β is in NOTICE. The licence
covering our contribution (segmentation, indexes, attestations, recipes, docs),
which explicitly does not cover the upstream weights, is in LICENSE.
- Downloads last month
- -
Model tree for malaiwah/GLM-5.2-EXL3-FQ-segments
Base model
zai-org/GLM-5.2