Support Intern-S2-Preview (#24875)

This commit is contained in:
RunningLeon
2026-05-10 22:17:30 +08:00
committed by GitHub
parent 59faf986b2
commit 335dbd60b4
11 changed files with 64 additions and 2 deletions
+2
View File
@@ -8,6 +8,7 @@ from sglang.srt.configs.dots_vlm import DotsVLMConfig
from sglang.srt.configs.exaone import ExaoneConfig
from sglang.srt.configs.falcon_h1 import FalconH1Config
from sglang.srt.configs.granitemoehybrid import GraniteMoeHybridConfig
from sglang.srt.configs.interns2preview import InternS2PreviewConfig
from sglang.srt.configs.janus_pro import MultiModalityConfig
from sglang.srt.configs.jet_nemotron import JetNemotronConfig
from sglang.srt.configs.jet_vlm import JetVLMConfig
@@ -57,6 +58,7 @@ __all__ = [
"Qwen3NextConfig",
"Qwen3_5Config",
"Qwen3_5MoeConfig",
"InternS2PreviewConfig",
"DotsVLMConfig",
"DotsOCRConfig",
"FalconH1Config",
@@ -0,0 +1,23 @@
from sglang.srt.configs.qwen3_5 import (
Qwen3_5MoeConfig,
Qwen3_5MoeTextConfig,
Qwen3_5MoeVisionConfig,
)
class InternS2PreviewVisionConfig(Qwen3_5MoeVisionConfig):
model_type = "intern_s2_preview"
def __init__(self, **kwargs):
super().__init__(**kwargs)
class InternS2PreviewConfig(Qwen3_5MoeConfig):
model_type = "intern_s2_preview"
sub_configs = {
"vision_config": InternS2PreviewVisionConfig,
"text_config": Qwen3_5MoeTextConfig,
}
def __init__(self, **kwargs):
super().__init__(**kwargs)
@@ -466,6 +466,7 @@ class ModelConfig:
if is_draft_model and self.hf_config.architectures[0] in [
"Qwen3_5ForConditionalGeneration",
"Qwen3_5MoeForConditionalGeneration",
"InternS2PreviewForConditionalGeneration",
]:
self.hf_config.architectures[0] = "Qwen3_5ForCausalLMMTP"
self.hf_config.num_nextn_predict_layers = 1
@@ -1522,6 +1523,7 @@ multimodal_model_archs = [
"Qwen3VLMoeForConditionalGeneration",
"Qwen3_5ForConditionalGeneration",
"Qwen3_5MoeForConditionalGeneration",
"InternS2PreviewForConditionalGeneration",
"Qwen3ASRForConditionalGeneration",
"Qwen3OmniMoeForConditionalGeneration",
"KimiVLForConditionalGeneration",
@@ -970,7 +970,13 @@ class MMEncoder:
# Get additional video metadata
if (
self.model_type
in ["qwen3_vl", "qwen3_vl_moe", "qwen3_5", "qwen3_5_moe"]
in [
"qwen3_vl",
"qwen3_vl_moe",
"qwen3_5",
"qwen3_5_moe",
"intern_s2_preview",
]
and video_processor_kwargs.get("video_metadata", None) is not None
):
# For qwen3-vl/qwen3.5 models, we need to store the video timestamps
@@ -159,6 +159,7 @@ def get_rope_index(
"qwen3_vl_moe",
"qwen3_5",
"qwen3_5_moe",
"intern_s2_preview",
):
t_index = (
torch.arange(llm_grid_t, device=position_ids.device)
@@ -40,6 +40,7 @@ from sglang.srt.configs import (
BailingHybridConfig,
FalconH1Config,
GraniteMoeHybridConfig,
InternS2PreviewConfig,
JetNemotronConfig,
JetVLMConfig,
KimiLinearConfig,
@@ -2193,6 +2194,7 @@ class ModelRunner(ModelRunnerKVCacheMixin):
Qwen3NextConfig
| Qwen3_5Config
| Qwen3_5MoeConfig
| InternS2PreviewConfig
| JetNemotronConfig
| JetVLMConfig,
):
@@ -0,0 +1,9 @@
# Models
from sglang.srt.models.qwen3_5 import Qwen3_5MoeForConditionalGeneration
class InternS2PreviewForConditionalGeneration(Qwen3_5MoeForConditionalGeneration):
"""InternS2Preview Vision-Language Model."""
EntryClass = [InternS2PreviewForConditionalGeneration]
@@ -17,6 +17,7 @@ from sglang.srt.managers.schedule_batch import (
MultimodalDataItem,
MultimodalProcessorOutput,
)
from sglang.srt.models.interns2preview import InternS2PreviewForConditionalGeneration
from sglang.srt.models.qwen2_5_vl import Qwen2_5_VLForConditionalGeneration
from sglang.srt.models.qwen2_vl import Qwen2VLForConditionalGeneration
from sglang.srt.models.qwen3_5 import (
@@ -246,6 +247,7 @@ class QwenVLImageProcessor(SGLangBaseProcessor):
Qwen3VLMoeForConditionalGeneration,
Qwen3_5ForConditionalGeneration,
Qwen3_5MoeForConditionalGeneration,
InternS2PreviewForConditionalGeneration,
Qwen3OmniMoeForConditionalGeneration,
]
@@ -419,7 +421,14 @@ class QwenVLImageProcessor(SGLangBaseProcessor):
audio_seq_lens = (audio_seq_lens - 2) // 2 + 1
if (
self.model_type in ["qwen3_vl", "qwen3_vl_moe", "qwen3_5", "qwen3_5_moe"]
self.model_type
in [
"qwen3_vl",
"qwen3_vl_moe",
"qwen3_5",
"qwen3_5_moe",
"intern_s2_preview",
]
and video_timestamps is not None
):
input_ids, offsets, modality_list = self.build_input_ids_with_timestamps(
@@ -522,6 +531,7 @@ class QwenVLImageProcessor(SGLangBaseProcessor):
"qwen3_vl_moe",
"qwen3_5",
"qwen3_5_moe",
"intern_s2_preview",
):
mm_items, input_ids, ret = self.process_and_combine_mm_data(
base_output,
+4
View File
@@ -2231,6 +2231,7 @@ class ServerArgs:
"Qwen3VLMoeForConditionalGeneration",
"Qwen3NextForCausalLM",
"Qwen3_5MoeForConditionalGeneration",
"InternS2PreviewForConditionalGeneration",
"Qwen3_5ForConditionalGeneration",
]:
if is_sm100_supported():
@@ -2258,6 +2259,7 @@ class ServerArgs:
if model_arch in [
"Qwen3NextForCausalLM",
"Qwen3_5MoeForConditionalGeneration",
"InternS2PreviewForConditionalGeneration",
"Qwen3_5ForConditionalGeneration",
]:
sm100_default_attn_backend = "triton"
@@ -2386,6 +2388,7 @@ class ServerArgs:
"Qwen3NextForCausalLM",
"KimiK25ForConditionalGeneration",
"Qwen3_5MoeForConditionalGeneration",
"InternS2PreviewForConditionalGeneration",
"Qwen3_5ForConditionalGeneration",
]
and (is_sm90_supported() or is_sm100_supported())
@@ -3901,6 +3904,7 @@ class ServerArgs:
"Qwen3VLMoeForConditionalGeneration",
"Qwen3_5ForConditionalGeneration",
"Qwen3_5MoeForConditionalGeneration",
"InternS2PreviewForConditionalGeneration",
"Qwen3OmniMoeForConditionalGeneration",
"Qwen2AudioForConditionalGeneration",
"Qwen2_5OmniForConditionalGeneration",
@@ -32,6 +32,7 @@ from sglang.srt.configs import (
ExaoneConfig,
FalconH1Config,
GraniteMoeHybridConfig,
InternS2PreviewConfig,
JetNemotronConfig,
JetVLMConfig,
KimiK25Config,
@@ -96,6 +97,7 @@ _CONFIG_REGISTRY: Dict[str, Type[PretrainedConfig]] = {
DeepseekVLV2Config,
Qwen3_5Config,
Qwen3_5MoeConfig,
InternS2PreviewConfig,
JetNemotronConfig,
JetVLMConfig,
KimiK25Config,