Skip to content

Commit c9046cf

Browse files
committed
[lora] enable bias support for fused moe lora
Signed-off-by: AlpinDale <alpindale@gmail.com>
1 parent a3d7b9d commit c9046cf

2 files changed

Lines changed: 13 additions & 30 deletions

File tree

aphrodite/lora/layers/fused_moe.py

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,17 @@
99
from aphrodite.distributed.parallel_state import get_tensor_model_parallel_rank, get_tensor_model_parallel_world_size
1010
from aphrodite.lora.layers.base import BaseLayerWithLoRA
1111
from aphrodite.modeling.layers.fused_moe import FusedMoE
12-
from aphrodite.modeling.layers.fused_moe.config import (
13-
FUSED_MOE_UNQUANTIZED_CONFIG,
14-
_get_config_dtype_str,
15-
mxfp4_w4a16_moe_quant_config,
16-
)
12+
from aphrodite.modeling.layers.fused_moe.config import _get_config_dtype_str
1713
from aphrodite.modeling.layers.fused_moe.fused_marlin_moe import modular_marlin_fused_moe
1814
from aphrodite.modeling.layers.fused_moe.fused_moe import modular_triton_fused_moe, try_get_optimal_moe_config
19-
from aphrodite.quantization.mxfp4 import Mxfp4Config
2015

2116

2217
class FusedMoEWithLoRA(BaseLayerWithLoRA):
2318
def __init__(self, base_layer: FusedMoE) -> None:
2419
super().__init__()
2520
self.base_layer = base_layer
21+
22+
assert not self.base_layer.use_ep, "EP support for Fused MoE LoRA is not implemented yet."
2623
self.tp_size = get_tensor_model_parallel_world_size()
2724
self.tp_rank = get_tensor_model_parallel_rank()
2825
self.device = base_layer.w2_weight.device
@@ -32,17 +29,8 @@ def _inject_lora_into_fused_moe(self):
3229
moe_state_dict = {}
3330
top_k = self.base_layer.top_k
3431

35-
if self.base_layer.quant_config is None:
36-
quant_config = FUSED_MOE_UNQUANTIZED_CONFIG
37-
elif not isinstance(self.base_layer.quant_config, Mxfp4Config):
38-
quant_config = self.base_layer.quant_config
39-
else:
40-
quant_config = mxfp4_w4a16_moe_quant_config(
41-
w1_bias=self.base_layer.w13_bias,
42-
w2_bias=self.base_layer.w2_bias,
43-
w1_scale=self.base_layer.w13_weight_scale,
44-
w2_scale=self.base_layer.w2_weight_scale,
45-
)
32+
self.base_layer.ensure_moe_quant_config_init()
33+
quant_config = self.base_layer.quant_method.moe_quant_config
4634

4735
m_fused_moe_fn = (
4836
modular_triton_fused_moe(quant_config, shared_experts=self.base_layer.shared_experts)
@@ -70,7 +58,6 @@ def wrapper(*args, **kwargs):
7058
hidden_states = moe_state_dict["hidden_states"]
7159
topk_weights = moe_state_dict["topk_weights"]
7260
curr_topk_ids = moe_state_dict["topk_ids"]
73-
global_num_experts = moe_state_dict["global_num_experts"]
7461
expert_map = moe_state_dict["expert_map"]
7562

7663
config_dtype = _get_config_dtype_str(
@@ -102,7 +89,7 @@ def wrapper(*args, **kwargs):
10289
curr_topk_ids,
10390
num_tokens,
10491
config["BLOCK_SIZE_M"],
105-
global_num_experts,
92+
self.base_layer.local_num_experts,
10693
max_loras,
10794
expert_map,
10895
)
@@ -210,12 +197,10 @@ def create_lora_weights(
210197
) -> None:
211198
"""Initializes lora matrices."""
212199

213-
assert not self.base_layer.use_ep, "EP support for Fused MoE LoRA is not implemented yet."
214-
215200
self.w1_lora_a_stacked = torch.zeros(
216201
(
217202
max_loras,
218-
self.base_layer.global_num_experts,
203+
self.base_layer.local_num_experts,
219204
lora_config.max_lora_rank,
220205
self.base_layer.hidden_size,
221206
),
@@ -225,7 +210,7 @@ def create_lora_weights(
225210
self.w1_lora_b_stacked = torch.zeros(
226211
(
227212
max_loras,
228-
self.base_layer.global_num_experts,
213+
self.base_layer.local_num_experts,
229214
self.base_layer.intermediate_size_per_partition,
230215
lora_config.max_lora_rank,
231216
),
@@ -236,7 +221,7 @@ def create_lora_weights(
236221
self.w2_lora_a_stacked = torch.zeros(
237222
(
238223
max_loras,
239-
self.base_layer.global_num_experts,
224+
self.base_layer.local_num_experts,
240225
lora_config.max_lora_rank,
241226
self.base_layer.intermediate_size_per_partition,
242227
),
@@ -246,7 +231,7 @@ def create_lora_weights(
246231
self.w2_lora_b_stacked = torch.zeros(
247232
(
248233
max_loras,
249-
self.base_layer.global_num_experts,
234+
self.base_layer.local_num_experts,
250235
self.base_layer.hidden_size,
251236
lora_config.max_lora_rank,
252237
),
@@ -257,7 +242,7 @@ def create_lora_weights(
257242
self.w3_lora_a_stacked = torch.zeros(
258243
(
259244
max_loras,
260-
self.base_layer.global_num_experts,
245+
self.base_layer.local_num_experts,
261246
lora_config.max_lora_rank,
262247
self.base_layer.hidden_size,
263248
),
@@ -267,7 +252,7 @@ def create_lora_weights(
267252
self.w3_lora_b_stacked = torch.zeros(
268253
(
269254
max_loras,
270-
self.base_layer.global_num_experts,
255+
self.base_layer.local_num_experts,
271256
self.base_layer.intermediate_size_per_partition,
272257
lora_config.max_lora_rank,
273258
),
@@ -280,7 +265,7 @@ def create_lora_weights(
280265
self.lora_a_stacked = []
281266
self.lora_b_stacked = []
282267
for lora_id in range(max_loras):
283-
for experts_id in range(self.base_layer.global_num_experts):
268+
for experts_id in range(self.base_layer.local_num_experts):
284269
# gate_proj,down_proj,up_proj
285270
self.lora_a_stacked.append(self.w1_lora_a_stacked[lora_id][experts_id])
286271
self.lora_a_stacked.append(self.w2_lora_a_stacked[lora_id][experts_id])

aphrodite/modeling/layers/fused_moe/layer.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,8 +629,6 @@ def forward_cuda(
629629
apply_router_weight_on_input=apply_router_weight_on_input,
630630
)
631631
elif self.fused_experts is not None:
632-
if self.moe.has_bias:
633-
raise ValueError("FusedMoEModularKernel does not support bias.")
634632
result = self.fused_experts(
635633
hidden_states=x,
636634
w1=layer.w13_weight,

0 commit comments

Comments
 (0)