Defuser 0.0.22__tar.gz → 0.0.24__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {defuser-0.0.22 → defuser-0.0.24}/Defuser.egg-info/PKG-INFO +2 -2
- {defuser-0.0.22 → defuser-0.0.24}/PKG-INFO +2 -2
- {defuser-0.0.22 → defuser-0.0.24}/README.md +1 -1
- {defuser-0.0.22 → defuser-0.0.24}/defuser/model_registry.py +37 -3
- {defuser-0.0.22 → defuser-0.0.24}/pyproject.toml +1 -1
- {defuser-0.0.22 → defuser-0.0.24}/tests/test_candidate_coverage.py +17 -0
- {defuser-0.0.22 → defuser-0.0.24}/tests/test_meta_model_defusion.py +11 -0
- {defuser-0.0.22 → defuser-0.0.24}/Defuser.egg-info/SOURCES.txt +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/Defuser.egg-info/dependency_links.txt +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/Defuser.egg-info/requires.txt +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/Defuser.egg-info/top_level.txt +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/LICENSE +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/__init__.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/checkpoint_ops.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/defuser.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/__init__.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/glm4v.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/model_patches.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/moe_experts_interface.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/replace_modules.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/runtime_defusion.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/unfused_moe/__init__.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/unfused_moe/common.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/unfused_moe/glm4_moe.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/unfused_moe/glm4_moe_lite.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/unfused_moe/mixtral.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/unfused_moe/qwen2_moe.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/unfused_moe/qwen3_moe.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/unfused_moe/qwen3_next.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/unfused_moe/qwen3_omni_moe.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/modeling/update_module.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/utils/__init__.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/utils/common.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/utils/device.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/utils/hf.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/defuser/utils/model.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/setup.cfg +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/setup.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/tests/test_convert_model.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/tests/test_device_utils.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/tests/test_filter_rules.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/tests/test_moe_experts_interface.py +0 -0
- {defuser-0.0.22 → defuser-0.0.24}/tests/test_replace_modules_tracker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Defuser
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.24
|
|
4
4
|
Summary: Model defuser helper for HF Transformers.
|
|
5
5
|
Author-email: ModelCloud <qubitium@modelcloud.ai>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -92,7 +92,7 @@ Defuser currently supports the following `transformers>=5.3.0` `model_type` valu
|
|
|
92
92
|
|
|
93
93
|
| Pattern | Supported model types | Defused op performed ⚙️ |
|
|
94
94
|
| --- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| --- |
|
|
95
|
-
| Standard routed expert tensors 🧱 | `deepseek_v2`, `dots1`, `ernie4_5_moe`, `ernie4_5_vl_moe`, `exaone_moe`, `flex_olmo`, `glm4_moe_lite`, `glm4v_moe`, `hunyuan_v1_moe`, `jamba`, `laguna`, `lfm2_moe`, `minimax`, `minimax_m2`, `olmoe`, `qwen3_vl_moe`, `solar_open` | Splits fused expert tensors or registered expert buffers into numbered expert `nn.Linear` modules with per-expert `gate_proj`, `up_proj`, and `down_proj`. |
|
|
95
|
+
| Standard routed expert tensors 🧱 | `deepseek_v2`, `dots1`, `ernie4_5_moe`, `ernie4_5_vl_moe`, `exaone_moe`, `flex_olmo`, `glm4_moe_lite`, `glm4v_moe`, `hunyuan_v1_moe`, `jamba`, `laguna`, `lfm2_moe`, `minimax`, `minimax_m2`, `olmoe`, `qwen3_vl_moe`, `solar_open`, `solar_open2` | Splits fused expert tensors or registered expert buffers into numbered expert `nn.Linear` modules with per-expert `gate_proj`, `up_proj`, and `down_proj`. |
|
|
96
96
|
| Mixed sparse and shared experts | `deepseek_v3`, deepseek_v4`, `glm_moe_dsa`, `qwen3_5_moe`, `qwen3_5_moe_text` | Runtime expert tensor defusion for routed experts while preserving the model's shared-expert path. |
|
|
97
97
|
| Transposed or packed expert tensors | `gpt_oss`, `phimoe` | Splits transposed fused expert `gate_up_proj` tensors into per-expert `gate_proj` + `up_proj`, preserves expert bias when present, and converts expert tensors into numbered expert `nn.Linear` modules. |
|
|
98
98
|
| Flattened expert layout | `dbrx` | Rebuilds the flattened DBRX expert FFN weights into numbered expert `gate_proj`, `up_proj`, and `down_proj` `nn.Linear` modules. |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Defuser
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.24
|
|
4
4
|
Summary: Model defuser helper for HF Transformers.
|
|
5
5
|
Author-email: ModelCloud <qubitium@modelcloud.ai>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -92,7 +92,7 @@ Defuser currently supports the following `transformers>=5.3.0` `model_type` valu
|
|
|
92
92
|
|
|
93
93
|
| Pattern | Supported model types | Defused op performed ⚙️ |
|
|
94
94
|
| --- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| --- |
|
|
95
|
-
| Standard routed expert tensors 🧱 | `deepseek_v2`, `dots1`, `ernie4_5_moe`, `ernie4_5_vl_moe`, `exaone_moe`, `flex_olmo`, `glm4_moe_lite`, `glm4v_moe`, `hunyuan_v1_moe`, `jamba`, `laguna`, `lfm2_moe`, `minimax`, `minimax_m2`, `olmoe`, `qwen3_vl_moe`, `solar_open` | Splits fused expert tensors or registered expert buffers into numbered expert `nn.Linear` modules with per-expert `gate_proj`, `up_proj`, and `down_proj`. |
|
|
95
|
+
| Standard routed expert tensors 🧱 | `deepseek_v2`, `dots1`, `ernie4_5_moe`, `ernie4_5_vl_moe`, `exaone_moe`, `flex_olmo`, `glm4_moe_lite`, `glm4v_moe`, `hunyuan_v1_moe`, `jamba`, `laguna`, `lfm2_moe`, `minimax`, `minimax_m2`, `olmoe`, `qwen3_vl_moe`, `solar_open`, `solar_open2` | Splits fused expert tensors or registered expert buffers into numbered expert `nn.Linear` modules with per-expert `gate_proj`, `up_proj`, and `down_proj`. |
|
|
96
96
|
| Mixed sparse and shared experts | `deepseek_v3`, deepseek_v4`, `glm_moe_dsa`, `qwen3_5_moe`, `qwen3_5_moe_text` | Runtime expert tensor defusion for routed experts while preserving the model's shared-expert path. |
|
|
97
97
|
| Transposed or packed expert tensors | `gpt_oss`, `phimoe` | Splits transposed fused expert `gate_up_proj` tensors into per-expert `gate_proj` + `up_proj`, preserves expert bias when present, and converts expert tensors into numbered expert `nn.Linear` modules. |
|
|
98
98
|
| Flattened expert layout | `dbrx` | Rebuilds the flattened DBRX expert FFN weights into numbered expert `gate_proj`, `up_proj`, and `down_proj` `nn.Linear` modules. |
|
|
@@ -66,7 +66,7 @@ Defuser currently supports the following `transformers>=5.3.0` `model_type` valu
|
|
|
66
66
|
|
|
67
67
|
| Pattern | Supported model types | Defused op performed ⚙️ |
|
|
68
68
|
| --- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| --- |
|
|
69
|
-
| Standard routed expert tensors 🧱 | `deepseek_v2`, `dots1`, `ernie4_5_moe`, `ernie4_5_vl_moe`, `exaone_moe`, `flex_olmo`, `glm4_moe_lite`, `glm4v_moe`, `hunyuan_v1_moe`, `jamba`, `laguna`, `lfm2_moe`, `minimax`, `minimax_m2`, `olmoe`, `qwen3_vl_moe`, `solar_open` | Splits fused expert tensors or registered expert buffers into numbered expert `nn.Linear` modules with per-expert `gate_proj`, `up_proj`, and `down_proj`. |
|
|
69
|
+
| Standard routed expert tensors 🧱 | `deepseek_v2`, `dots1`, `ernie4_5_moe`, `ernie4_5_vl_moe`, `exaone_moe`, `flex_olmo`, `glm4_moe_lite`, `glm4v_moe`, `hunyuan_v1_moe`, `jamba`, `laguna`, `lfm2_moe`, `minimax`, `minimax_m2`, `olmoe`, `qwen3_vl_moe`, `solar_open`, `solar_open2` | Splits fused expert tensors or registered expert buffers into numbered expert `nn.Linear` modules with per-expert `gate_proj`, `up_proj`, and `down_proj`. |
|
|
70
70
|
| Mixed sparse and shared experts | `deepseek_v3`, deepseek_v4`, `glm_moe_dsa`, `qwen3_5_moe`, `qwen3_5_moe_text` | Runtime expert tensor defusion for routed experts while preserving the model's shared-expert path. |
|
|
71
71
|
| Transposed or packed expert tensors | `gpt_oss`, `phimoe` | Splits transposed fused expert `gate_up_proj` tensors into per-expert `gate_proj` + `up_proj`, preserves expert bias when present, and converts expert tensors into numbered expert `nn.Linear` modules. |
|
|
72
72
|
| Flattened expert layout | `dbrx` | Rebuilds the flattened DBRX expert FFN weights into numbered expert `gate_proj`, `up_proj`, and `down_proj` `nn.Linear` modules. |
|
|
@@ -16,12 +16,21 @@ class PATCH(str, Enum):
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
MODEL_CONFIG = {
|
|
19
|
+
"cohere2_moe": {
|
|
20
|
+
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
21
|
+
},
|
|
19
22
|
"dbrx": {
|
|
20
23
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
21
24
|
},
|
|
22
25
|
"deepseek_v2": {
|
|
23
26
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
24
27
|
},
|
|
28
|
+
"deepseek_ocr2": {
|
|
29
|
+
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
30
|
+
},
|
|
31
|
+
"inkling_mm_model": {
|
|
32
|
+
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
33
|
+
},
|
|
25
34
|
"deepseek_v3": {
|
|
26
35
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
27
36
|
},
|
|
@@ -62,8 +71,12 @@ MODEL_CONFIG = {
|
|
|
62
71
|
],
|
|
63
72
|
"checkpoint_mapping": [
|
|
64
73
|
WeightRenaming(".block_sparse_moe.", ".mlp."),
|
|
65
|
-
WeightRenaming(
|
|
66
|
-
|
|
74
|
+
WeightRenaming(
|
|
75
|
+
r".experts.(\d+).w1.weight", r".experts.\1.gate_proj.weight"
|
|
76
|
+
),
|
|
77
|
+
WeightRenaming(
|
|
78
|
+
r".experts.(\d+).w2.weight", r".experts.\1.down_proj.weight"
|
|
79
|
+
),
|
|
67
80
|
WeightRenaming(r".experts.(\d+).w3.weight", r".experts.\1.up_proj.weight"),
|
|
68
81
|
WeightConverter(
|
|
69
82
|
source_patterns=".experts.gate_up_proj",
|
|
@@ -124,7 +137,7 @@ MODEL_CONFIG = {
|
|
|
124
137
|
(
|
|
125
138
|
"transformers.models.qwen3_omni_moe.modeling_qwen3_omni_moe.Qwen3OmniMoeTalkerTextSparseMoeBlock",
|
|
126
139
|
"defuser.modeling.unfused_moe.qwen3_omni_moe.LinearQwen3OmniMoeTalkerTextSparseMoeBlock",
|
|
127
|
-
)
|
|
140
|
+
),
|
|
128
141
|
],
|
|
129
142
|
},
|
|
130
143
|
"glm4_moe": {
|
|
@@ -168,6 +181,9 @@ MODEL_CONFIG = {
|
|
|
168
181
|
"glm4v_moe": {
|
|
169
182
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
170
183
|
},
|
|
184
|
+
"glm4v_moe_text": {
|
|
185
|
+
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
186
|
+
},
|
|
171
187
|
"glm_image": {
|
|
172
188
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
173
189
|
},
|
|
@@ -192,6 +208,9 @@ MODEL_CONFIG = {
|
|
|
192
208
|
"hunyuan_v1_moe": {
|
|
193
209
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
194
210
|
},
|
|
211
|
+
"hy_v3": {
|
|
212
|
+
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
213
|
+
},
|
|
195
214
|
"jamba": {
|
|
196
215
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
197
216
|
},
|
|
@@ -210,6 +229,15 @@ MODEL_CONFIG = {
|
|
|
210
229
|
}
|
|
211
230
|
],
|
|
212
231
|
},
|
|
232
|
+
"llama4_text": {
|
|
233
|
+
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
234
|
+
PATCH.EXPERTS_DEFUSE: [
|
|
235
|
+
{
|
|
236
|
+
"module_class": "transformers.models.llama4.modeling_llama4.Llama4TextExperts",
|
|
237
|
+
"forward_impl": "batched_input",
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
},
|
|
213
241
|
"lfm2_moe": {
|
|
214
242
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
215
243
|
},
|
|
@@ -222,6 +250,9 @@ MODEL_CONFIG = {
|
|
|
222
250
|
"minimax_m2": {
|
|
223
251
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
224
252
|
},
|
|
253
|
+
"minimax_m3_vl": {
|
|
254
|
+
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
255
|
+
},
|
|
225
256
|
"nemotron_h": {
|
|
226
257
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
227
258
|
},
|
|
@@ -243,6 +274,9 @@ MODEL_CONFIG = {
|
|
|
243
274
|
"solar_open": {
|
|
244
275
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
245
276
|
},
|
|
277
|
+
"solar_open2": {
|
|
278
|
+
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
279
|
+
},
|
|
246
280
|
"zamba2": {
|
|
247
281
|
"min_transformers_version": MIN_SUPPORTED_TRANSFORMERS_VERSION,
|
|
248
282
|
},
|
|
@@ -351,6 +351,22 @@ STANDARD_MOE_CASES = [
|
|
|
351
351
|
"route_indices": [[0], [1], [2], [3], [0]],
|
|
352
352
|
"expert_attrs": ("gate_proj", "up_proj", "down_proj"),
|
|
353
353
|
},
|
|
354
|
+
{
|
|
355
|
+
"model_type": "solar_open2",
|
|
356
|
+
"module_path": "transformers.models.solar_open2.modeling_solar_open2",
|
|
357
|
+
"class_name": "SolarOpen2Experts",
|
|
358
|
+
"config_module": "transformers.models.solar_open2.configuration_solar_open2",
|
|
359
|
+
"config_name": "SolarOpen2Config",
|
|
360
|
+
"config_updates": {
|
|
361
|
+
"hidden_size": 64,
|
|
362
|
+
"moe_intermediate_size": 32,
|
|
363
|
+
"n_routed_experts": 4,
|
|
364
|
+
"hidden_act": "silu",
|
|
365
|
+
},
|
|
366
|
+
"input_dim": 64,
|
|
367
|
+
"route_indices": [[0], [1], [2], [3], [0]],
|
|
368
|
+
"expert_attrs": ("gate_proj", "up_proj", "down_proj"),
|
|
369
|
+
},
|
|
354
370
|
{
|
|
355
371
|
"model_type": "dbrx",
|
|
356
372
|
"module_path": "transformers.models.dbrx.modeling_dbrx",
|
|
@@ -571,6 +587,7 @@ ALL_CANDIDATE_MODEL_TYPES = {
|
|
|
571
587
|
"qwen3_omni_moe",
|
|
572
588
|
"qwen3_vl_moe",
|
|
573
589
|
"solar_open",
|
|
590
|
+
"solar_open2",
|
|
574
591
|
"zamba2",
|
|
575
592
|
}
|
|
576
593
|
|
|
@@ -779,6 +779,17 @@ META_MODEL_CASES = [
|
|
|
779
779
|
"target_class_paths": ("transformers.models.solar_open.modeling_solar_open.SolarOpenNaiveMoe",),
|
|
780
780
|
"validator": "experts",
|
|
781
781
|
},
|
|
782
|
+
{
|
|
783
|
+
"model_type": "solar_open2",
|
|
784
|
+
"mode": "convert",
|
|
785
|
+
"model_module": "transformers.models.solar_open2.modeling_solar_open2",
|
|
786
|
+
"model_class": "SolarOpen2ForCausalLM",
|
|
787
|
+
"config_module": "transformers.models.solar_open2.configuration_solar_open2",
|
|
788
|
+
"config_class": "SolarOpen2Config",
|
|
789
|
+
"target_class_paths": ("transformers.models.solar_open2.modeling_solar_open2.SolarOpen2Experts",),
|
|
790
|
+
"validator": "experts",
|
|
791
|
+
"min_targets": 2,
|
|
792
|
+
},
|
|
782
793
|
{
|
|
783
794
|
"model_type": "zamba2",
|
|
784
795
|
"mode": "convert",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|