ngquocvinh commited on
Commit
fe55204
·
verified ·
1 Parent(s): 3ea77ae

Expand Nex-N2.5-mini GGUF ladder and fidelity card

Browse files
README.md CHANGED
@@ -75,17 +75,24 @@ mean PPL was `6.684743` in this pilot.
75
  | Nex-N2.5-mini-Q6_K.gguf | 0.027186 | 93.811% | -0.858% | 4.676% |
76
  | Nex-N2.5-mini-Q5_K_M.gguf | 0.038910 | 92.636% | +0.036% | 5.262% |
77
  | Nex-N2.5-mini-Q4_K_M.gguf | 0.063583 | 90.315% | +3.230% | 6.732% |
 
 
 
78
  | Nex-N2.5-mini-Q3_K_M.gguf | 0.129316 | 85.906% | +4.044% | 9.427% |
 
 
79
  | Nex-N2.5-mini-Q2_K.gguf | 0.233133 | 80.709% | +10.839% | 12.770% |
 
80
  | Nex-N2.5-mini-IQ2_XS.gguf | 0.516971 | 71.590% | +51.851% | 19.371% |
81
  | Nex-N2.5-mini-IQ1_M.gguf | 0.695877 | 66.064% | +69.116% | 24.275% |
82
  | Nex-N2.5-mini-Q1_0.gguf | 8.616836 | 4.879% | +445003.665% | 61.752% |
83
 
84
  For a general local profile, Q4_K_M is the practical starting point in this
85
- pilot. Q5_K_M and Q6_K are stronger quality/size choices, while Q8_0 is the
86
- highest-bit option. Q3_K_M is a lower-memory compromise. Q2_K, IQ2_XS, IQ1_M,
87
- and Q1_0 are memory-constrained experimental profiles and should be checked
88
- against the intended workload.
 
89
 
90
  These measurements describe next-token fidelity relative to BF16; they are not
91
  a direct percentage of capabilities retained. Instruction following,
@@ -136,7 +143,7 @@ upstream BF16 safetensors. The text converter used `--no-mtp` because this
136
  revision advertises MTP configuration but does not contain MTP tensors. The
137
  vision projector was converted separately to F16.
138
 
139
- All nine published text GGUF files passed llama.cpp tensor checks, load, and
140
  English generation smoke tests. The BF16 reference also passed the same text
141
  smoke profile. The Q4_K_M text file and the included F16 projector passed a
142
  multimodal image smoke test. Runtime throughput is supplementary and is
 
75
  | Nex-N2.5-mini-Q6_K.gguf | 0.027186 | 93.811% | -0.858% | 4.676% |
76
  | Nex-N2.5-mini-Q5_K_M.gguf | 0.038910 | 92.636% | +0.036% | 5.262% |
77
  | Nex-N2.5-mini-Q4_K_M.gguf | 0.063583 | 90.315% | +3.230% | 6.732% |
78
+ | Nex-N2.5-mini-IQ4_NL.gguf | 0.062792 | 90.273% | +1.378% | 6.774% |
79
+ | Nex-N2.5-mini-IQ4_XS.gguf | 0.065216 | 90.071% | +0.801% | 6.854% |
80
+ | Nex-N2.5-mini-Q3_K_L.gguf | 0.122060 | 86.334% | +3.083% | 9.158% |
81
  | Nex-N2.5-mini-Q3_K_M.gguf | 0.129316 | 85.906% | +4.044% | 9.427% |
82
+ | Nex-N2.5-mini-IQ3_M.gguf | 0.172758 | 83.735% | +13.676% | 11.555% |
83
+ | Nex-N2.5-mini-IQ3_S.gguf | 0.154186 | 84.600% | +10.201% | 10.701% |
84
  | Nex-N2.5-mini-Q2_K.gguf | 0.233133 | 80.709% | +10.839% | 12.770% |
85
+ | Nex-N2.5-mini-Q2_K_S.gguf | 0.278980 | 78.709% | +15.232% | 14.023% |
86
  | Nex-N2.5-mini-IQ2_XS.gguf | 0.516971 | 71.590% | +51.851% | 19.371% |
87
  | Nex-N2.5-mini-IQ1_M.gguf | 0.695877 | 66.064% | +69.116% | 24.275% |
88
  | Nex-N2.5-mini-Q1_0.gguf | 8.616836 | 4.879% | +445003.665% | 61.752% |
89
 
90
  For a general local profile, Q4_K_M is the practical starting point in this
91
+ pilot. IQ4_NL and IQ4_XS are compact Q4-region alternatives. Q5_K_M and Q6_K
92
+ are stronger quality/size choices, while Q8_0 is the highest-bit option.
93
+ Q3_K_L, Q3_K_M, IQ3_M, and IQ3_S are lower-memory Q3-region compromises.
94
+ Q2_K, Q2_K_S, IQ2_XS, IQ1_M, and Q1_0 are memory-constrained experimental
95
+ profiles and should be checked against the intended workload.
96
 
97
  These measurements describe next-token fidelity relative to BF16; they are not
98
  a direct percentage of capabilities retained. Instruction following,
 
143
  revision advertises MTP configuration but does not contain MTP tensors. The
144
  vision projector was converted separately to F16.
145
 
146
+ All fifteen published text GGUF files passed llama.cpp tensor checks, load, and
147
  English generation smoke tests. The BF16 reference also passed the same text
148
  smoke profile. The Q4_K_M text file and the included F16 projector passed a
149
  multimodal image smoke test. Runtime throughput is supplementary and is
SHA256SUMS.txt CHANGED
@@ -1,25 +1,31 @@
1
  cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE
2
  e13761d3e82e9ae6c21c3c6d6c4a812ef19105a3310c09adfa1d407ceb0952cb Nex-N2.5-mini-IQ1_M.gguf
3
  c4bc72337f51431262e22cc7cef92ae6b22bf788328c7fd4f360a47927393401 Nex-N2.5-mini-IQ2_XS.gguf
 
 
 
 
4
  f5d0faeaa7d187d2bce9b2b06923ac5e24f9ad96e18613235095e95d36966790 Nex-N2.5-mini-Q1_0.gguf
5
  009f420aed015eee2e418a1ca68ab75b4a477c6f504a89993edcd58f5ea701c4 Nex-N2.5-mini-Q2_K.gguf
 
 
6
  dc92fc762dd63eed44f945e0940476d9c1ae3f4a28babf3ec5d3a4b0da64c3a0 Nex-N2.5-mini-Q3_K_M.gguf
7
  1cae631a01539db4d3f559683ef1c659f61dcf261f9f63489750665a3380c449 Nex-N2.5-mini-Q4_K_M.gguf
8
  a8fafb845de52adae9c09dd65da211372a23c8194a1a498b4173c6b245ab0404 Nex-N2.5-mini-Q5_K_M.gguf
9
  9ec1715e749525879a9cee386a79f87f06c19e509544fb4e44fd1a46dbdd2c0a Nex-N2.5-mini-Q6_K.gguf
10
  c51b8b6b1c03dd929afd2ce19b4c6b96ea26eecdfce5822ec0b4ae153fa10d93 Nex-N2.5-mini-Q8_0.gguf
11
- 77c946f53ff035903dc33922fc90cb7d939ad956afb5aac68fa9de141a8243e8 README.md
12
  007fdc6302c9be799e145629fc02062a527075a9d5610a0dd41139a5750003f5 assets/Nex-N2.5-Benchmark-white.png
13
  f1753536417ee87cded4bc5017354eb2123c079d20c634403a3d808b2ba3cc5b chat_template.jinja
14
  c128ba00f092ecc75a15fbc31174588faac26cbfbc3d0bff4b828f73f69604e4 mmproj-Nex-N2.5-mini-F16.gguf
15
- 20b5125daebc3e607cf11a2076764b2d2bf2b9e54fc132da53580617007f216e reproducibility/README.md
16
- c81d34e651521832c169e0199fcd24c244446bec62483e00afbcf36f558036fe reproducibility/benchmark_gpu0.sh
17
- 32830fcfd062809e16f22b5a45f5844e00836a92bf9f26fefa008326458c4ced reproducibility/gpu0_smoke_test_ladder.sh
18
- 937a78374825d6038b279a77dd0e5c93df6cf5ee75f390440d69aecbaf2b9d1e reproducibility/manifest.md
19
  68b8ad6d5fdbb973c5728ce691c60e8812346ebf48256a968b7bf1c1514ad143 reproducibility/mmproj_smoke_test_gpu0.sh
20
- bb91ebfd90ed8ee04e8783baa77779eb4c8189e5587438cbd24a65d558b9d3e5 reproducibility/quality-summary.tsv
21
- 50f042f9a4bfff977bbad458e65dc2de75c541f380182cba8fb7e22ece4d2906 reproducibility/quality_eval_gpu0.sh
22
- 3d13281bdd8d317f68d996f287027739b04744874bf1bcd163d15029b8f04b0b reproducibility/quantize_ladder.sh
23
- 38b856bdec5ba97bc34c96cd2e9ddd39c1d602b571da53289af106a36f2527de reproducibility/runtime-summary.tsv
24
  6df41caec8c89eb5270606d4d479c63872283cbd46647352bde0cb19a8a9b9f6 reproducibility/summarize_bench.py
25
- 9fdd4fa33ede09269b23e7b586e3649b707a18918bf024248743f911ecc89f8f reproducibility/summarize_fidelity.py
 
1
  cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE
2
  e13761d3e82e9ae6c21c3c6d6c4a812ef19105a3310c09adfa1d407ceb0952cb Nex-N2.5-mini-IQ1_M.gguf
3
  c4bc72337f51431262e22cc7cef92ae6b22bf788328c7fd4f360a47927393401 Nex-N2.5-mini-IQ2_XS.gguf
4
+ fa8af1d3860ecad6aafc808357786c868f15b01681aeba11f5be9f84bfc19d20 Nex-N2.5-mini-IQ3_M.gguf
5
+ 8f0e0deda6ad7ff8fc4a4186d6e2a090bb57605f3dea3a2f06cc261ade358e44 Nex-N2.5-mini-IQ3_S.gguf
6
+ 48179f330ce195ec46005fdd17ce55a1d3617fb66d669c77879be731ab833f87 Nex-N2.5-mini-IQ4_NL.gguf
7
+ ba9a9db4d80293b9603e469b224f2c54fddc3c07d005122f6c40aae4fba41ec1 Nex-N2.5-mini-IQ4_XS.gguf
8
  f5d0faeaa7d187d2bce9b2b06923ac5e24f9ad96e18613235095e95d36966790 Nex-N2.5-mini-Q1_0.gguf
9
  009f420aed015eee2e418a1ca68ab75b4a477c6f504a89993edcd58f5ea701c4 Nex-N2.5-mini-Q2_K.gguf
10
+ 00c81ec5d66751e0e50a24ce540bc3f19cdd26604435b79c83e4fda76b12a6bb Nex-N2.5-mini-Q2_K_S.gguf
11
+ 0487558daca42d6fc2737386219364721c2025199802c86bcc8724ce1ff84fbb Nex-N2.5-mini-Q3_K_L.gguf
12
  dc92fc762dd63eed44f945e0940476d9c1ae3f4a28babf3ec5d3a4b0da64c3a0 Nex-N2.5-mini-Q3_K_M.gguf
13
  1cae631a01539db4d3f559683ef1c659f61dcf261f9f63489750665a3380c449 Nex-N2.5-mini-Q4_K_M.gguf
14
  a8fafb845de52adae9c09dd65da211372a23c8194a1a498b4173c6b245ab0404 Nex-N2.5-mini-Q5_K_M.gguf
15
  9ec1715e749525879a9cee386a79f87f06c19e509544fb4e44fd1a46dbdd2c0a Nex-N2.5-mini-Q6_K.gguf
16
  c51b8b6b1c03dd929afd2ce19b4c6b96ea26eecdfce5822ec0b4ae153fa10d93 Nex-N2.5-mini-Q8_0.gguf
17
+ 9f134129b8ff35cddae009a116ad03df7a37333fd21797666919f64e41c647d1 README.md
18
  007fdc6302c9be799e145629fc02062a527075a9d5610a0dd41139a5750003f5 assets/Nex-N2.5-Benchmark-white.png
19
  f1753536417ee87cded4bc5017354eb2123c079d20c634403a3d808b2ba3cc5b chat_template.jinja
20
  c128ba00f092ecc75a15fbc31174588faac26cbfbc3d0bff4b828f73f69604e4 mmproj-Nex-N2.5-mini-F16.gguf
21
+ cb0f092074135932a0ea52d525dad369dff862a409c2aab198f1239052065ae9 reproducibility/README.md
22
+ 9ad6df11ac209b8a1087d3248dc964ea5c5b81fea4ec852d68586d4550f2f5e0 reproducibility/benchmark_gpu0.sh
23
+ a72faf14ffa464e929167a4ded723b6be3d17686e18bda08f31ecef0b209425c reproducibility/gpu0_smoke_test_ladder.sh
24
+ cf0a8529ca4afc6cc3f5e987bfcd2b908c35481295f59e1ba2b908b583a16e3b reproducibility/manifest.md
25
  68b8ad6d5fdbb973c5728ce691c60e8812346ebf48256a968b7bf1c1514ad143 reproducibility/mmproj_smoke_test_gpu0.sh
26
+ be778f892e6b692fe2d0a3efd1a1d8f884e1f2dcc28a06d2cb801994ad961cb6 reproducibility/quality-summary.tsv
27
+ 82786e6931b5e78e8d409ea6c9144e8377a7323e3be43929bc00d7d3ccd3c048 reproducibility/quality_eval_gpu0.sh
28
+ 900dd394278723ae0d8bfe45f25c2e2119b728d65bc072884e7f2f938a55625a reproducibility/quantize_ladder.sh
29
+ a5b892528fdcd57e70c8d16e22e202e3f87c64f2f2f7d25da8f4abf8fb3699bf reproducibility/runtime-summary.tsv
30
  6df41caec8c89eb5270606d4d479c63872283cbd46647352bde0cb19a8a9b9f6 reproducibility/summarize_bench.py
31
+ 9adb3adbbd62211e99410a5afb17007b1d6306f8f5b32f1a3759cc9175d6c809 reproducibility/summarize_fidelity.py
reproducibility/README.md CHANGED
@@ -1,9 +1,10 @@
1
  # Reproduction notes
2
 
3
  The release files were produced from the locked Nex-N2.5-mini BF16 GGUF input,
4
- not from another quantized file. The local workspace paths are supplied as
5
- defaults; set `WORKSPACE_ROOT`, `SOURCE`, `IMATRIX`, and `QUANTIZER` when
6
- reproducing elsewhere.
 
7
 
8
  ```bash
9
  bash reproducibility/quantize_ladder.sh
@@ -12,6 +13,13 @@ bash reproducibility/mmproj_smoke_test_gpu0.sh
12
  bash reproducibility/benchmark_gpu0.sh
13
  ```
14
 
 
 
 
 
 
 
 
15
  The smoke, multimodal, and benchmark scripts pin `CUDA_VISIBLE_DEVICES=0` and
16
  use `CUDA0`. The benchmark is a runtime profile only; it is not a quality
17
  score. Raw logs remain in local staging under `reports/` and are not part of
 
1
  # Reproduction notes
2
 
3
  The release files were produced from the locked Nex-N2.5-mini BF16 GGUF input,
4
+ not from another quantized file. The default ladder contains 15 profiles; set
5
+ `QUANTS` to a space-separated subset when running one or more profiles. The
6
+ local workspace paths are supplied as defaults; set `WORKSPACE_ROOT`, `SOURCE`,
7
+ `IMATRIX`, and `QUANTIZER` when reproducing elsewhere.
8
 
9
  ```bash
10
  bash reproducibility/quantize_ladder.sh
 
13
  bash reproducibility/benchmark_gpu0.sh
14
  ```
15
 
16
+ For example, to reproduce only selected profiles:
17
+
18
+ ```bash
19
+ QUANTS="IQ4_NL IQ3_M Q2_K_S" bash reproducibility/quantize_ladder.sh
20
+ QUANTS="IQ4_NL IQ3_M Q2_K_S" bash reproducibility/gpu0_smoke_test_ladder.sh
21
+ ```
22
+
23
  The smoke, multimodal, and benchmark scripts pin `CUDA_VISIBLE_DEVICES=0` and
24
  use `CUDA0`. The benchmark is a runtime profile only; it is not a quality
25
  score. Raw logs remain in local staging under `reports/` and are not part of
reproducibility/benchmark_gpu0.sh CHANGED
@@ -7,6 +7,12 @@ WORKSPACE_ROOT="${WORKSPACE_ROOT:-$(cd -- "$PACKAGE_ROOT/.." && pwd)}"
7
  BENCH="${BENCH:-$WORKSPACE_ROOT/tools-llama.cpp-qwen4exp-mtp-direct/build-a10m-direct/bin/llama-bench}"
8
  OUTDIR="${OUTDIR:-$WORKSPACE_ROOT/reports/nex-n2.5-mini/benchmark-gpu0}"
9
  SOURCE="${SOURCE:-$WORKSPACE_ROOT/source-official-bf16-nex-n2.5-mini/Nex-N2.5-mini-BF16.gguf}"
 
 
 
 
 
 
10
 
11
  [[ -x "$BENCH" ]] || { echo "Missing BENCH: $BENCH" >&2; exit 1; }
12
  [[ -s "$SOURCE" ]] || { echo "Missing BF16 SOURCE: $SOURCE" >&2; exit 1; }
@@ -25,7 +31,6 @@ export CUDA_VISIBLE_DEVICES=0
25
  nvidia-smi --query-gpu=index,name,memory.total,memory.used,utilization.gpu --format=csv
26
  } > "$OUTDIR/environment.txt"
27
 
28
- models=(BF16 Q8_0 Q6_K Q5_K_M Q4_K_M Q3_K_M Q2_K IQ2_XS IQ1_M Q1_0)
29
  for quant in "${models[@]}"; do
30
  if [[ "$quant" == BF16 ]]; then
31
  model="$SOURCE"
 
7
  BENCH="${BENCH:-$WORKSPACE_ROOT/tools-llama.cpp-qwen4exp-mtp-direct/build-a10m-direct/bin/llama-bench}"
8
  OUTDIR="${OUTDIR:-$WORKSPACE_ROOT/reports/nex-n2.5-mini/benchmark-gpu0}"
9
  SOURCE="${SOURCE:-$WORKSPACE_ROOT/source-official-bf16-nex-n2.5-mini/Nex-N2.5-mini-BF16.gguf}"
10
+ ALL_MODELS=(BF16 Q8_0 Q6_K Q5_K_M Q4_K_M IQ4_NL IQ4_XS Q3_K_L Q3_K_M IQ3_M IQ3_S Q2_K Q2_K_S IQ2_XS IQ1_M Q1_0)
11
+ if [[ -n "${QUANTS:-}" ]]; then
12
+ read -r -a models <<< "$QUANTS"
13
+ else
14
+ models=("${ALL_MODELS[@]}")
15
+ fi
16
 
17
  [[ -x "$BENCH" ]] || { echo "Missing BENCH: $BENCH" >&2; exit 1; }
18
  [[ -s "$SOURCE" ]] || { echo "Missing BF16 SOURCE: $SOURCE" >&2; exit 1; }
 
31
  nvidia-smi --query-gpu=index,name,memory.total,memory.used,utilization.gpu --format=csv
32
  } > "$OUTDIR/environment.txt"
33
 
 
34
  for quant in "${models[@]}"; do
35
  if [[ "$quant" == BF16 ]]; then
36
  model="$SOURCE"
reproducibility/gpu0_smoke_test_ladder.sh CHANGED
@@ -7,6 +7,12 @@ WORKSPACE_ROOT="${WORKSPACE_ROOT:-$(cd -- "$PACKAGE_ROOT/.." && pwd)}"
7
  CLI="${CLI:-$WORKSPACE_ROOT/tools-llama.cpp-qwen4exp-mtp-direct/build-a10m-direct/bin/llama-cli}"
8
  OUTDIR="${OUTDIR:-$WORKSPACE_ROOT/reports/nex-n2.5-mini/smoke-tests-gpu0}"
9
  THREADS="${THREADS:-64}"
 
 
 
 
 
 
10
 
11
  [[ -x "$CLI" ]] || { echo "Missing CLI: $CLI" >&2; exit 1; }
12
  mkdir -p "$OUTDIR"
@@ -17,7 +23,6 @@ export CUDA_VISIBLE_DEVICES=0
17
  summary="$OUTDIR/summary.tsv"
18
  printf 'quantization\tstatus\tlog\n' > "$summary"
19
 
20
- models=(Q8_0 Q6_K Q5_K_M Q4_K_M Q3_K_M Q2_K IQ2_XS IQ1_M Q1_0)
21
  for quant in "${models[@]}"; do
22
  model="$PACKAGE_ROOT/Nex-N2.5-mini-${quant}.gguf"
23
  log="$OUTDIR/${quant}.log"
 
7
  CLI="${CLI:-$WORKSPACE_ROOT/tools-llama.cpp-qwen4exp-mtp-direct/build-a10m-direct/bin/llama-cli}"
8
  OUTDIR="${OUTDIR:-$WORKSPACE_ROOT/reports/nex-n2.5-mini/smoke-tests-gpu0}"
9
  THREADS="${THREADS:-64}"
10
+ ALL_MODELS=(Q8_0 Q6_K Q5_K_M Q4_K_M IQ4_NL IQ4_XS Q3_K_L Q3_K_M IQ3_M IQ3_S Q2_K Q2_K_S IQ2_XS IQ1_M Q1_0)
11
+ if [[ -n "${QUANTS:-}" ]]; then
12
+ read -r -a models <<< "$QUANTS"
13
+ else
14
+ models=("${ALL_MODELS[@]}")
15
+ fi
16
 
17
  [[ -x "$CLI" ]] || { echo "Missing CLI: $CLI" >&2; exit 1; }
18
  mkdir -p "$OUTDIR"
 
23
  summary="$OUTDIR/summary.tsv"
24
  printf 'quantization\tstatus\tlog\n' > "$summary"
25
 
 
26
  for quant in "${models[@]}"; do
27
  model="$PACKAGE_ROOT/Nex-N2.5-mini-${quant}.gguf"
28
  log="$OUTDIR/${quant}.log"
reproducibility/manifest.md CHANGED
@@ -75,8 +75,9 @@ published quantization was produced directly from the BF16 GGUF by
75
  `reproducibility/quantize_ladder.sh` with 128 quantization threads:
76
 
77
  - `Q8_0`: direct BF16 quantization without an imatrix
78
- - `Q6_K`, `Q5_K_M`, `Q4_K_M`, `Q3_K_M`, `Q2_K`, `IQ2_XS`, `IQ1_M`, `Q1_0`:
79
- BF16 source plus the model-specific imatrix
 
80
 
81
  No published file was used as the source for another quantization.
82
 
@@ -87,7 +88,7 @@ the test processes. The exact executable and flags are retained in the public
87
  reproduction scripts, while raw logs remain local under `reports/`.
88
 
89
  - BF16 reference: text tensor check, load, and English generation pass
90
- - 9/9 text GGUF artifacts: tensor check, load, and English generation pass
91
  - `Nex-N2.5-mini-Q4_K_M.gguf` plus
92
  `mmproj-Nex-N2.5-mini-F16.gguf`: image load and English description pass
93
  - Text smoke profile: 2,048 context, 64 generated tokens, full GPU-layer
@@ -115,7 +116,7 @@ difference. The raw reference-logit files and evaluation logs are local only.
115
  ## Runtime profile
116
 
117
  `reproducibility/runtime-summary.tsv` contains the compact runtime comparison
118
- for BF16 and the nine quantizations. It was measured with `llama-bench` using
119
  256 prompt tokens, 64 generation tokens, batch/ubatch 512, 64 CPU threads,
120
  three repetitions, full GPU-layer setting, `--fit-target 1024`, and one CPU MoE
121
  layer setting. Runtime throughput is supplementary and should not be read as a
 
75
  `reproducibility/quantize_ladder.sh` with 128 quantization threads:
76
 
77
  - `Q8_0`: direct BF16 quantization without an imatrix
78
+ - `Q6_K`, `Q5_K_M`, `Q4_K_M`, `IQ4_NL`, `IQ4_XS`, `Q3_K_L`, `Q3_K_M`,
79
+ `IQ3_M`, `IQ3_S`, `Q2_K`, `Q2_K_S`, `IQ2_XS`, `IQ1_M`, `Q1_0`: BF16 source
80
+ plus the model-specific imatrix
81
 
82
  No published file was used as the source for another quantization.
83
 
 
88
  reproduction scripts, while raw logs remain local under `reports/`.
89
 
90
  - BF16 reference: text tensor check, load, and English generation pass
91
+ - 15/15 text GGUF artifacts: tensor check, load, and English generation pass
92
  - `Nex-N2.5-mini-Q4_K_M.gguf` plus
93
  `mmproj-Nex-N2.5-mini-F16.gguf`: image load and English description pass
94
  - Text smoke profile: 2,048 context, 64 generated tokens, full GPU-layer
 
116
  ## Runtime profile
117
 
118
  `reproducibility/runtime-summary.tsv` contains the compact runtime comparison
119
+ for BF16 and the fifteen quantizations. It was measured with `llama-bench` using
120
  256 prompt tokens, 64 generation tokens, batch/ubatch 512, 64 CPU threads,
121
  three repetitions, full GPU-layer setting, `--fit-target 1024`, and one CPU MoE
122
  layer setting. Runtime throughput is supplementary and should not be read as a
reproducibility/quality-summary.tsv CHANGED
@@ -3,8 +3,14 @@ Q8_0 0.023277 94.523 6.750630 6.684743 0.986 4.132
3
  Q6_K 0.027186 93.811 6.627382 6.684743 -0.858 4.676
4
  Q5_K_M 0.038910 92.636 6.687126 6.684743 0.036 5.262
5
  Q4_K_M 0.063583 90.315 6.900634 6.684743 3.230 6.732
 
 
 
6
  Q3_K_M 0.129316 85.906 6.955046 6.684743 4.044 9.427
 
 
7
  Q2_K 0.233133 80.709 7.409299 6.684743 10.839 12.770
 
8
  IQ2_XS 0.516971 71.590 10.150869 6.684743 51.851 19.371
9
  IQ1_M 0.695877 66.064 11.304952 6.684743 69.116 24.275
10
  Q1_0 8.616836 4.879 29754.033896 6.684743 445003.665 61.752
 
3
  Q6_K 0.027186 93.811 6.627382 6.684743 -0.858 4.676
4
  Q5_K_M 0.038910 92.636 6.687126 6.684743 0.036 5.262
5
  Q4_K_M 0.063583 90.315 6.900634 6.684743 3.230 6.732
6
+ IQ4_NL 0.062792 90.273 6.776839 6.684743 1.378 6.774
7
+ IQ4_XS 0.065216 90.071 6.738274 6.684743 0.801 6.854
8
+ Q3_K_L 0.122060 86.334 6.890803 6.684743 3.083 9.158
9
  Q3_K_M 0.129316 85.906 6.955046 6.684743 4.044 9.427
10
+ IQ3_M 0.172758 83.735 7.598980 6.684743 13.676 11.555
11
+ IQ3_S 0.154186 84.600 7.366668 6.684743 10.201 10.701
12
  Q2_K 0.233133 80.709 7.409299 6.684743 10.839 12.770
13
+ Q2_K_S 0.278980 78.709 7.702984 6.684743 15.232 14.023
14
  IQ2_XS 0.516971 71.590 10.150869 6.684743 51.851 19.371
15
  IQ1_M 0.695877 66.064 11.304952 6.684743 69.116 24.275
16
  Q1_0 8.616836 4.879 29754.033896 6.684743 445003.665 61.752
reproducibility/quality_eval_gpu0.sh CHANGED
@@ -10,6 +10,12 @@ TEST="${TEST:-$WORKSPACE_ROOT/calibration/wikitext-2-raw/wiki.test.raw}"
10
  VALID="${VALID:-$WORKSPACE_ROOT/calibration/wikitext-2-raw/wiki.valid.raw}"
11
  OUTDIR="${OUTDIR:-$WORKSPACE_ROOT/reports/nex-n2.5-mini/quality-eval-gpu0}"
12
  CHUNKS="${CHUNKS:-8}"
 
 
 
 
 
 
13
 
14
  [[ -x "$PPL" ]] || { echo "Missing PPL binary: $PPL" >&2; exit 1; }
15
  [[ -s "$BF16" && -s "$TEST" && -s "$VALID" ]] || { echo "Missing BF16 or hold-out corpus" >&2; exit 1; }
@@ -39,7 +45,7 @@ for split in test valid; do
39
  fi
40
  done
41
 
42
- for quant in Q8_0 Q6_K Q5_K_M Q4_K_M Q3_K_M Q2_K IQ2_XS IQ1_M Q1_0; do
43
  model="$PACKAGE_ROOT/Nex-N2.5-mini-${quant}.gguf"
44
  [[ -s "$model" ]] || { echo "Missing model: $model" >&2; exit 1; }
45
  for split in test valid; do
@@ -54,4 +60,5 @@ done
54
 
55
  python3 "$SCRIPT_DIR/summarize_fidelity.py" "$OUTDIR" \
56
  "$PACKAGE_ROOT/reproducibility/quality-summary.tsv" \
57
- --chunks "$CHUNKS"
 
 
10
  VALID="${VALID:-$WORKSPACE_ROOT/calibration/wikitext-2-raw/wiki.valid.raw}"
11
  OUTDIR="${OUTDIR:-$WORKSPACE_ROOT/reports/nex-n2.5-mini/quality-eval-gpu0}"
12
  CHUNKS="${CHUNKS:-8}"
13
+ ALL_QUANTS=(Q8_0 Q6_K Q5_K_M Q4_K_M IQ4_NL IQ4_XS Q3_K_L Q3_K_M IQ3_M IQ3_S Q2_K Q2_K_S IQ2_XS IQ1_M Q1_0)
14
+ if [[ -n "${QUANTS:-}" ]]; then
15
+ read -r -a QUANT_LIST <<< "$QUANTS"
16
+ else
17
+ QUANT_LIST=("${ALL_QUANTS[@]}")
18
+ fi
19
 
20
  [[ -x "$PPL" ]] || { echo "Missing PPL binary: $PPL" >&2; exit 1; }
21
  [[ -s "$BF16" && -s "$TEST" && -s "$VALID" ]] || { echo "Missing BF16 or hold-out corpus" >&2; exit 1; }
 
45
  fi
46
  done
47
 
48
+ for quant in "${QUANT_LIST[@]}"; do
49
  model="$PACKAGE_ROOT/Nex-N2.5-mini-${quant}.gguf"
50
  [[ -s "$model" ]] || { echo "Missing model: $model" >&2; exit 1; }
51
  for split in test valid; do
 
60
 
61
  python3 "$SCRIPT_DIR/summarize_fidelity.py" "$OUTDIR" \
62
  "$PACKAGE_ROOT/reproducibility/quality-summary.tsv" \
63
+ --chunks "$CHUNKS" \
64
+ --quants "${QUANT_LIST[@]}"
reproducibility/quantize_ladder.sh CHANGED
@@ -11,6 +11,12 @@ QUANTIZER="${QUANTIZER:-$WORKSPACE_ROOT/tools-llama.cpp-qwen4exp-mtp-direct/buil
11
  OUTDIR="${OUTDIR:-$PACKAGE_ROOT}"
12
  LOGDIR="${LOGDIR:-$WORKSPACE_ROOT/reports/nex-n2.5-mini/quantize-logs}"
13
  THREADS="${THREADS:-128}"
 
 
 
 
 
 
14
 
15
  [[ -s "$SOURCE" ]] || { echo "Missing SOURCE: $SOURCE" >&2; exit 1; }
16
  [[ -x "$QUANTIZER" ]] || { echo "Missing QUANTIZER: $QUANTIZER" >&2; exit 1; }
@@ -37,13 +43,8 @@ run_quant() {
37
  echo "done $type"
38
  }
39
 
40
- # Standard release ladder. Every output is produced directly from SOURCE.
41
- run_quant Q8_0
42
- run_quant Q6_K
43
- run_quant Q5_K_M
44
- run_quant Q4_K_M
45
- run_quant Q3_K_M
46
- run_quant Q2_K
47
- run_quant IQ2_XS
48
- run_quant IQ1_M
49
- run_quant Q1_0
 
11
  OUTDIR="${OUTDIR:-$PACKAGE_ROOT}"
12
  LOGDIR="${LOGDIR:-$WORKSPACE_ROOT/reports/nex-n2.5-mini/quantize-logs}"
13
  THREADS="${THREADS:-128}"
14
+ ALL_QUANTS=(Q8_0 Q6_K Q5_K_M Q4_K_M IQ4_NL IQ4_XS Q3_K_L Q3_K_M IQ3_M IQ3_S Q2_K Q2_K_S IQ2_XS IQ1_M Q1_0)
15
+ if [[ -n "${QUANTS:-}" ]]; then
16
+ read -r -a QUANT_LIST <<< "$QUANTS"
17
+ else
18
+ QUANT_LIST=("${ALL_QUANTS[@]}")
19
+ fi
20
 
21
  [[ -s "$SOURCE" ]] || { echo "Missing SOURCE: $SOURCE" >&2; exit 1; }
22
  [[ -x "$QUANTIZER" ]] || { echo "Missing QUANTIZER: $QUANTIZER" >&2; exit 1; }
 
43
  echo "done $type"
44
  }
45
 
46
+ # Every output is produced directly from SOURCE. QUANTS can narrow a run, e.g.
47
+ # QUANTS="IQ4_NL IQ4_XS" bash quantize_ladder.sh
48
+ for quant in "${QUANT_LIST[@]}"; do
49
+ run_quant "$quant"
50
+ done
 
 
 
 
 
reproducibility/runtime-summary.tsv CHANGED
@@ -2,8 +2,14 @@ model file_size_bytes file_size_gib relative_to_bf16_pct prompt_tok_s generation
2
  Nex-N2.5-mini-BF16.gguf 69376636992 64.61 100.0 81.49 15.58 3
3
  Nex-N2.5-mini-IQ1_M.gguf 8239208480 7.67 11.9 708.86 113.61 3
4
  Nex-N2.5-mini-IQ2_XS.gguf 10507030560 9.79 15.1 1306.48 107.88 3
 
 
 
 
5
  Nex-N2.5-mini-Q1_0.gguf 5316528160 4.95 7.7 2556.30 141.15 3
6
  Nex-N2.5-mini-Q2_K.gguf 12939593760 12.05 18.7 1193.68 110.57 3
 
 
7
  Nex-N2.5-mini-Q3_K_M.gguf 16764764192 15.61 24.2 1338.77 100.31 3
8
  Nex-N2.5-mini-Q4_K_M.gguf 21166757920 19.71 30.5 702.23 78.02 3
9
  Nex-N2.5-mini-Q5_K_M.gguf 24729131040 23.03 35.6 438.27 53.74 3
 
2
  Nex-N2.5-mini-BF16.gguf 69376636992 64.61 100.0 81.49 15.58 3
3
  Nex-N2.5-mini-IQ1_M.gguf 8239208480 7.67 11.9 708.86 113.61 3
4
  Nex-N2.5-mini-IQ2_XS.gguf 10507030560 9.79 15.1 1306.48 107.88 3
5
+ Nex-N2.5-mini-IQ3_M.gguf 15429530112 14.37 22.2 1409.79 103.02 3
6
+ Nex-N2.5-mini-IQ3_S.gguf 15239434752 14.19 22.0 1410.51 101.16 3
7
+ Nex-N2.5-mini-IQ4_NL.gguf 19768289792 18.41 28.5 952.33 77.28 3
8
+ Nex-N2.5-mini-IQ4_XS.gguf 18717788672 17.43 27.0 1265.77 83.57 3
9
  Nex-N2.5-mini-Q1_0.gguf 5316528160 4.95 7.7 2556.30 141.15 3
10
  Nex-N2.5-mini-Q2_K.gguf 12939593760 12.05 18.7 1193.68 110.57 3
11
+ Nex-N2.5-mini-Q2_K_S.gguf 12141107712 11.31 17.5 1171.30 120.28 3
12
+ Nex-N2.5-mini-Q3_K_L.gguf 18104340992 16.86 26.1 1341.48 97.17 3
13
  Nex-N2.5-mini-Q3_K_M.gguf 16764764192 15.61 24.2 1338.77 100.31 3
14
  Nex-N2.5-mini-Q4_K_M.gguf 21166757920 19.71 30.5 702.23 78.02 3
15
  Nex-N2.5-mini-Q5_K_M.gguf 24729131040 23.03 35.6 438.27 53.74 3
reproducibility/summarize_fidelity.py CHANGED
@@ -4,6 +4,7 @@
4
  from __future__ import annotations
5
 
6
  import argparse
 
7
  import re
8
  from pathlib import Path
9
 
@@ -36,9 +37,12 @@ def main() -> None:
36
  parser.add_argument("logdir", type=Path)
37
  parser.add_argument("output", type=Path)
38
  parser.add_argument("--chunks", type=int, default=8)
 
39
  args = parser.parse_args()
40
 
41
- quants = ("Q8_0", "Q6_K", "Q5_K_M", "Q4_K_M", "Q3_K_M", "Q2_K", "IQ2_XS", "IQ1_M", "Q1_0")
 
 
42
  rows: list[tuple[str, dict[str, float]]] = []
43
  for quant in quants:
44
  records = [
 
4
  from __future__ import annotations
5
 
6
  import argparse
7
+ import os
8
  import re
9
  from pathlib import Path
10
 
 
37
  parser.add_argument("logdir", type=Path)
38
  parser.add_argument("output", type=Path)
39
  parser.add_argument("--chunks", type=int, default=8)
40
+ parser.add_argument("--quants", nargs="+", help="quantization names to summarize")
41
  args = parser.parse_args()
42
 
43
+ all_quants = ("Q8_0", "Q6_K", "Q5_K_M", "Q4_K_M", "IQ4_NL", "IQ4_XS", "Q3_K_L", "Q3_K_M", "IQ3_M", "IQ3_S", "Q2_K", "Q2_K_S", "IQ2_XS", "IQ1_M", "Q1_0")
44
+ env_quants = os.environ.get("QUANTS", "").split()
45
+ quants = tuple(args.quants or env_quants or all_quants)
46
  rows: list[tuple[str, dict[str, float]]] = []
47
  for quant in quants:
48
  records = [