model: support interns1-pro (#18145)
Co-authored-by: Ke Bao <ispobaoke@gmail.com>
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
import time
|
||||
from typing import List, Union
|
||||
|
||||
from sglang.srt.managers.schedule_batch import Modality, MultimodalDataItem
|
||||
from sglang.srt.models.interns1pro import InternS1ProForConditionalGeneration
|
||||
from sglang.srt.multimodal.processors.qwen_vl import (
|
||||
QwenVLImageProcessor,
|
||||
preprocess_video,
|
||||
)
|
||||
from sglang.utils import logger
|
||||
|
||||
|
||||
class InternS1_1ImageProcessor(QwenVLImageProcessor):
|
||||
models = [
|
||||
InternS1ProForConditionalGeneration,
|
||||
]
|
||||
|
||||
def get_mm_data(self, prompt, embeddings, img_grid_thw):
|
||||
input_ids, offsets = self.build_input_ids(prompt, img_grid_thw)
|
||||
|
||||
mm_items = [
|
||||
MultimodalDataItem(
|
||||
modality=Modality.IMAGE,
|
||||
offsets=offsets,
|
||||
precomputed_embeddings=embeddings,
|
||||
)
|
||||
]
|
||||
|
||||
return {
|
||||
"input_ids": input_ids,
|
||||
"mm_items": mm_items,
|
||||
"im_start_id": self.IM_START_TOKEN_ID,
|
||||
"im_end_id": self.IM_END_TOKEN_ID,
|
||||
"im_token_id": self.mm_tokens.image_token_id,
|
||||
"video_token_id": self.mm_tokens.video_token_id,
|
||||
"audio_token_id": self.mm_tokens.audio_token_id,
|
||||
}
|
||||
|
||||
async def process_mm_data_async(
|
||||
self,
|
||||
image_data: List[Union[str, bytes]],
|
||||
input_text,
|
||||
request_obj,
|
||||
*args,
|
||||
**kwargs,
|
||||
):
|
||||
entry_time = time.perf_counter()
|
||||
base_output = self.load_mm_data(
|
||||
prompt=input_text,
|
||||
image_data=image_data,
|
||||
video_data=request_obj.video_data,
|
||||
audio_data=request_obj.audio_data,
|
||||
multimodal_tokens=self.mm_tokens,
|
||||
)
|
||||
load_time = time.perf_counter()
|
||||
rid = getattr(request_obj, "rid", "anonymous_rid")
|
||||
|
||||
video_metadata = None
|
||||
if base_output.videos:
|
||||
videos_processed = [
|
||||
await preprocess_video(video, video_config=self.video_config)
|
||||
for video in base_output.videos
|
||||
]
|
||||
base_output.videos, video_metadata = map(list, zip(*videos_processed))
|
||||
|
||||
preprocess_time = time.perf_counter()
|
||||
|
||||
mm_items, input_ids, ret = self.process_and_combine_mm_data(
|
||||
base_output,
|
||||
self.mm_tokens,
|
||||
video_metadata=video_metadata,
|
||||
do_sample_frames=False,
|
||||
)
|
||||
|
||||
second_per_grid_ts = getattr(ret, "second_per_grid_ts", None)
|
||||
if second_per_grid_ts is None:
|
||||
second_per_grid_ts = getattr(ret, "video_second_per_grid", None)
|
||||
|
||||
process_time = time.perf_counter()
|
||||
|
||||
input_ids = input_ids.flatten()
|
||||
|
||||
image_grid_thw = None
|
||||
if hasattr(ret, "image_grid_thw"):
|
||||
image_grid_thw = ret.image_grid_thw
|
||||
|
||||
if image_grid_thw is None and image_data and isinstance(image_data[0], dict):
|
||||
image_grid_thw = image_data[0].get("image_grid_thw")
|
||||
|
||||
video_grid_thw = None
|
||||
if hasattr(ret, "video_grid_thw"):
|
||||
video_grid_thw = ret.video_grid_thw
|
||||
|
||||
if video_grid_thw is None and request_obj.video_data:
|
||||
first_video = request_obj.video_data[0]
|
||||
if isinstance(first_video, dict):
|
||||
video_grid_thw = first_video.get("video_grid_thw")
|
||||
|
||||
get_rope_index_time = time.perf_counter()
|
||||
|
||||
logger.debug(
|
||||
f"[QwenVLProcessor Perf] {rid=}, "
|
||||
f"load_time: {(load_time - entry_time) * 1000:.2f} ms, "
|
||||
f"preprocess_time: {(preprocess_time - load_time) * 1000:.2f} ms, "
|
||||
f"process_time: {(process_time - preprocess_time) * 1000:.2f} ms, "
|
||||
f"get_rope_index_time: {(get_rope_index_time - process_time) * 1000:.2f} ms, "
|
||||
f"total_time: {(get_rope_index_time - entry_time) * 1000:.2f} ms"
|
||||
)
|
||||
|
||||
return {
|
||||
"input_ids": input_ids.tolist(),
|
||||
"mm_items": mm_items,
|
||||
"im_start_id": self.vision_start_token_id,
|
||||
"im_end_id": self.vision_end_token_id,
|
||||
"im_token_id": self.mm_tokens.image_token_id,
|
||||
"video_token_id": self.mm_tokens.video_token_id,
|
||||
"audio_token_id": self.mm_tokens.audio_token_id,
|
||||
}
|
||||
Reference in New Issue
Block a user