gitcommit90 commited on
Commit
0a12b9a
·
verified ·
1 Parent(s): a57aa9f

Add measured figures4papers-style charts and GitHub companion links

Browse files
.gitattributes CHANGED
@@ -44,3 +44,5 @@ examples/moon-simulation/moon-simulation.gif filter=lfs diff=lfs merge=lfs -text
44
  examples/teacher-day/teacher-day-horizontal.jpg filter=lfs diff=lfs merge=lfs -text
45
  tokenizer.json filter=lfs diff=lfs merge=lfs -text
46
  examples/odyssey/odyssey-preview.gif filter=lfs diff=lfs merge=lfs -text
 
 
 
44
  examples/teacher-day/teacher-day-horizontal.jpg filter=lfs diff=lfs merge=lfs -text
45
  tokenizer.json filter=lfs diff=lfs merge=lfs -text
46
  examples/odyssey/odyssey-preview.gif filter=lfs diff=lfs merge=lfs -text
47
+ figures/performance-summary.png filter=lfs diff=lfs merge=lfs -text
48
+ figures/quality-summary.png filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -28,6 +28,27 @@ tags:
28
  A calibrated, packed **NVFP4** (ModelOpt) checkpoint of SenseNova-Loop-9B-Preview with the **MTP head kept BF16**
29
  so MTP speculative decoding works, validated on an NVIDIA DGX Spark (GB10, SM121) with **native W4A4 FP4 GEMMs**.
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  ## Provenance
32
  | Item | Value |
33
  | --- | --- |
@@ -139,9 +160,24 @@ Marlin weight-only kernels; it is faster for single-stream decode on GB10 but sl
139
  checkpoint or MTP; use the SGLang runtime above.
140
 
141
  ## Usage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  ```bash
143
- # from the repository root (Docker + NVIDIA container runtime required)
144
- runtime/serve_sglang.sh . # NVFP4 W4A4 + MTP (NEXTN, 3 steps), 127.0.0.1:30080
145
  curl -s http://127.0.0.1:30080/v1/models
146
  python3 runtime/probe.py http://127.0.0.1:30080/v1 sensenova-loop-9b-nvfp4 [image.jpg] # text / thinking / tool / image smoke test
147
  # options: --no-mtp ; W4A16: SGLANG_DISABLE_SILU_FP4_QUANT_FUSION=1 runtime/serve_sglang.sh . --fp4-gemm-backend marlin
 
28
  A calibrated, packed **NVFP4** (ModelOpt) checkpoint of SenseNova-Loop-9B-Preview with the **MTP head kept BF16**
29
  so MTP speculative decoding works, validated on an NVIDIA DGX Spark (GB10, SM121) with **native W4A4 FP4 GEMMs**.
30
 
31
+ ## Downloads and companion source
32
+
33
+ - **Weights and complete model files:** [https://huggingface.co/gitcommit90/SenseNova-Loop-9B-Preview-NVFP4](https://huggingface.co/gitcommit90/SenseNova-Loop-9B-Preview-NVFP4)
34
+ - **Runtime, quantization recipe, evaluation harness and charts:** [https://github.com/gitcommit90/sensenova-loop-9b-nvfp4-dgx-spark](https://github.com/gitcommit90/sensenova-loop-9b-nvfp4-dgx-spark)
35
+
36
+ This is the **October 30 functional-release baseline**, not the later speed-optimization work.
37
+ Weights live on Hugging Face; the GitHub companion does not duplicate the 9.38 GB checkpoint.
38
+
39
+ ## Measured results at a glance
40
+
41
+ [![Measured single-user speed, TTFT and aggregate concurrency throughput](figures/performance-summary.png)](figures/performance-summary.pdf)
42
+
43
+ [![Small-suite quality preservation and paired uncertainty](figures/quality-summary.png)](figures/quality-summary.pdf)
44
+
45
+ Figures are regenerated directly from the checked-in evaluation JSONs with
46
+ [`figures/plot_benchmarks.py`](figures/plot_benchmarks.py), following the publication-figure conventions of
47
+ [figures4papers](https://github.com/ChenLiu-1996/figures4papers).
48
+ PNG previews, vector PDF/SVG exports, and plotting dependencies are included.
49
+ **Aggregate throughput is not per-user decode speed.** Quality scores are small-subset regression measurements,
50
+ not full-benchmark scores or a comparison against Qwen.
51
+
52
  ## Provenance
53
  | Item | Value |
54
  | --- | --- |
 
160
  checkpoint or MTP; use the SGLang runtime above.
161
 
162
  ## Usage
163
+ Docker and the NVIDIA container runtime are required. Use **one** of the following paths.
164
+
165
+ **From the GitHub companion** (weights are downloaded once to an ignored local directory):
166
+ ```bash
167
+ git clone https://github.com/gitcommit90/sensenova-loop-9b-nvfp4-dgx-spark.git
168
+ cd sensenova-loop-9b-nvfp4-dgx-spark
169
+ python3 -m venv .venv-download
170
+ .venv-download/bin/pip install 'huggingface_hub>=1,<2'
171
+ .venv-download/bin/hf download gitcommit90/SenseNova-Loop-9B-Preview-NVFP4 --local-dir models/SenseNova-Loop-9B-Preview-NVFP4
172
+ # Verify the downloaded release before serving:
173
+ (cd models/SenseNova-Loop-9B-Preview-NVFP4 && sha256sum -c SHA256SUMS)
174
+ bash runtime/serve_sglang.sh models/SenseNova-Loop-9B-Preview-NVFP4
175
+ ```
176
+
177
+ **From a complete Hugging Face snapshot** containing `model.safetensors`:
178
  ```bash
179
+ # from the snapshot root
180
+ bash runtime/serve_sglang.sh . # NVFP4 W4A4 + MTP (NEXTN, 3 steps), 127.0.0.1:30080
181
  curl -s http://127.0.0.1:30080/v1/models
182
  python3 runtime/probe.py http://127.0.0.1:30080/v1 sensenova-loop-9b-nvfp4 [image.jpg] # text / thinking / tool / image smoke test
183
  # options: --no-mtp ; W4A16: SGLANG_DISABLE_SILU_FP4_QUANT_FUSION=1 runtime/serve_sglang.sh . --fp4-gemm-backend marlin
SHA256SUMS CHANGED
@@ -1,65 +1,74 @@
1
- a4aee8afcf2e0711942cf848899be66016f8d14a889ff9ede07bca099c28f715 ./chat_template.jinja
2
- 5bec5643138a09f2917a0b7471a673baecfbf85f59af49cc048f4318f32e7a3d ./config.json
3
- 021b420e4757b37909200d1cc52bf308116461735a6b50c67df652267f54c587 ./evaluation/compare_vs_ref.json
4
- 5d01579bee6c0863addc3236392b4d88c8d7a7d3cf66b62ae65db1430c0110a3 ./evaluation/eval_data_MANIFEST.json
5
- 6df2bf0438b64d1353c1737e3659c86bce501dc188de9ce448492895e8b5ae63 ./evaluation/harness/build_eval_data.py
6
- e2818e8c8ff581d65ac8a4dbfc07b58eaea97546dfd63cc3f8f31faaf8ed0f22 ./evaluation/harness/common.py
7
- 0423139c0573e09181f065dbdb273b123aa4a966a5ec57a3643b2fe4f8f43b92 ./evaluation/harness/compare.py
8
- 535255ccff9b6032494d918331dce7d7bbd5a455771143afeaf7977458b52bf4 ./evaluation/harness/ifeval_lite.py
9
- c0e6d611823b672513730fae4f83d6e72cb0927202a0df1112176465d316731f ./evaluation/harness/mock_server.py
10
- 8909f46e7c6383cce45dbad9c64d78035316031b6f7d99be664ae8b7c3d3577a ./evaluation/harness/perf_bench.py
11
- d2b24fe51830bf6ed99af01c66ed1b861a50eff88d130fac3f9369e6865837cd ./evaluation/harness/requirements.lock
12
- 49f85f32fb01f029182491d5dd803c26c37814e9ecfa283f37d705543242bc3d ./evaluation/harness/run_eval.py
13
- fe25e6a9d5432922ff4509a9a80e7b996072ee2091353840a6d0fdf764d8daef ./evaluation/harness/tasks.py
14
- 8c28fad23d10bfa56897a6c0d306b0a474cb6bc2ac7a08355682bd697a2dcd3f ./evaluation/harness/test_harness.py
15
- ec6899745f66eaf5eb92975341bd44b8c6d5ede2116ea6d0d56d8ba008ae7702 ./evaluation/harness/tool_cases.py
16
- 90dbf7789104b8763f8980f564d8da2c6d033a2207707a386dba8756cd8d2063 ./evaluation/hf_bf16_checks.json
17
- a1a5de6483f0d8c2d759b9c60cb86da4794a4036c6101bba104cc1d5dba63dfb ./evaluation/kernel_summary.txt
18
- ce49434ad0c1806bcf01a57957add6fb2ca67f1aa6a61394ae248a75d41b7c80 ./evaluation/nvfp4_v1_mtp_release_probe.json
19
- 4cfff7659e057c02133576124dd0dd65b28a8d6869d1b460d68055dc01a2454a ./evaluation/nvfp4_v1_probe.json
20
- a588317f6ba1071ab5f67a850e0ced977dfbf3f3dd0b34ea2d5ac54767947c17 ./evaluation/perf_sglang_bf16.json
21
- 7f9aa0a53f019234a256057b0f759695cf0ac266ac033e3e02b84bf71ffcec41 ./evaluation/perf_sglang_bf16_mtp.json
22
- 8a115863344c244470a3a18959e89c914aa852602e75cb365554d62adfd66c9f ./evaluation/perf_sglang_nvfp4_v1.json
23
- d68a9f7a151718b65b6782ea48f4db0aa60f068ab8636eb51f2f2935a61b0058 ./evaluation/perf_sglang_nvfp4_v1_marlin_w4a16.json
24
- 546730231cdf739cf84f0d92768c2a31378c165b3e48a1840117b9a2faa5035a ./evaluation/perf_sglang_nvfp4_v1_mtp.json
25
- ccdb9203010fc0534d37b0b475d85f088f5e62568d3cbd76229af4d8e50ffb28 ./evaluation/QUALITY_GATES.md
26
- 8f50277ef8a232dc4abab998fa80ffdcc46c13cbebea1d9328e93878af035157 ./evaluation/sglang_bf16_mtp_probe.json
27
- 92c0708bb0d27772bedefc3d5f458b742c48325025af5a1269535de6dca2d914 ./evaluation/sglang_bf16_probe.json
28
- ec88f909edcbf225936bbeac88ede9312520593eb53db976d5079d9dd6c45ed1 ./evaluation/summary_sglang_bf16.json
29
- 58cd6bbadfc9fc070a784e65810414a24919084e4570e1ff7680e8a00f14504b ./evaluation/summary_sglang_bf16_mtp.json
30
- c6d75330180b2d1bd5f2dda574afeee8844e18e44c46ba0f3a1128eb052d2326 ./evaluation/summary_sglang_nvfp4_v1.json
31
- aff7bcc52ad3e83e6394a8d31e733d8b5725d213836beb98824c397e726c66c6 ./evaluation/summary_sglang_nvfp4_v1_marlin_w4a16_gsm8k.json
32
- 944d3ce06cffbfb7a8e10c1af186aaa62a196e6b96cd8c3a1e6800e5d998fa70 ./evaluation/summary_sglang_nvfp4_v1_mtp.json
33
- f288bb4281580138395c6acc7b3adb62f45c21530bc0708cb2cf9edf093f6a4f ./generation_config.json
34
- 8951a99119cdcd06c699d91ccc5db0a40b595961041a5ec2e6103b88112757e8 ./.gitattributes
35
- b197af747a1f072419a8e7e2db3252d9aeea84d21f65db37f748430ab7f83bfd ./hf_quant_config.json
36
- c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 ./LICENSE
37
- 26e11d3522aa730c0ba031340ce42632bc2834da8cc0b6804006bb207d979a5b ./modeling_sensenova_loop.py
38
- 1e420ea69111b7bb3c7c529cdbbb4ff4e6ebb531c0cd2be5c634cd88cd40eaca ./model.safetensors
39
- 3a159dfec9978a186a72ba085e0ad6a050f3968d8b364218d7bd13f5c89381f2 ./preprocessor_config.json
40
- d89ef49ce9cd37fbf510158e13c1ef063d9286411c1ec9049932dbe0487143b1 ./processor_config.json
41
- df49d802cffe959b3176eed9abee2277d3e4291cdaf2d9abf8430ee17aeba700 ./quantization/10_reference_checks.py
42
- 67d6edacb11e519afb6d81adb4c559930b17ce9a8adeed0e7c8c2043d8383337 ./quantization/20_quantize.py
43
- 27dcbf33dfb7e83cace92cc8221e20d2ead29d4090bf15c9348e181b6bb5ba47 ./quantization/30_verify_export.py
44
- dc54da6f2e37136c3172779d86ae0134a353942f341eaa8934d3000a01f34682 ./quantization/build_calib.py
45
- 04c164fb57e8125eed5d624cefa806a61bc28cb929aca6406d2923ea43f11825 ./quantization/calib_v1.jsonl.sha256
46
- 3a2015bbf02262d97e0de28f4fa2b3e73d43f58635a507a96788bf7b587236d8 ./quantization/calib_v1.meta.json
47
- 4d71bc0045ee80c45f5eef89e5e721e064e2505020b327942501b017daf0fdf8 ./quantization/quantization_stats.json
48
- 723419a376e5f2339f4f0d4f9376b16ea2d5359e54659ccb85c2bb2d5c3028fd ./quantization/requirements-quant.lock
49
- be632c83213d44b4a18f367c59fcb55f5d0d738b8c67f64ccc61df3c6a9fb598 ./quantization/verify.json
50
- 9d1df67a6eb124431baf4bfbd9eb9b30b00d8f9a8116dec05c847a39036ba8a3 ./README.md
51
- 1b95e589cd65a97a97fae93cdeec07fcadbf0ff204be746fe20db32550a2c248 ./runtime/COMPAT_NOTES.md
52
- e00d2fafe780fcf4c04ab52b040e43ec7143c7bd6e070637563f2724b59888d1 ./runtime/overlay/python/sglang/srt/configs/__init__.py
53
- bdc7fa2055b799ce07441a5d499fafa554b7b797d4c4a24fd251b846b51260fd ./runtime/overlay/python/sglang/srt/configs/model_config.py
54
- eb6df8f37ac06e6f439dd24f687e5bf1078599ade28acaa20d8799bf77c7e057 ./runtime/overlay/python/sglang/srt/configs/sensenova_loop.py
55
- b3b4959f2336d1afdf4f0353a0a0eecfc38495226912022dd862489cbb532c98 ./runtime/overlay/python/sglang/srt/layers/rotary_embedding/mrope_rope_index.py
56
- 0883bffeff0519db0fb8035b3260eca57c48ebe00e42323fb75cb7f455c1ddad ./runtime/overlay/python/sglang/srt/models/sensenova_loop.py
57
- 7fc07bd18b974aa8f54013f2bb39536a65d32ad0cc1a1df2d239ead0dc136754 ./runtime/overlay/python/sglang/srt/multimodal/processors/qwen_vl.py
58
- 68e1076237ed67adfa06530139d79df0783a2519620443a58cce94c5143d56c4 ./runtime/overlay/python/sglang/srt/utils/hf_transformers/common.py
59
- d93e6342f9487567a7847443eb47b41701b4510474cd5664c8dc51b37eb6f6fd ./runtime/patches/model_config_mtp_draft.patch
60
- 029fa25bb4ea5a16c9fce8de412e7ea6481fc540508c63bdd629026b9a56f926 ./runtime/patches/sensenova_loop_quant.patch
61
- 7b9fd04a5e756a982cac292d314ef2ca84dca0517a4abb4f8a4c009745fd0267 ./runtime/probe.py
62
- be2e56aca0bdbc48bab616db27b37ab36a170b2a3a35534e8be25b291508e54a ./runtime/serve_sglang.sh
63
- 792fa3f0cb88b111e54ef3134c873531008c4df471d108da17903426e308aa7b ./tokenizer_config.json
64
- 06b9509352d2af50381ab2247e083b80d32d5c0aba91c272ca9ff729b6a0e523 ./tokenizer.json
65
- bd96830cce1312679aa1f2ea43ed17da20e8ebbcea2398cfa64e2d275a96fdd7 ./video_preprocessor_config.json
 
 
 
 
 
 
 
 
 
 
1
+ 8951a99119cdcd06c699d91ccc5db0a40b595961041a5ec2e6103b88112757e8 .gitattributes
2
+ c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE
3
+ 60e1c4899e3a776a61e0223abb3ed02317be0fae58d3beb24d86dfbc981fd408 README.md
4
+ a4aee8afcf2e0711942cf848899be66016f8d14a889ff9ede07bca099c28f715 chat_template.jinja
5
+ 5bec5643138a09f2917a0b7471a673baecfbf85f59af49cc048f4318f32e7a3d config.json
6
+ ccdb9203010fc0534d37b0b475d85f088f5e62568d3cbd76229af4d8e50ffb28 evaluation/QUALITY_GATES.md
7
+ 021b420e4757b37909200d1cc52bf308116461735a6b50c67df652267f54c587 evaluation/compare_vs_ref.json
8
+ 5d01579bee6c0863addc3236392b4d88c8d7a7d3cf66b62ae65db1430c0110a3 evaluation/eval_data_MANIFEST.json
9
+ 6df2bf0438b64d1353c1737e3659c86bce501dc188de9ce448492895e8b5ae63 evaluation/harness/build_eval_data.py
10
+ e2818e8c8ff581d65ac8a4dbfc07b58eaea97546dfd63cc3f8f31faaf8ed0f22 evaluation/harness/common.py
11
+ 0423139c0573e09181f065dbdb273b123aa4a966a5ec57a3643b2fe4f8f43b92 evaluation/harness/compare.py
12
+ 535255ccff9b6032494d918331dce7d7bbd5a455771143afeaf7977458b52bf4 evaluation/harness/ifeval_lite.py
13
+ c0e6d611823b672513730fae4f83d6e72cb0927202a0df1112176465d316731f evaluation/harness/mock_server.py
14
+ 8909f46e7c6383cce45dbad9c64d78035316031b6f7d99be664ae8b7c3d3577a evaluation/harness/perf_bench.py
15
+ d2b24fe51830bf6ed99af01c66ed1b861a50eff88d130fac3f9369e6865837cd evaluation/harness/requirements.lock
16
+ 49f85f32fb01f029182491d5dd803c26c37814e9ecfa283f37d705543242bc3d evaluation/harness/run_eval.py
17
+ fe25e6a9d5432922ff4509a9a80e7b996072ee2091353840a6d0fdf764d8daef evaluation/harness/tasks.py
18
+ 8c28fad23d10bfa56897a6c0d306b0a474cb6bc2ac7a08355682bd697a2dcd3f evaluation/harness/test_harness.py
19
+ ec6899745f66eaf5eb92975341bd44b8c6d5ede2116ea6d0d56d8ba008ae7702 evaluation/harness/tool_cases.py
20
+ 90dbf7789104b8763f8980f564d8da2c6d033a2207707a386dba8756cd8d2063 evaluation/hf_bf16_checks.json
21
+ a1a5de6483f0d8c2d759b9c60cb86da4794a4036c6101bba104cc1d5dba63dfb evaluation/kernel_summary.txt
22
+ ce49434ad0c1806bcf01a57957add6fb2ca67f1aa6a61394ae248a75d41b7c80 evaluation/nvfp4_v1_mtp_release_probe.json
23
+ 4cfff7659e057c02133576124dd0dd65b28a8d6869d1b460d68055dc01a2454a evaluation/nvfp4_v1_probe.json
24
+ a588317f6ba1071ab5f67a850e0ced977dfbf3f3dd0b34ea2d5ac54767947c17 evaluation/perf_sglang_bf16.json
25
+ 7f9aa0a53f019234a256057b0f759695cf0ac266ac033e3e02b84bf71ffcec41 evaluation/perf_sglang_bf16_mtp.json
26
+ 8a115863344c244470a3a18959e89c914aa852602e75cb365554d62adfd66c9f evaluation/perf_sglang_nvfp4_v1.json
27
+ d68a9f7a151718b65b6782ea48f4db0aa60f068ab8636eb51f2f2935a61b0058 evaluation/perf_sglang_nvfp4_v1_marlin_w4a16.json
28
+ 546730231cdf739cf84f0d92768c2a31378c165b3e48a1840117b9a2faa5035a evaluation/perf_sglang_nvfp4_v1_mtp.json
29
+ 8f50277ef8a232dc4abab998fa80ffdcc46c13cbebea1d9328e93878af035157 evaluation/sglang_bf16_mtp_probe.json
30
+ 92c0708bb0d27772bedefc3d5f458b742c48325025af5a1269535de6dca2d914 evaluation/sglang_bf16_probe.json
31
+ ec88f909edcbf225936bbeac88ede9312520593eb53db976d5079d9dd6c45ed1 evaluation/summary_sglang_bf16.json
32
+ 58cd6bbadfc9fc070a784e65810414a24919084e4570e1ff7680e8a00f14504b evaluation/summary_sglang_bf16_mtp.json
33
+ c6d75330180b2d1bd5f2dda574afeee8844e18e44c46ba0f3a1128eb052d2326 evaluation/summary_sglang_nvfp4_v1.json
34
+ aff7bcc52ad3e83e6394a8d31e733d8b5725d213836beb98824c397e726c66c6 evaluation/summary_sglang_nvfp4_v1_marlin_w4a16_gsm8k.json
35
+ 944d3ce06cffbfb7a8e10c1af186aaa62a196e6b96cd8c3a1e6800e5d998fa70 evaluation/summary_sglang_nvfp4_v1_mtp.json
36
+ e6df880d4632abe34376bbf9d349ff694129e21067f4e58a757919715804a8b9 figures/README.md
37
+ 47eecb7dab94c2cbe44756977f2e4e81380a059f1661060c0ac5e0909d9b1c24 figures/performance-summary.pdf
38
+ 7012b65a258263617bcd3a9d57e93c4cb24836d9da35a69d723a0f6ef6416d68 figures/performance-summary.png
39
+ 975894bd93a506565d81573ecfc75b9e6202406c2f21940750ec1ad7c9635e8c figures/performance-summary.svg
40
+ 058f67de2a71ee67cf48f4976b69d353cfaea0607bb2d91a20e33774c35c2df7 figures/plot_benchmarks.py
41
+ ceca3cd14f612774aad2f9f076a1d77177bd6f6090c41f8a3ca985318ada3793 figures/quality-summary.pdf
42
+ 761cb0de5f120ec2934b7b900b0d4961464ba24686b4175095289e9d245b0a04 figures/quality-summary.png
43
+ 0315f8e622b4b9cb9ca36ed3718403ba64ea4f8f3df582853fd3e4c0b4fe15c5 figures/quality-summary.svg
44
+ 472fcc1fa6325424ea016e5fb386728d1bf661e21582f7e2e829387053eb9a0e figures/requirements.txt
45
+ f288bb4281580138395c6acc7b3adb62f45c21530bc0708cb2cf9edf093f6a4f generation_config.json
46
+ b197af747a1f072419a8e7e2db3252d9aeea84d21f65db37f748430ab7f83bfd hf_quant_config.json
47
+ 1e420ea69111b7bb3c7c529cdbbb4ff4e6ebb531c0cd2be5c634cd88cd40eaca model.safetensors
48
+ 26e11d3522aa730c0ba031340ce42632bc2834da8cc0b6804006bb207d979a5b modeling_sensenova_loop.py
49
+ 3a159dfec9978a186a72ba085e0ad6a050f3968d8b364218d7bd13f5c89381f2 preprocessor_config.json
50
+ d89ef49ce9cd37fbf510158e13c1ef063d9286411c1ec9049932dbe0487143b1 processor_config.json
51
+ df49d802cffe959b3176eed9abee2277d3e4291cdaf2d9abf8430ee17aeba700 quantization/10_reference_checks.py
52
+ 67d6edacb11e519afb6d81adb4c559930b17ce9a8adeed0e7c8c2043d8383337 quantization/20_quantize.py
53
+ 27dcbf33dfb7e83cace92cc8221e20d2ead29d4090bf15c9348e181b6bb5ba47 quantization/30_verify_export.py
54
+ dc54da6f2e37136c3172779d86ae0134a353942f341eaa8934d3000a01f34682 quantization/build_calib.py
55
+ 04c164fb57e8125eed5d624cefa806a61bc28cb929aca6406d2923ea43f11825 quantization/calib_v1.jsonl.sha256
56
+ 3a2015bbf02262d97e0de28f4fa2b3e73d43f58635a507a96788bf7b587236d8 quantization/calib_v1.meta.json
57
+ 4d71bc0045ee80c45f5eef89e5e721e064e2505020b327942501b017daf0fdf8 quantization/quantization_stats.json
58
+ 723419a376e5f2339f4f0d4f9376b16ea2d5359e54659ccb85c2bb2d5c3028fd quantization/requirements-quant.lock
59
+ be632c83213d44b4a18f367c59fcb55f5d0d738b8c67f64ccc61df3c6a9fb598 quantization/verify.json
60
+ 1b95e589cd65a97a97fae93cdeec07fcadbf0ff204be746fe20db32550a2c248 runtime/COMPAT_NOTES.md
61
+ e00d2fafe780fcf4c04ab52b040e43ec7143c7bd6e070637563f2724b59888d1 runtime/overlay/python/sglang/srt/configs/__init__.py
62
+ bdc7fa2055b799ce07441a5d499fafa554b7b797d4c4a24fd251b846b51260fd runtime/overlay/python/sglang/srt/configs/model_config.py
63
+ eb6df8f37ac06e6f439dd24f687e5bf1078599ade28acaa20d8799bf77c7e057 runtime/overlay/python/sglang/srt/configs/sensenova_loop.py
64
+ b3b4959f2336d1afdf4f0353a0a0eecfc38495226912022dd862489cbb532c98 runtime/overlay/python/sglang/srt/layers/rotary_embedding/mrope_rope_index.py
65
+ 0883bffeff0519db0fb8035b3260eca57c48ebe00e42323fb75cb7f455c1ddad runtime/overlay/python/sglang/srt/models/sensenova_loop.py
66
+ 7fc07bd18b974aa8f54013f2bb39536a65d32ad0cc1a1df2d239ead0dc136754 runtime/overlay/python/sglang/srt/multimodal/processors/qwen_vl.py
67
+ 68e1076237ed67adfa06530139d79df0783a2519620443a58cce94c5143d56c4 runtime/overlay/python/sglang/srt/utils/hf_transformers/common.py
68
+ d93e6342f9487567a7847443eb47b41701b4510474cd5664c8dc51b37eb6f6fd runtime/patches/model_config_mtp_draft.patch
69
+ 029fa25bb4ea5a16c9fce8de412e7ea6481fc540508c63bdd629026b9a56f926 runtime/patches/sensenova_loop_quant.patch
70
+ 7b9fd04a5e756a982cac292d314ef2ca84dca0517a4abb4f8a4c009745fd0267 runtime/probe.py
71
+ be2e56aca0bdbc48bab616db27b37ab36a170b2a3a35534e8be25b291508e54a runtime/serve_sglang.sh
72
+ 06b9509352d2af50381ab2247e083b80d32d5c0aba91c272ca9ff729b6a0e523 tokenizer.json
73
+ 792fa3f0cb88b111e54ef3134c873531008c4df471d108da17903426e308aa7b tokenizer_config.json
74
+ bd96830cce1312679aa1f2ea43ed17da20e8ebbcea2398cfa64e2d275a96fdd7 video_preprocessor_config.json
figures/README.md ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Reproducible publication figures
2
+
3
+ House style: [figures4papers Scientific Figure Making](https://github.com/ChenLiu-1996/figures4papers/tree/main/scientific-figure-making).
4
+
5
+ ```bash
6
+ python3 -m venv .venv-figures
7
+ .venv-figures/bin/pip install -r figures/requirements.txt
8
+ .venv-figures/bin/python figures/plot_benchmarks.py
9
+ ```
10
+
11
+ No hand-entered benchmark values: performance is read from `evaluation/perf_sglang_*.json`, quality from
12
+ `evaluation/compare_vs_ref.json`. The header and captions identify the October 30, 2026 functional baseline.
13
+ Performance panels distinguish median per-request decode, time to first token, and aggregate output throughput.
14
+ Quality panels show task scores and paired-bootstrap 95% intervals from the original saved comparisons.
15
+ These intervals reflect this small item set, not run-to-run throughput variation or full-benchmark accuracy.
16
+
17
+ The originals are 300-DPI PNG plus vector PDF and SVG. No new GPU benchmarks were run to make these figures.
figures/performance-summary.pdf ADDED
Binary file (37.8 kB). View file
 
figures/performance-summary.png ADDED

Git LFS Details

  • SHA256: 7012b65a258263617bcd3a9d57e93c4cb24836d9da35a69d723a0f6ef6416d68
  • Pointer size: 131 Bytes
  • Size of remote file: 461 kB
figures/performance-summary.svg ADDED
figures/plot_benchmarks.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Regenerate figures from checked-in measurements; figures4papers house conventions.
3
+ https://github.com/ChenLiu-1996/figures4papers/tree/main/scientific-figure-making
4
+ Usage: python3 -m pip install -r figures/requirements.txt; python3 figures/plot_benchmarks.py
5
+ """
6
+ import json
7
+ from pathlib import Path
8
+ import matplotlib
9
+ matplotlib.use('Agg')
10
+ import matplotlib.pyplot as plt
11
+ import numpy as np
12
+ ROOT=Path(__file__).resolve().parent.parent
13
+ OUT=ROOT/'figures'
14
+ plt.rcParams.update({'font.family':'sans-serif','font.sans-serif':['DejaVu Sans','Arial','Helvetica'],
15
+ 'font.size':12,'axes.titlesize':14,'axes.labelsize':12,'axes.linewidth':1.8,
16
+ 'axes.spines.right':False,'axes.spines.top':False,'legend.frameon':False,
17
+ 'svg.fonttype':'none','pdf.fonttype':42})
18
+ COLORS=['#767676','#B64342','#3775BA','#0F4D92']
19
+ LABELS=['BF16','BF16 + MTP','NVFP4','NVFP4 + MTP']
20
+ FILES=['perf_sglang_bf16.json','perf_sglang_bf16_mtp.json','perf_sglang_nvfp4_v1.json','perf_sglang_nvfp4_v1_mtp.json']
21
+ data=[json.loads((ROOT/'evaluation'/f).read_text()) for f in FILES]
22
+ for d in data:
23
+ assert [l['concurrency'] for l in d['levels']]==[1,2,4,8]
24
+ assert all(l['n_errors']==0 and l['output_tokens_mean']==256 for l in d['levels'])
25
+ def save(fig,name):
26
+ for ext in ['png','pdf','svg']:
27
+ fig.savefig(OUT/f'{name}.{ext}',dpi=300,bbox_inches='tight',facecolor='white')
28
+ plt.close(fig)
29
+ fig=plt.figure(figsize=(12.8,8.1))
30
+ gs=fig.add_gridspec(2,2,left=.09,right=.97,top=.84,bottom=.17,wspace=.32,hspace=.55)
31
+ ax=fig.add_subplot(gs[0,0]); ax2=fig.add_subplot(gs[0,1]); ax3=fig.add_subplot(gs[1,:])
32
+ fig.suptitle('SenseNova Loop 9B NVFP4 — one DGX Spark',y=.98,fontsize=19,fontweight='bold')
33
+ fig.text(.5,.927,'Functional release baseline • native W4A4 • original weights, PTQ only',ha='center',color='#4D4D4D',fontsize=12)
34
+ x=np.arange(4)
35
+ for a,key,title,ylabel in [(ax,'decode_tok_s_per_req','A Single-request decode','Median decode tokens/s'),(ax2,'ttft_s','B Time to first token (one request)','Median TTFT (seconds)')]:
36
+ vals=[d['levels'][0][key]['p50'] for d in data]
37
+ bars=a.bar(x,vals,color=COLORS,edgecolor='black',linewidth=1)
38
+ for b,v in zip(bars,vals):a.text(b.get_x()+b.get_width()/2,v+max(vals)*.035,f'{v:.2f}',ha='center',fontsize=11,fontweight='bold')
39
+ a.set(title=title,ylabel=ylabel,xticks=x,xticklabels=['BF16','BF16\n+ MTP','NVFP4','NVFP4\n+ MTP'],ylim=(0,max(vals)*1.24))
40
+ a.grid(axis='y',alpha=.16); a.set_axisbelow(True)
41
+ for d,c,label,marker in zip(data,COLORS,LABELS,['o','s','^','D']):
42
+ vals=[l['aggregate_output_tok_s'] for l in d['levels']]
43
+ ax3.plot([1,2,4,8],vals,color=c,label=label,marker=marker,lw=2.5,ms=7)
44
+ ax3.set(title='C Concurrency scales aggregate throughput — not individual-user speed',xlabel='Concurrent requests',ylabel='Aggregate output tokens/s',xticks=[1,2,4,8],ylim=(0,78))
45
+ ax3.legend(loc='upper left',ncol=2,fontsize=10);ax3.grid(axis='y',alpha=.16)
46
+ ax3.annotate('64.79 without MTP / 64.43 with MTP',xy=(8,64.79),xytext=(4.0,72),fontsize=10,arrowprops={'arrowstyle':'-','color':'#767676'})
47
+ fig.text(.5,.075,'1,051 prompt tokens → 256 output tokens • greedy • unique prompts, no prefix-cache hits\n16 requests/level without MTP; 8 with MTP • CUDA graphs • 0 request errors/OOMs\nSource: evaluation/perf_sglang_*.json • Measurements: October 30, 2026',ha='center',va='center',fontsize=10,color='#4D4D4D',linespacing=1.6)
48
+ save(fig,'performance-summary')
49
+ comp=json.loads((ROOT/'evaluation/compare_vs_ref.json').read_text())
50
+ keys=['ifeval','gsm8k','mmlu_pro','humaneval','tools','vqa']
51
+ names=['IFEval*','GSM8K','MMLU-Pro','HumanEval','Tools**','TextVQA']
52
+ fig,axes=plt.subplots(1,2,figsize=(13.5,6.6),gridspec_kw={'width_ratios':[1.15,1]})
53
+ fig.subplots_adjust(left=.07,right=.98,top=.78,bottom=.36,wspace=.37)
54
+ fig.suptitle('Quality after NVFP4 quantization — small regression suite',y=.98,fontsize=18,fontweight='bold')
55
+ fig.text(.5,.903,'300 fixed items • thinking off • paired comparison to BF16 • not full-benchmark scores',ha='center',fontsize=12,color='#4D4D4D')
56
+ x=np.arange(len(keys));w=.36
57
+ for off,k,col,label in [(-w/2,'ref_acc',COLORS[0],'BF16'),(w/2,'cand_acc',COLORS[2],'NVFP4')]:
58
+ vals=[100*comp['tasks'][t][k] for t in keys]
59
+ axes[0].bar(x+off,vals,w,color=col,edgecolor='black',linewidth=.8,label=label)
60
+ axes[0].set(title='A Task accuracy',ylabel='Accuracy (%)',xticks=x,xticklabels=names,ylim=(0,105));axes[0].tick_params(axis='x',labelrotation=25)
61
+ axes[0].legend(loc='lower left',fontsize=10);axes[0].grid(axis='y',alpha=.16);axes[0].set_axisbelow(True)
62
+ ys=np.arange(6)
63
+ for i,t in enumerate(keys):
64
+ q=comp['tasks'][t];v=q['delta']*100;lo,hi=[v*100 for v in q['delta_boot95']]
65
+ axes[1].errorbar(v,i,xerr=[[max(0,v-lo)],[max(0,hi-v)]],fmt='o',color=COLORS[2],capsize=4,lw=2)
66
+ axes[1].axvline(0,color='#767676',lw=1,ls='--')
67
+ axes[1].set(title='B Change and paired-bootstrap 95% CI',xlabel='NVFP4 − BF16 (percentage points)',yticks=ys,yticklabels=[f'{n} (n={comp["tasks"][k]["n"]})' for n,k in zip(names,keys)],xlim=(-18,18))
68
+ axes[1].invert_yaxis();axes[1].grid(axis='x',alpha=.16)
69
+ fig.text(.5,.12,'Pooled accuracy: BF16 82.7% → NVFP4 83.0% • Δ +0.3 pp [−3.0, +4.0]\n*IFEval subset uses a re-implemented checker. **Tools: 20 hand-written BFCL-style cases.\nSubsets of 20–80 items/task; uncertainty is wide. No claim of losslessness or intelligence improvement.\nSource: evaluation/compare_vs_ref.json; see model card for truncations and methodology.',ha='center',va='center',fontsize=10,color='#4D4D4D',linespacing=1.65)
70
+ save(fig,'quality-summary')
71
+ print('Rendered performance and quality figures from measured JSONs.')
figures/quality-summary.pdf ADDED
Binary file (37.6 kB). View file
 
figures/quality-summary.png ADDED

Git LFS Details

  • SHA256: 761cb0de5f120ec2934b7b900b0d4961464ba24686b4175095289e9d245b0a04
  • Pointer size: 131 Bytes
  • Size of remote file: 380 kB
figures/quality-summary.svg ADDED
figures/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ matplotlib==3.11.1
2
+ numpy>=2,<3