main
py 63 lines 2.16 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 import weakref
4
5 import pytest
6
7 from vllm import LLM, PoolingRequestOutput
8 from vllm.config import PoolerConfig
9 from vllm.tasks import PoolingTask
10
11 MODEL_NAME = "intfloat/multilingual-e5-small"
12
13 prompt = "The chef prepared a delicious meal."
14 prompt_token_ids = [0, 581, 21861, 133888, 10, 8, 150, 60744, 109911, 5, 2]
15 embedding_size = 384
16
17
18 @pytest.fixture(scope="module")
19 def llm(vllm_runner):
20 with vllm_runner(
21 MODEL_NAME,
22 max_model_len=None,
23 pooler_config=PoolerConfig(task="token_embed"),
24 max_num_batched_tokens=32768,
25 tensor_parallel_size=1,
26 gpu_memory_utilization=0.75,
27 enforce_eager=True,
28 seed=0,
29 enable_chunked_prefill=None,
30 ) as runner:
31 assert embedding_size == runner.llm.model_config.embedding_size
32 # pytest caches yielded fixtures until after teardown, so use a proxy to
33 # avoid retaining the LLM while VllmRunner.__exit__ releases ROCm memory.
34 yield weakref.proxy(runner.llm)
35
36
37 @pytest.mark.skip_global_cleanup
38 def test_str_prompts(llm: LLM):
39 outputs = llm.encode(prompt, pooling_task="token_embed", use_tqdm=False)
40 assert len(outputs) == 1
41 assert isinstance(outputs[0], PoolingRequestOutput)
42 assert outputs[0].outputs.data.shape == (11, 384)
43
44
45 @pytest.mark.skip_global_cleanup
46 def test_token_ids_prompts(llm: LLM):
47 outputs = llm.encode([prompt_token_ids], pooling_task="token_embed", use_tqdm=False)
48 assert len(outputs) == 1
49 assert isinstance(outputs[0], PoolingRequestOutput)
50 assert outputs[0].outputs.data.shape == (11, 384)
51
52
53 @pytest.mark.parametrize("task", ["embed", "classify", "token_classify", "plugin"])
54 def test_unsupported_tasks(llm: LLM, task: PoolingTask, caplog_vllm):
55 if task == "plugin":
56 err_msg = "No IOProcessor plugin installed."
57 elif task == "embed":
58 err_msg = "Try switching the model's pooling_task via.+"
59 else:
60 err_msg = "Classification API is not supported by this model.+"
61
62 with pytest.raises(ValueError, match=err_msg):
63 llm.encode(prompt, pooling_task=task, use_tqdm=False)