Skip to content

Commit 4db463b

Browse files
authored
[Model] Adding Qwen3 and Qwen3MoE (#4693)
1 parent bfa3922 commit 4db463b

5 files changed

Lines changed: 780 additions & 14 deletions

File tree

python/sglang/srt/layers/attention/flashinfer_backend.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,11 @@ def __init__(
100100
self.num_wrappers = 1
101101
self.dispatch_reason = None
102102

103-
# Qwen2 models require higher flashinfer workspace size
104-
if "Qwen2ForCausalLM" in model_runner.model_config.hf_config.architectures:
103+
# Qwen2/Qwen3 models require higher flashinfer workspace size
104+
if (
105+
"Qwen2ForCausalLM" in model_runner.model_config.hf_config.architectures
106+
or "Qwen3ForCausalLM" in model_runner.model_config.hf_config.architectures
107+
):
105108
global_config.flashinfer_workspace_size = 512 * 1024 * 1024
106109

107110
# Allocate buffers

python/sglang/srt/models/qwen2.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ def __init__(
239239
config: Qwen2Config,
240240
quant_config: Optional[QuantizationConfig] = None,
241241
prefix: str = "",
242+
decoder_layer_type: type[nn.Module] = Qwen2DecoderLayer,
242243
) -> None:
243244
super().__init__()
244245
self.config = config
@@ -250,9 +251,11 @@ def __init__(
250251
quant_config=quant_config,
251252
prefix=add_prefix("embed_tokens", prefix),
252253
)
254+
# Use the provided decoder layer type or default to Qwen2DecoderLayer
255+
decoder_layer_type = decoder_layer_type or Qwen2DecoderLayer
253256
self.layers = make_layers(
254257
config.num_hidden_layers,
255-
lambda idx, prefix: Qwen2DecoderLayer(
258+
lambda idx, prefix: decoder_layer_type(
256259
layer_id=idx,
257260
config=config,
258261
quant_config=quant_config,

python/sglang/srt/models/qwen2_moe.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
from sglang.srt.managers.expert_distribution import ExpertDistributionRecorder
4848
from sglang.srt.model_executor.forward_batch_info import ForwardBatch
4949
from sglang.srt.model_loader.weight_utils import default_weight_loader
50-
from sglang.srt.utils import add_prefix
50+
from sglang.srt.utils import add_prefix, make_layers
5151

5252
expert_distribution_recorder = ExpertDistributionRecorder()
5353

@@ -333,6 +333,7 @@ def __init__(
333333
config: PretrainedConfig,
334334
quant_config: Optional[QuantizationConfig] = None,
335335
prefix: str = "",
336+
decoder_layer_type: type[nn.Module] = Qwen2MoeDecoderLayer,
336337
) -> None:
337338
super().__init__()
338339
self.padding_idx = config.pad_token_id
@@ -343,16 +344,17 @@ def __init__(
343344
config.hidden_size,
344345
prefix=add_prefix("embed_tokens", prefix),
345346
)
346-
self.layers = nn.ModuleList(
347-
[
348-
Qwen2MoeDecoderLayer(
349-
config,
350-
layer_id,
351-
quant_config=quant_config,
352-
prefix=add_prefix(f"layers.{layer_id}", prefix),
353-
)
354-
for layer_id in range(config.num_hidden_layers)
355-
]
347+
# Use the provided decoder layer type or default to Qwen2MoeDecoderLayer
348+
decoder_layer_type = decoder_layer_type or Qwen2MoeDecoderLayer
349+
self.layers = make_layers(
350+
config.num_hidden_layers,
351+
lambda idx, prefix: decoder_layer_type(
352+
layer_id=idx,
353+
config=config,
354+
quant_config=quant_config,
355+
prefix=prefix,
356+
),
357+
prefix=add_prefix("layers", prefix),
356358
)
357359
self.norm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps)
358360

0 commit comments

Comments
 (0)