helcig commited on
Commit
a68f0e0
·
verified ·
1 Parent(s): 95f8813

Add coding-25-nonuniform

Browse files
Files changed (41) hide show
  1. .gitattributes +1 -0
  2. coding-25-nonuniform/LOAD_VLLM.md +43 -0
  3. coding-25-nonuniform/__pycache__/vllm_pruned_patch.cpython-312.pyc +0 -0
  4. coding-25-nonuniform/added_tokens.json +28 -0
  5. coding-25-nonuniform/chat_template.jinja +117 -0
  6. coding-25-nonuniform/config.json +145 -0
  7. coding-25-nonuniform/generation_config.json +12 -0
  8. coding-25-nonuniform/merges.txt +0 -0
  9. coding-25-nonuniform/model-00001-of-00025.safetensors +3 -0
  10. coding-25-nonuniform/model-00002-of-00025.safetensors +3 -0
  11. coding-25-nonuniform/model-00003-of-00025.safetensors +3 -0
  12. coding-25-nonuniform/model-00004-of-00025.safetensors +3 -0
  13. coding-25-nonuniform/model-00005-of-00025.safetensors +3 -0
  14. coding-25-nonuniform/model-00006-of-00025.safetensors +3 -0
  15. coding-25-nonuniform/model-00007-of-00025.safetensors +3 -0
  16. coding-25-nonuniform/model-00008-of-00025.safetensors +3 -0
  17. coding-25-nonuniform/model-00009-of-00025.safetensors +3 -0
  18. coding-25-nonuniform/model-00010-of-00025.safetensors +3 -0
  19. coding-25-nonuniform/model-00011-of-00025.safetensors +3 -0
  20. coding-25-nonuniform/model-00012-of-00025.safetensors +3 -0
  21. coding-25-nonuniform/model-00013-of-00025.safetensors +3 -0
  22. coding-25-nonuniform/model-00014-of-00025.safetensors +3 -0
  23. coding-25-nonuniform/model-00015-of-00025.safetensors +3 -0
  24. coding-25-nonuniform/model-00016-of-00025.safetensors +3 -0
  25. coding-25-nonuniform/model-00017-of-00025.safetensors +3 -0
  26. coding-25-nonuniform/model-00018-of-00025.safetensors +3 -0
  27. coding-25-nonuniform/model-00019-of-00025.safetensors +3 -0
  28. coding-25-nonuniform/model-00020-of-00025.safetensors +3 -0
  29. coding-25-nonuniform/model-00021-of-00025.safetensors +3 -0
  30. coding-25-nonuniform/model-00022-of-00025.safetensors +3 -0
  31. coding-25-nonuniform/model-00023-of-00025.safetensors +3 -0
  32. coding-25-nonuniform/model-00024-of-00025.safetensors +3 -0
  33. coding-25-nonuniform/model-00025-of-00025.safetensors +3 -0
  34. coding-25-nonuniform/model.safetensors.index.json +0 -0
  35. coding-25-nonuniform/pruned_metadata.json +60 -0
  36. coding-25-nonuniform/sitecustomize.py +12 -0
  37. coding-25-nonuniform/special_tokens_map.json +31 -0
  38. coding-25-nonuniform/tokenizer.json +3 -0
  39. coding-25-nonuniform/tokenizer_config.json +239 -0
  40. coding-25-nonuniform/vllm_pruned_patch.py +88 -0
  41. coding-25-nonuniform/vocab.json +0 -0
.gitattributes CHANGED
@@ -34,3 +34,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  coding-25-uniform/tokenizer.json filter=lfs diff=lfs merge=lfs -text
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  coding-25-uniform/tokenizer.json filter=lfs diff=lfs merge=lfs -text
37
+ coding-25-nonuniform/tokenizer.json filter=lfs diff=lfs merge=lfs -text
coding-25-nonuniform/LOAD_VLLM.md ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Loading this variant with vLLM
2
+
3
+ The checkpoint has heterogeneous per-layer expert counts. vLLM's stock
4
+ `Qwen3NextSparseMoeBlock` builds every layer with `config.num_experts`; our
5
+ bundled `vllm_pruned_patch.py` overrides each layer to use its own count from
6
+ `config.per_layer_num_experts`.
7
+
8
+ ## One-liner
9
+
10
+ ```bash
11
+ PYTHONPATH=$(pwd):${PYTHONPATH:-} python -c "
12
+ from vllm import LLM, SamplingParams
13
+ llm = LLM(model='.', tensor_parallel_size=4, dtype='bfloat16',
14
+ gpu_memory_utilization=0.85, trust_remote_code=True,
15
+ enforce_eager=True)
16
+ print(llm.generate(['def fib(n):'], SamplingParams(max_tokens=128))[0].outputs[0].text)
17
+ "
18
+ ```
19
+
20
+ ## Why PYTHONPATH?
21
+
22
+ vLLM spawns worker subprocesses via `multiprocessing.spawn` (safe with CUDA).
23
+ Those workers re-import `vllm` fresh — any monkey-patch you applied in the
24
+ parent process is gone. Python's `sitecustomize.py` mechanism runs
25
+ automatically in **every** interpreter that has the relevant directory on
26
+ `sys.path`. Putting this variant folder on `PYTHONPATH` is enough.
27
+
28
+ ## Tensor parallelism notes
29
+
30
+ - **TP (tensor parallel)** works fine with heterogeneous counts — TP shards
31
+ hidden dimensions inside each expert.
32
+ - **EP (expert parallel)** assumes experts shard evenly across ranks, which
33
+ is broken for heterogeneous counts. Keep `--enable-eplb` off.
34
+
35
+ ## With lm-eval-harness
36
+
37
+ ```bash
38
+ PYTHONPATH=$(pwd):${PYTHONPATH:-} \
39
+ lm_eval --model vllm \
40
+ --model_args "pretrained=.,tensor_parallel_size=4,dtype=bfloat16,gpu_memory_utilization=0.85,max_model_len=4096,trust_remote_code=True,enforce_eager=True" \
41
+ --tasks humaneval,mbpp \
42
+ --batch_size auto
43
+ ```
coding-25-nonuniform/__pycache__/vllm_pruned_patch.cpython-312.pyc ADDED
Binary file (3.57 kB). View file
 
coding-25-nonuniform/added_tokens.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "</think>": 151668,
3
+ "</tool_call>": 151658,
4
+ "</tool_response>": 151666,
5
+ "<think>": 151667,
6
+ "<tool_call>": 151657,
7
+ "<tool_response>": 151665,
8
+ "<|box_end|>": 151649,
9
+ "<|box_start|>": 151648,
10
+ "<|endoftext|>": 151643,
11
+ "<|file_sep|>": 151664,
12
+ "<|fim_middle|>": 151660,
13
+ "<|fim_pad|>": 151662,
14
+ "<|fim_prefix|>": 151659,
15
+ "<|fim_suffix|>": 151661,
16
+ "<|im_end|>": 151645,
17
+ "<|im_start|>": 151644,
18
+ "<|image_pad|>": 151655,
19
+ "<|object_ref_end|>": 151647,
20
+ "<|object_ref_start|>": 151646,
21
+ "<|quad_end|>": 151651,
22
+ "<|quad_start|>": 151650,
23
+ "<|repo_name|>": 151663,
24
+ "<|video_pad|>": 151656,
25
+ "<|vision_end|>": 151653,
26
+ "<|vision_pad|>": 151654,
27
+ "<|vision_start|>": 151652
28
+ }
coding-25-nonuniform/chat_template.jinja ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% macro render_extra_keys(json_dict, handled_keys) %}
2
+ {%- if json_dict is mapping %}
3
+ {%- for json_key in json_dict if json_key not in handled_keys %}
4
+ {%- if json_dict[json_key] is string %}
5
+ {{-'\n<' ~ json_key ~ '>' ~ (json_dict[json_key] | string) ~ '</' ~ json_key ~ '>' }}
6
+ {%- else %}
7
+ {{- '\n<' ~ json_key ~ '>' ~ (json_dict[json_key] | tojson | safe) ~ '</' ~ json_key ~ '>' }}
8
+ {%- endif %}
9
+ {%- endfor %}
10
+ {%- endif %}
11
+ {%- endmacro %}
12
+
13
+ {%- if messages[0]["role"] == "system" %}
14
+ {%- set system_message = messages[0]["content"] %}
15
+ {%- set loop_messages = messages[1:] %}
16
+ {%- else %}
17
+ {%- set loop_messages = messages %}
18
+ {%- endif %}
19
+
20
+ {%- if not tools is defined %}
21
+ {%- set tools = [] %}
22
+ {%- endif %}
23
+
24
+ {%- if system_message is defined %}
25
+ {{- "<|im_start|>system\n" + system_message }}
26
+ {%- else %}
27
+ {%- if tools is iterable and tools | length > 0 %}
28
+ {{- "<|im_start|>system\nYou are Qwen, a helpful AI assistant that can interact with a computer to solve tasks." }}
29
+ {%- endif %}
30
+ {%- endif %}
31
+ {%- if tools is iterable and tools | length > 0 %}
32
+ {{- "\n\n# Tools\n\nYou have access to the following functions:\n\n" }}
33
+ {{- "<tools>" }}
34
+ {%- for tool in tools %}
35
+ {%- if tool.function is defined %}
36
+ {%- set tool = tool.function %}
37
+ {%- endif %}
38
+ {{- "\n<function>\n<name>" ~ tool.name ~ "</name>" }}
39
+ {%- if tool.description is defined %}
40
+ {{- '\n<description>' ~ (tool.description | trim) ~ '</description>' }}
41
+ {%- endif %}
42
+ {{- '\n<parameters>' }}
43
+ {%- if tool.parameters is defined and tool.parameters is mapping and tool.parameters.properties is defined and tool.parameters.properties is mapping %}
44
+ {%- for param_name, param_fields in tool.parameters.properties|items %}
45
+ {{- '\n<parameter>' }}
46
+ {{- '\n<name>' ~ param_name ~ '</name>' }}
47
+ {%- if param_fields.type is defined %}
48
+ {{- '\n<type>' ~ (param_fields.type | string) ~ '</type>' }}
49
+ {%- endif %}
50
+ {%- if param_fields.description is defined %}
51
+ {{- '\n<description>' ~ (param_fields.description | trim) ~ '</description>' }}
52
+ {%- endif %}
53
+ {%- set handled_keys = ['name', 'type', 'description'] %}
54
+ {{- render_extra_keys(param_fields, handled_keys) }}
55
+ {{- '\n</parameter>' }}
56
+ {%- endfor %}
57
+ {%- endif %}
58
+ {%- set handled_keys = ['type', 'properties'] %}
59
+ {{- render_extra_keys(tool.parameters, handled_keys) }}
60
+ {{- '\n</parameters>' }}
61
+ {%- set handled_keys = ['type', 'name', 'description', 'parameters'] %}
62
+ {{- render_extra_keys(tool, handled_keys) }}
63
+ {{- '\n</function>' }}
64
+ {%- endfor %}
65
+ {{- "\n</tools>" }}
66
+ {{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nThis is the value for the second parameter\nthat can span\nmultiple lines\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n</IMPORTANT>' }}
67
+ {%- endif %}
68
+ {%- if system_message is defined %}
69
+ {{- '<|im_end|>\n' }}
70
+ {%- else %}
71
+ {%- if tools is iterable and tools | length > 0 %}
72
+ {{- '<|im_end|>\n' }}
73
+ {%- endif %}
74
+ {%- endif %}
75
+ {%- for message in loop_messages %}
76
+ {%- if message.role == "assistant" and message.tool_calls is defined and message.tool_calls is iterable and message.tool_calls | length > 0 %}
77
+ {{- '<|im_start|>' + message.role }}
78
+ {%- if message.content is defined and message.content is string and message.content | trim | length > 0 %}
79
+ {{- '\n' + message.content | trim + '\n' }}
80
+ {%- endif %}
81
+ {%- for tool_call in message.tool_calls %}
82
+ {%- if tool_call.function is defined %}
83
+ {%- set tool_call = tool_call.function %}
84
+ {%- endif %}
85
+ {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
86
+ {%- if tool_call.arguments is defined %}
87
+ {%- for args_name, args_value in tool_call.arguments|items %}
88
+ {{- '<parameter=' + args_name + '>\n' }}
89
+ {%- set args_value = args_value if args_value is string else args_value | tojson | safe %}
90
+ {{- args_value }}
91
+ {{- '\n</parameter>\n' }}
92
+ {%- endfor %}
93
+ {%- endif %}
94
+ {{- '</function>\n</tool_call>' }}
95
+ {%- endfor %}
96
+ {{- '<|im_end|>\n' }}
97
+ {%- elif message.role == "user" or message.role == "system" or message.role == "assistant" %}
98
+ {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }}
99
+ {%- elif message.role == "tool" %}
100
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
101
+ {{- '<|im_start|>user' }}
102
+ {%- endif %}
103
+ {{- '\n<tool_response>\n' }}
104
+ {{- message.content }}
105
+ {{- '\n</tool_response>' }}
106
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
107
+ {{- '<|im_end|>\n' }}
108
+ {%- elif loop.last %}
109
+ {{- '<|im_end|>\n' }}
110
+ {%- endif %}
111
+ {%- else %}
112
+ {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>\n' }}
113
+ {%- endif %}
114
+ {%- endfor %}
115
+ {%- if add_generation_prompt %}
116
+ {{- '<|im_start|>assistant\n' }}
117
+ {%- endif %}
coding-25-nonuniform/config.json ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "Qwen3NextForCausalLM"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0,
7
+ "bos_token_id": 151643,
8
+ "decoder_sparse_step": 1,
9
+ "dtype": "bfloat16",
10
+ "eos_token_id": 151645,
11
+ "full_attention_interval": 4,
12
+ "head_dim": 256,
13
+ "hidden_act": "silu",
14
+ "hidden_size": 2048,
15
+ "initializer_range": 0.02,
16
+ "intermediate_size": 5120,
17
+ "layer_types": [
18
+ "linear_attention",
19
+ "linear_attention",
20
+ "linear_attention",
21
+ "full_attention",
22
+ "linear_attention",
23
+ "linear_attention",
24
+ "linear_attention",
25
+ "full_attention",
26
+ "linear_attention",
27
+ "linear_attention",
28
+ "linear_attention",
29
+ "full_attention",
30
+ "linear_attention",
31
+ "linear_attention",
32
+ "linear_attention",
33
+ "full_attention",
34
+ "linear_attention",
35
+ "linear_attention",
36
+ "linear_attention",
37
+ "full_attention",
38
+ "linear_attention",
39
+ "linear_attention",
40
+ "linear_attention",
41
+ "full_attention",
42
+ "linear_attention",
43
+ "linear_attention",
44
+ "linear_attention",
45
+ "full_attention",
46
+ "linear_attention",
47
+ "linear_attention",
48
+ "linear_attention",
49
+ "full_attention",
50
+ "linear_attention",
51
+ "linear_attention",
52
+ "linear_attention",
53
+ "full_attention",
54
+ "linear_attention",
55
+ "linear_attention",
56
+ "linear_attention",
57
+ "full_attention",
58
+ "linear_attention",
59
+ "linear_attention",
60
+ "linear_attention",
61
+ "full_attention",
62
+ "linear_attention",
63
+ "linear_attention",
64
+ "linear_attention",
65
+ "full_attention"
66
+ ],
67
+ "linear_conv_kernel_dim": 4,
68
+ "linear_key_head_dim": 128,
69
+ "linear_num_key_heads": 16,
70
+ "linear_num_value_heads": 32,
71
+ "linear_value_head_dim": 128,
72
+ "max_position_embeddings": 262144,
73
+ "mlp_only_layers": [],
74
+ "model_type": "qwen3_next",
75
+ "moe_intermediate_size": 512,
76
+ "norm_topk_prob": true,
77
+ "num_attention_heads": 16,
78
+ "num_experts": 512,
79
+ "num_experts_per_tok": 10,
80
+ "num_hidden_layers": 48,
81
+ "num_key_value_heads": 2,
82
+ "original_num_experts": 512,
83
+ "output_router_logits": false,
84
+ "partial_rotary_factor": 0.25,
85
+ "per_layer_num_experts": [
86
+ 453,
87
+ 398,
88
+ 460,
89
+ 357,
90
+ 354,
91
+ 405,
92
+ 439,
93
+ 429,
94
+ 380,
95
+ 359,
96
+ 342,
97
+ 370,
98
+ 338,
99
+ 351,
100
+ 379,
101
+ 407,
102
+ 373,
103
+ 416,
104
+ 439,
105
+ 432,
106
+ 399,
107
+ 363,
108
+ 361,
109
+ 395,
110
+ 352,
111
+ 370,
112
+ 409,
113
+ 415,
114
+ 394,
115
+ 416,
116
+ 439,
117
+ 417,
118
+ 382,
119
+ 351,
120
+ 354,
121
+ 390,
122
+ 350,
123
+ 354,
124
+ 374,
125
+ 403,
126
+ 404,
127
+ 390,
128
+ 359,
129
+ 353,
130
+ 355,
131
+ 331,
132
+ 320,
133
+ 351
134
+ ],
135
+ "rms_norm_eps": 1e-06,
136
+ "rope_scaling": null,
137
+ "rope_theta": 5000000,
138
+ "router_aux_loss_coef": 0.001,
139
+ "shared_expert_intermediate_size": 512,
140
+ "tie_word_embeddings": false,
141
+ "transformers_version": "4.57.6",
142
+ "use_cache": true,
143
+ "use_sliding_window": false,
144
+ "vocab_size": 151936
145
+ }
coding-25-nonuniform/generation_config.json ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token_id": 151643,
3
+ "do_sample": true,
4
+ "eos_token_id": [
5
+ 151645,
6
+ 151643
7
+ ],
8
+ "pad_token_id": 151643,
9
+ "top_k": 40,
10
+ "top_p": 0.95,
11
+ "transformers_version": "4.57.6"
12
+ }
coding-25-nonuniform/merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
coding-25-nonuniform/model-00001-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8eec7c9f66e76d1e48b083c356844841a69bf2d2d31f5ddbd1621d5062e0b8ac
3
+ size 4999298520
coding-25-nonuniform/model-00002-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3e4147f5fa966b5cad069b781b195a8d35e72db7a3141524c180aa6cfd53c55c
3
+ size 4999405848
coding-25-nonuniform/model-00003-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8c28f1e8c3f4d8bc3e8a21f4b41015052aa2f2496cc992bf5ad09fb5ab2daa11
3
+ size 4999494688
coding-25-nonuniform/model-00004-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:276aaf64663bb98bb45c49894ff54159092495e7d3bfbaad9b0278521fb42240
3
+ size 4999614736
coding-25-nonuniform/model-00005-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d0a52710157bf8cfcbeb53ef706a1f0bb0e89a09ba63e488a8978686d8fc309a
3
+ size 4999412816
coding-25-nonuniform/model-00006-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e16f947b7958f2ba3b780b27ecdeab8cecb99ccd6fb376856f622272ee61f45f
3
+ size 4998977312
coding-25-nonuniform/model-00007-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fcc24fff499c591b3f2bf6ab75f39bc767fb9029556d024e08bc3b38f1445dc5
3
+ size 4999210312
coding-25-nonuniform/model-00008-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b58b74dfda4ee121239b99f73b9b7f801b4ca9f263117480e9c4504c58b8823f
3
+ size 4999281256
coding-25-nonuniform/model-00009-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:502fce4780567ba8083b2631d8801b78dc33d1ce9dfeb6749223e9ae389294c4
3
+ size 4999619952
coding-25-nonuniform/model-00010-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8caddafc0e4817d40ed47c3a9579c77188ab05eff81b10b2cb621374f1c77cc6
3
+ size 4999629376
coding-25-nonuniform/model-00011-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9f4c610399326faf124800320be41b25cbdddfffe81d9cb3050157f4cce831ee
3
+ size 4999509320
coding-25-nonuniform/model-00012-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4b292db2baad3dc6b7b7abfd9a2d92a54f49186efbacc6f601816f1329c368a8
3
+ size 4999158336
coding-25-nonuniform/model-00013-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bbddb8593f582ae6f0b7c2491bf34003ad88a4114f0db0ea01e38385bcd1f7d1
3
+ size 4999345480
coding-25-nonuniform/model-00014-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b96b3d684d67233dbf164408d0005d580144cd5110f61d48bb38d6c5fe697af5
3
+ size 4999436864
coding-25-nonuniform/model-00015-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:03768828230d921db71aece80dea42790340405e69f29dac9f5fee105fe54e4e
3
+ size 4999705928
coding-25-nonuniform/model-00016-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c8bf8b1fbc6ce5427710ac6b67f24d123d468c83789c696cad64c0b42f7e9732
3
+ size 4999568072
coding-25-nonuniform/model-00017-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ab4ad44033d31a2a3e524bdaf3095f81a82b019bf34871bf4aa192336f25317f
3
+ size 4999390616
coding-25-nonuniform/model-00018-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d1e919762a2c321fa8881caac29e513fa33f5171882675309838d48d49caf528
3
+ size 4999108976
coding-25-nonuniform/model-00019-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a1ed2f79f6301abaa361f1b1d0dd9f2c0480f93fabffcfae353206b6dd55f0d0
3
+ size 4999271728
coding-25-nonuniform/model-00020-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:83100657e186e0acbf1036da86cc4af684475f7e3b12132fa137a639c685e0be
3
+ size 4999244352
coding-25-nonuniform/model-00021-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1f36750e050454921bc5f568ea959d81db39a5c1e225e244a8f6e5fd2a64ac30
3
+ size 4999640392
coding-25-nonuniform/model-00022-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c6580ce45968f89cc1a6ba4e6f06fa2f53a46efbf74df3093e0b9e7734642b6d
3
+ size 4998978112
coding-25-nonuniform/model-00023-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0ef5f8bdbd85f3fccf0371f78ed2859a99921fc21978b8f29d20b6c5923555b0
3
+ size 4999198024
coding-25-nonuniform/model-00024-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:99afbca833886c070d9184342e9cb220a655d4270f2f3345ba0e14ac12bcf47c
3
+ size 4998810216
coding-25-nonuniform/model-00025-of-00025.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d818d704bc49fda52b3fa8de4686b1095dacfce500a33eb7a710614551a5c3c6
3
+ size 691556896
coding-25-nonuniform/model.safetensors.index.json ADDED
The diff for this file is too large to render. See raw diff
 
coding-25-nonuniform/pruned_metadata.json ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "base_model": "Qwen/Qwen3-Coder-Next",
3
+ "prune_mask": "/nfs/scistore19/alistgrp/mhelcig/repos/rco/llm/results/coder_next/mask_perexpert_reap_25pct.pt",
4
+ "original_num_experts": 512,
5
+ "num_hidden_layers": 48,
6
+ "num_experts_per_tok": 10,
7
+ "per_layer_num_experts": [
8
+ 453,
9
+ 398,
10
+ 460,
11
+ 357,
12
+ 354,
13
+ 405,
14
+ 439,
15
+ 429,
16
+ 380,
17
+ 359,
18
+ 342,
19
+ 370,
20
+ 338,
21
+ 351,
22
+ 379,
23
+ 407,
24
+ 373,
25
+ 416,
26
+ 439,
27
+ 432,
28
+ 399,
29
+ 363,
30
+ 361,
31
+ 395,
32
+ 352,
33
+ 370,
34
+ 409,
35
+ 415,
36
+ 394,
37
+ 416,
38
+ 439,
39
+ 417,
40
+ 382,
41
+ 351,
42
+ 354,
43
+ 390,
44
+ 350,
45
+ 354,
46
+ 374,
47
+ 403,
48
+ 404,
49
+ 390,
50
+ 359,
51
+ 353,
52
+ 355,
53
+ 331,
54
+ 320,
55
+ 351
56
+ ],
57
+ "total_pruned": 6144,
58
+ "sparsity": 0.25,
59
+ "allocation": "nonuniform"
60
+ }
coding-25-nonuniform/sitecustomize.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Applied automatically in every Python process on PYTHONPATH.
2
+ vLLM spawns worker subprocesses that re-import modules; without this file
3
+ the monkey-patch would be missing in workers and weight loading would fail
4
+ for the heterogeneous per-layer expert counts.
5
+ """
6
+ import os
7
+ if os.environ.get('VLLM_PRUNED_PATCH_DISABLE') != '1':
8
+ try:
9
+ import vllm_pruned_patch
10
+ vllm_pruned_patch.apply()
11
+ except Exception:
12
+ pass
coding-25-nonuniform/special_tokens_map.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<|im_start|>",
4
+ "<|im_end|>",
5
+ "<|object_ref_start|>",
6
+ "<|object_ref_end|>",
7
+ "<|box_start|>",
8
+ "<|box_end|>",
9
+ "<|quad_start|>",
10
+ "<|quad_end|>",
11
+ "<|vision_start|>",
12
+ "<|vision_end|>",
13
+ "<|vision_pad|>",
14
+ "<|image_pad|>",
15
+ "<|video_pad|>"
16
+ ],
17
+ "eos_token": {
18
+ "content": "<|im_end|>",
19
+ "lstrip": false,
20
+ "normalized": false,
21
+ "rstrip": false,
22
+ "single_word": false
23
+ },
24
+ "pad_token": {
25
+ "content": "<|endoftext|>",
26
+ "lstrip": false,
27
+ "normalized": false,
28
+ "rstrip": false,
29
+ "single_word": false
30
+ }
31
+ }
coding-25-nonuniform/tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aeb13307a71acd8fe81861d94ad54ab689df773318809eed3cbe794b4492dae4
3
+ size 11422654
coding-25-nonuniform/tokenizer_config.json ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": false,
3
+ "add_prefix_space": false,
4
+ "added_tokens_decoder": {
5
+ "151643": {
6
+ "content": "<|endoftext|>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false,
11
+ "special": true
12
+ },
13
+ "151644": {
14
+ "content": "<|im_start|>",
15
+ "lstrip": false,
16
+ "normalized": false,
17
+ "rstrip": false,
18
+ "single_word": false,
19
+ "special": true
20
+ },
21
+ "151645": {
22
+ "content": "<|im_end|>",
23
+ "lstrip": false,
24
+ "normalized": false,
25
+ "rstrip": false,
26
+ "single_word": false,
27
+ "special": true
28
+ },
29
+ "151646": {
30
+ "content": "<|object_ref_start|>",
31
+ "lstrip": false,
32
+ "normalized": false,
33
+ "rstrip": false,
34
+ "single_word": false,
35
+ "special": true
36
+ },
37
+ "151647": {
38
+ "content": "<|object_ref_end|>",
39
+ "lstrip": false,
40
+ "normalized": false,
41
+ "rstrip": false,
42
+ "single_word": false,
43
+ "special": true
44
+ },
45
+ "151648": {
46
+ "content": "<|box_start|>",
47
+ "lstrip": false,
48
+ "normalized": false,
49
+ "rstrip": false,
50
+ "single_word": false,
51
+ "special": true
52
+ },
53
+ "151649": {
54
+ "content": "<|box_end|>",
55
+ "lstrip": false,
56
+ "normalized": false,
57
+ "rstrip": false,
58
+ "single_word": false,
59
+ "special": true
60
+ },
61
+ "151650": {
62
+ "content": "<|quad_start|>",
63
+ "lstrip": false,
64
+ "normalized": false,
65
+ "rstrip": false,
66
+ "single_word": false,
67
+ "special": true
68
+ },
69
+ "151651": {
70
+ "content": "<|quad_end|>",
71
+ "lstrip": false,
72
+ "normalized": false,
73
+ "rstrip": false,
74
+ "single_word": false,
75
+ "special": true
76
+ },
77
+ "151652": {
78
+ "content": "<|vision_start|>",
79
+ "lstrip": false,
80
+ "normalized": false,
81
+ "rstrip": false,
82
+ "single_word": false,
83
+ "special": true
84
+ },
85
+ "151653": {
86
+ "content": "<|vision_end|>",
87
+ "lstrip": false,
88
+ "normalized": false,
89
+ "rstrip": false,
90
+ "single_word": false,
91
+ "special": true
92
+ },
93
+ "151654": {
94
+ "content": "<|vision_pad|>",
95
+ "lstrip": false,
96
+ "normalized": false,
97
+ "rstrip": false,
98
+ "single_word": false,
99
+ "special": true
100
+ },
101
+ "151655": {
102
+ "content": "<|image_pad|>",
103
+ "lstrip": false,
104
+ "normalized": false,
105
+ "rstrip": false,
106
+ "single_word": false,
107
+ "special": true
108
+ },
109
+ "151656": {
110
+ "content": "<|video_pad|>",
111
+ "lstrip": false,
112
+ "normalized": false,
113
+ "rstrip": false,
114
+ "single_word": false,
115
+ "special": true
116
+ },
117
+ "151657": {
118
+ "content": "<tool_call>",
119
+ "lstrip": false,
120
+ "normalized": false,
121
+ "rstrip": false,
122
+ "single_word": false,
123
+ "special": false
124
+ },
125
+ "151658": {
126
+ "content": "</tool_call>",
127
+ "lstrip": false,
128
+ "normalized": false,
129
+ "rstrip": false,
130
+ "single_word": false,
131
+ "special": false
132
+ },
133
+ "151659": {
134
+ "content": "<|fim_prefix|>",
135
+ "lstrip": false,
136
+ "normalized": false,
137
+ "rstrip": false,
138
+ "single_word": false,
139
+ "special": false
140
+ },
141
+ "151660": {
142
+ "content": "<|fim_middle|>",
143
+ "lstrip": false,
144
+ "normalized": false,
145
+ "rstrip": false,
146
+ "single_word": false,
147
+ "special": false
148
+ },
149
+ "151661": {
150
+ "content": "<|fim_suffix|>",
151
+ "lstrip": false,
152
+ "normalized": false,
153
+ "rstrip": false,
154
+ "single_word": false,
155
+ "special": false
156
+ },
157
+ "151662": {
158
+ "content": "<|fim_pad|>",
159
+ "lstrip": false,
160
+ "normalized": false,
161
+ "rstrip": false,
162
+ "single_word": false,
163
+ "special": false
164
+ },
165
+ "151663": {
166
+ "content": "<|repo_name|>",
167
+ "lstrip": false,
168
+ "normalized": false,
169
+ "rstrip": false,
170
+ "single_word": false,
171
+ "special": false
172
+ },
173
+ "151664": {
174
+ "content": "<|file_sep|>",
175
+ "lstrip": false,
176
+ "normalized": false,
177
+ "rstrip": false,
178
+ "single_word": false,
179
+ "special": false
180
+ },
181
+ "151665": {
182
+ "content": "<tool_response>",
183
+ "lstrip": false,
184
+ "normalized": false,
185
+ "rstrip": false,
186
+ "single_word": false,
187
+ "special": false
188
+ },
189
+ "151666": {
190
+ "content": "</tool_response>",
191
+ "lstrip": false,
192
+ "normalized": false,
193
+ "rstrip": false,
194
+ "single_word": false,
195
+ "special": false
196
+ },
197
+ "151667": {
198
+ "content": "<think>",
199
+ "lstrip": false,
200
+ "normalized": false,
201
+ "rstrip": false,
202
+ "single_word": false,
203
+ "special": false
204
+ },
205
+ "151668": {
206
+ "content": "</think>",
207
+ "lstrip": false,
208
+ "normalized": false,
209
+ "rstrip": false,
210
+ "single_word": false,
211
+ "special": false
212
+ }
213
+ },
214
+ "additional_special_tokens": [
215
+ "<|im_start|>",
216
+ "<|im_end|>",
217
+ "<|object_ref_start|>",
218
+ "<|object_ref_end|>",
219
+ "<|box_start|>",
220
+ "<|box_end|>",
221
+ "<|quad_start|>",
222
+ "<|quad_end|>",
223
+ "<|vision_start|>",
224
+ "<|vision_end|>",
225
+ "<|vision_pad|>",
226
+ "<|image_pad|>",
227
+ "<|video_pad|>"
228
+ ],
229
+ "bos_token": null,
230
+ "clean_up_tokenization_spaces": false,
231
+ "eos_token": "<|im_end|>",
232
+ "errors": "replace",
233
+ "extra_special_tokens": {},
234
+ "model_max_length": 1048576,
235
+ "pad_token": "<|endoftext|>",
236
+ "split_special_tokens": false,
237
+ "tokenizer_class": "Qwen2Tokenizer",
238
+ "unk_token": null
239
+ }
coding-25-nonuniform/vllm_pruned_patch.py ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Monkey-patch vLLM's Qwen3-Next MoE block to support heterogeneous per-layer expert counts.
2
+
3
+ Use:
4
+ import vllm_pruned_patch
5
+ vllm_pruned_patch.apply()
6
+ # ...then any vLLM import / engine / lcb_runner call
7
+
8
+ The patch reads `config.per_layer_num_experts` (a list of length num_hidden_layers)
9
+ written by `prune_and_save.py`. If that field is missing the patch is a no-op,
10
+ so it's safe to apply unconditionally.
11
+
12
+ Tested against vLLM 0.16.0 / Qwen3NextSparseMoeBlock.
13
+ EP (expert parallelism) is NOT supported with heterogeneous counts —
14
+ keep --enable-eplb off (the default) and stick to TP-only.
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ import logging
20
+
21
+ logger = logging.getLogger(__name__)
22
+
23
+ _PATCHED = False
24
+
25
+
26
+ def apply():
27
+ """Idempotently install the patch. Safe to call multiple times."""
28
+ global _PATCHED
29
+ if _PATCHED:
30
+ return
31
+
32
+ from vllm.model_executor.models import qwen3_next as qm
33
+ from vllm.model_executor.models.utils import extract_layer_index
34
+
35
+ OriginalBlock = qm.Qwen3NextSparseMoeBlock
36
+ original_init = OriginalBlock.__init__
37
+
38
+ def patched_init(self, vllm_config, prefix: str = ""):
39
+ cfg = vllm_config.model_config.hf_config
40
+ per_layer = getattr(cfg, "per_layer_num_experts", None)
41
+ if per_layer is None:
42
+ # No pruning metadata — fall through to original behavior.
43
+ return original_init(self, vllm_config, prefix=prefix)
44
+
45
+ layer_idx = extract_layer_index(prefix)
46
+ n_local = int(per_layer[layer_idx])
47
+ original_n = cfg.num_experts
48
+
49
+ # Temporarily override num_experts on the (shared) hf_config so the
50
+ # original __init__ constructs gate + FusedMoE with the right size.
51
+ # Restore immediately after to avoid bleeding into other layers.
52
+ try:
53
+ cfg.num_experts = n_local
54
+ original_init(self, vllm_config, prefix=prefix)
55
+ finally:
56
+ cfg.num_experts = original_n
57
+
58
+ qm.Qwen3NextSparseMoeBlock.__init__ = patched_init
59
+
60
+ # Patch get_expert_mapping to use max kept count (smaller mapping table).
61
+ OriginalLM = qm.Qwen3NextForCausalLM
62
+ original_get_expert_mapping = OriginalLM.get_expert_mapping
63
+
64
+ def patched_get_expert_mapping(self):
65
+ per_layer = getattr(self.config, "per_layer_num_experts", None)
66
+ if per_layer is None:
67
+ return original_get_expert_mapping(self)
68
+ from vllm.model_executor.layers.fused_moe.shared_fused_moe import (
69
+ SharedFusedMoE,
70
+ )
71
+ # Saved checkpoint always has expert ids 0..max-1 across layers
72
+ # (each layer is re-indexed densely in prune_and_save.py).
73
+ max_n = max(int(x) for x in per_layer)
74
+ return SharedFusedMoE.make_expert_params_mapping(
75
+ self,
76
+ ckpt_gate_proj_name="gate_proj",
77
+ ckpt_down_proj_name="down_proj",
78
+ ckpt_up_proj_name="up_proj",
79
+ num_experts=max_n,
80
+ num_redundant_experts=self.num_redundant_experts,
81
+ )
82
+
83
+ qm.Qwen3NextForCausalLM.get_expert_mapping = patched_get_expert_mapping
84
+
85
+ _PATCHED = True
86
+ logger.info(
87
+ "Applied Qwen3-Next pruned-model patch (heterogeneous per-layer expert counts)."
88
+ )
coding-25-nonuniform/vocab.json ADDED
The diff for this file is too large to render. See raw diff