Skip to content

Commit f8f135b

Browse files
committed
feat: register deepseek vl2 for vllm eval
1 parent 9aaa4d0 commit f8f135b

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

eval_with_vllm.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export CUDA_VISIBLE_DEVICES=0,1
77
declare -A MODEL_GROUP_MAP=(
88
["Qwen/Qwen3-VL-30B-A3B-Instruct"]="vllm_normal"
99
# ["moonshotai/Kimi-VL-A3B-Instruct"]="vllm_normal" # 今は動かない
10+
["deepseek-ai/deepseek-vl2"]="vllm_normal"
1011
["OpenGVLab/InternVL3-1B"]="vllm_normal"
1112
["OpenGVLab/InternVL3-2B"]="vllm_normal"
1213
["OpenGVLab/InternVL3-8B"]="vllm_normal"

examples/vllm_registry.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ def __init__(self, model_id: str):
4646
self._engine_args_kimi_vl,
4747
self._load_kimi_vl,
4848
),
49+
"deepseek-ai/deepseek-vl2": (
50+
self._engine_args_deepseek_vl2,
51+
self._load_deepseek_vl2,
52+
),
4953
}
5054

5155
for internvl_model in INTERNVL_MODELS:
@@ -199,6 +203,36 @@ def _load_internvl(
199203

200204
return ModelRequestData(prompts=prompts, stop_token_ids=stop_token_ids)
201205

206+
def _engine_args_deepseek_vl2(self) -> EngineArgs:
207+
return EngineArgs(
208+
model=self.model_id,
209+
max_model_len=4096,
210+
max_num_seqs=2,
211+
hf_overrides={"architectures": ["DeepseekVLV2ForCausalLM"]},
212+
limit_mm_per_prompt={self.modality: 1},
213+
)
214+
215+
def _load_deepseek_vl2(
216+
self, texts: list[str], images_list: list[list[Image.Image]]
217+
) -> ModelRequestData:
218+
if len(texts) != len(images_list):
219+
msg = "texts and images_list must have identical length"
220+
raise ValueError(msg)
221+
222+
prompts: list[str] = []
223+
for text, images in zip(texts, images_list):
224+
num_images = len(images)
225+
if num_images > 0:
226+
image_placeholders = " ".join("<image>" for _ in range(num_images))
227+
user_prefix = f"<|User|>: {image_placeholders}\n"
228+
else:
229+
user_prefix = "<|User|>:\n"
230+
231+
prompt = f"{user_prefix}{text}\n\n<|Assistant|>:"
232+
prompts.append(prompt)
233+
234+
return ModelRequestData(prompts=prompts)
235+
202236

203237
def _generate_dummy_images(count: int) -> list[Image.Image]:
204238
"""Return placeholder PIL images for prompt-construction tests."""
@@ -248,6 +282,20 @@ def preview_internvl_requests(
248282
return registry.build_requests(texts, images_list)
249283

250284

285+
def preview_deepseek_vl2_requests(
286+
texts: list[str], image_counts: list[int]
287+
) -> ModelRequestData:
288+
"""Build prompts for Deepseek-VL2 using dummy images (testing helper)."""
289+
290+
if len(texts) != len(image_counts):
291+
msg = "texts and image_counts must have identical length"
292+
raise ValueError(msg)
293+
294+
images_list = [_generate_dummy_images(count) for count in image_counts]
295+
registry = VLLMModelRegistry("deepseek-ai/deepseek-vl2")
296+
return registry.build_requests(texts, images_list)
297+
298+
251299
def _parse_cli_args() -> argparse.Namespace:
252300
parser = argparse.ArgumentParser(
253301
description="Preview prompts generated by the VLLM model registry.",
@@ -258,6 +306,7 @@ def _parse_cli_args() -> argparse.Namespace:
258306
choices=[
259307
"Qwen/Qwen3-VL-30B-A3B-Instruct",
260308
"moonshotai/Kimi-VL-A3B-Instruct",
309+
"deepseek-ai/deepseek-vl2",
261310
*INTERNVL_MODELS,
262311
],
263312
help="Registered model identifier to preview.",
@@ -308,6 +357,7 @@ def _preview_cli() -> None:
308357
preview_dispatch: dict[str, Callable[[list[str], list[int]], ModelRequestData]] = {
309358
"Qwen/Qwen3-VL-30B-A3B-Instruct": preview_qwen3_vl_requests,
310359
"moonshotai/Kimi-VL-A3B-Instruct": preview_kimi_vl_requests,
360+
"deepseek-ai/deepseek-vl2": preview_deepseek_vl2_requests,
311361
}
312362

313363
for internvl_model in INTERNVL_MODELS:

0 commit comments

Comments
 (0)