main
py 217 lines 6.52 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 """Entrypoints for wrapping the core run_test implementation for specific test
4 types / modalities.
5 """
6
7 import itertools
8 from pathlib import PosixPath
9
10 from .....conftest import (
11 AudioTestAssets,
12 HfRunner,
13 ImageTestAssets,
14 VideoTestAssets,
15 VllmRunner,
16 )
17 from . import builders, core
18 from .types import ExpandableVLMTestArgs, VLMTestInfo
19
20
21 ####### Entrypoints for running different test types
22 def run_single_image_test(
23 *,
24 tmp_path: PosixPath,
25 model_test_info: VLMTestInfo,
26 test_case: ExpandableVLMTestArgs,
27 hf_runner: type[HfRunner],
28 vllm_runner: type[VllmRunner],
29 image_assets: ImageTestAssets,
30 ):
31 assert test_case.size_wrappers
32 inputs = list(
33 itertools.chain.from_iterable(
34 builders.build_single_image_inputs_from_test_info(
35 model_test_info, image_assets, size_wrapper, tmp_path
36 )
37 for size_wrapper in test_case.size_wrappers
38 )
39 )
40
41 core.run_test(
42 hf_runner=hf_runner,
43 vllm_runner=vllm_runner,
44 inputs=inputs,
45 model=test_case.model,
46 dtype=test_case.dtype,
47 max_tokens=test_case.max_tokens,
48 num_logprobs=test_case.num_logprobs,
49 limit_mm_per_prompt={"image": 1},
50 distributed_executor_backend=test_case.distributed_executor_backend,
51 **model_test_info.get_non_parametrized_runner_kwargs(),
52 )
53
54
55 def run_multi_image_test(
56 *,
57 tmp_path: PosixPath,
58 model_test_info: VLMTestInfo,
59 test_case: ExpandableVLMTestArgs,
60 hf_runner: type[HfRunner],
61 vllm_runner: type[VllmRunner],
62 image_assets: ImageTestAssets,
63 ):
64 assert test_case.size_wrappers
65 inputs = list(
66 itertools.chain.from_iterable(
67 builders.build_multi_image_inputs_from_test_info(
68 model_test_info, image_assets, size_wrapper, tmp_path
69 )
70 for size_wrapper in test_case.size_wrappers
71 )
72 )
73
74 core.run_test(
75 hf_runner=hf_runner,
76 vllm_runner=vllm_runner,
77 inputs=inputs,
78 model=test_case.model,
79 dtype=test_case.dtype,
80 max_tokens=test_case.max_tokens,
81 num_logprobs=test_case.num_logprobs,
82 limit_mm_per_prompt={"image": len(image_assets)},
83 distributed_executor_backend=test_case.distributed_executor_backend,
84 **model_test_info.get_non_parametrized_runner_kwargs(),
85 )
86
87
88 def run_embedding_test(
89 *,
90 model_test_info: VLMTestInfo,
91 test_case: ExpandableVLMTestArgs,
92 hf_runner: type[HfRunner],
93 vllm_runner: type[VllmRunner],
94 image_assets: ImageTestAssets,
95 ):
96 assert test_case.size_wrappers
97 inputs_and_embeddings = [
98 builders.build_embedding_inputs_from_test_info(
99 model_test_info, image_assets, size_wrapper
100 )
101 for size_wrapper in test_case.size_wrappers
102 ]
103 inputs = list(
104 itertools.chain.from_iterable(inputs for inputs, _ in inputs_and_embeddings)
105 )
106 vllm_embeddings = list(
107 itertools.chain.from_iterable(
108 embeddings for _, embeddings in inputs_and_embeddings
109 )
110 )
111
112 core.run_test(
113 hf_runner=hf_runner,
114 vllm_runner=vllm_runner,
115 inputs=inputs,
116 model=test_case.model,
117 dtype=test_case.dtype,
118 max_tokens=test_case.max_tokens,
119 num_logprobs=test_case.num_logprobs,
120 limit_mm_per_prompt={"image": 1},
121 vllm_embeddings=vllm_embeddings,
122 distributed_executor_backend=test_case.distributed_executor_backend,
123 **model_test_info.get_non_parametrized_runner_kwargs(),
124 )
125
126
127 def run_video_test(
128 *,
129 model_test_info: VLMTestInfo,
130 test_case: ExpandableVLMTestArgs,
131 hf_runner: type[HfRunner],
132 vllm_runner: type[VllmRunner],
133 video_assets: VideoTestAssets,
134 ):
135 assert test_case.size_wrappers
136 assert test_case.num_video_frames is not None
137 inputs = list(
138 itertools.chain.from_iterable(
139 builders.build_video_inputs_from_test_info(
140 model_test_info,
141 video_assets,
142 size_wrapper,
143 test_case.num_video_frames,
144 test_case.needs_video_metadata,
145 )
146 for size_wrapper in test_case.size_wrappers
147 )
148 )
149
150 core.run_test(
151 hf_runner=hf_runner,
152 vllm_runner=vllm_runner,
153 inputs=inputs,
154 model=test_case.model,
155 dtype=test_case.dtype,
156 max_tokens=test_case.max_tokens,
157 num_logprobs=test_case.num_logprobs,
158 limit_mm_per_prompt={"video": len(video_assets)},
159 distributed_executor_backend=test_case.distributed_executor_backend,
160 **model_test_info.get_non_parametrized_runner_kwargs(),
161 )
162
163
164 def run_audio_test(
165 *,
166 model_test_info: VLMTestInfo,
167 test_case: ExpandableVLMTestArgs,
168 hf_runner: type[HfRunner],
169 vllm_runner: type[VllmRunner],
170 audio_assets: AudioTestAssets,
171 ):
172 inputs = builders.build_audio_inputs_from_test_info(model_test_info, audio_assets)
173
174 core.run_test(
175 hf_runner=hf_runner,
176 vllm_runner=vllm_runner,
177 inputs=inputs,
178 model=test_case.model,
179 dtype=test_case.dtype,
180 max_tokens=test_case.max_tokens,
181 num_logprobs=test_case.num_logprobs,
182 limit_mm_per_prompt={"audio": 1},
183 distributed_executor_backend=test_case.distributed_executor_backend,
184 **model_test_info.get_non_parametrized_runner_kwargs(),
185 )
186
187
188 def run_custom_inputs_test(
189 *,
190 model_test_info: VLMTestInfo,
191 test_case: ExpandableVLMTestArgs,
192 hf_runner: type[HfRunner],
193 vllm_runner: type[VllmRunner],
194 ):
195 # Custom test cases can provide inputs directly, but they need to
196 # explicitly provided a CustomTestConfig, which wraps the inputs and
197 # the limit_mm_per_prompt
198 assert test_case.custom_test_opts is not None
199
200 inputs = test_case.custom_test_opts.inputs
201 limit_mm_per_prompt = test_case.custom_test_opts.limit_mm_per_prompt
202 # Inputs and limit_mm_per_prompt should all be set
203 assert inputs is not None
204 assert limit_mm_per_prompt is not None
205
206 core.run_test(
207 hf_runner=hf_runner,
208 vllm_runner=vllm_runner,
209 inputs=inputs,
210 model=test_case.model,
211 dtype=test_case.dtype,
212 max_tokens=test_case.max_tokens,
213 num_logprobs=test_case.num_logprobs,
214 limit_mm_per_prompt=limit_mm_per_prompt,
215 distributed_executor_backend=test_case.distributed_executor_backend,
216 **model_test_info.get_non_parametrized_runner_kwargs(),
217 )