mirror of
https://git.datalinker.icu/vllm-project/vllm.git
synced 2025-12-14 16:15:34 +08:00
[CI/Build] [3/3] Reorganize entrypoints tests (#5966)
This commit is contained in:
parent
cff6a1fec1
commit
9d47f64eb6
@ -89,8 +89,8 @@ steps:
|
|||||||
mirror_hardwares: [amd]
|
mirror_hardwares: [amd]
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
- pytest -v -s entrypoints -m llm
|
- pytest -v -s entrypoints/llm
|
||||||
- pytest -v -s entrypoints -m openai
|
- pytest -v -s entrypoints/openai
|
||||||
|
|
||||||
- label: Examples Test
|
- label: Examples Test
|
||||||
working_dir: "/vllm-workspace/examples"
|
working_dir: "/vllm-workspace/examples"
|
||||||
|
|||||||
@ -69,7 +69,5 @@ skip_gitignore = true
|
|||||||
[tool.pytest.ini_options]
|
[tool.pytest.ini_options]
|
||||||
markers = [
|
markers = [
|
||||||
"skip_global_cleanup",
|
"skip_global_cleanup",
|
||||||
"llm: run tests for vLLM API only",
|
|
||||||
"openai: run tests for OpenAI API only",
|
|
||||||
"vlm: run tests for vision language models only",
|
"vlm: run tests for vision language models only",
|
||||||
]
|
]
|
||||||
|
|||||||
0
tests/entrypoints/llm/__init__.py
Normal file
0
tests/entrypoints/llm/__init__.py
Normal file
@ -5,7 +5,7 @@ import pytest
|
|||||||
|
|
||||||
from vllm import LLM, EmbeddingRequestOutput, PoolingParams
|
from vllm import LLM, EmbeddingRequestOutput, PoolingParams
|
||||||
|
|
||||||
from ..conftest import cleanup
|
from ...conftest import cleanup
|
||||||
|
|
||||||
MODEL_NAME = "intfloat/e5-mistral-7b-instruct"
|
MODEL_NAME = "intfloat/e5-mistral-7b-instruct"
|
||||||
|
|
||||||
@ -25,8 +25,6 @@ TOKEN_IDS = [
|
|||||||
[1000, 1003, 1001, 1002],
|
[1000, 1003, 1001, 1002],
|
||||||
]
|
]
|
||||||
|
|
||||||
pytestmark = pytest.mark.llm
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def llm():
|
def llm():
|
||||||
@ -5,7 +5,7 @@ import pytest
|
|||||||
|
|
||||||
from vllm import LLM, RequestOutput, SamplingParams
|
from vllm import LLM, RequestOutput, SamplingParams
|
||||||
|
|
||||||
from ..conftest import cleanup
|
from ...conftest import cleanup
|
||||||
|
|
||||||
MODEL_NAME = "facebook/opt-125m"
|
MODEL_NAME = "facebook/opt-125m"
|
||||||
|
|
||||||
@ -23,8 +23,6 @@ TOKEN_IDS = [
|
|||||||
[0, 3, 1, 2],
|
[0, 3, 1, 2],
|
||||||
]
|
]
|
||||||
|
|
||||||
pytestmark = pytest.mark.llm
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def llm():
|
def llm():
|
||||||
@ -7,7 +7,7 @@ from huggingface_hub import snapshot_download
|
|||||||
from vllm import LLM
|
from vllm import LLM
|
||||||
from vllm.lora.request import LoRARequest
|
from vllm.lora.request import LoRARequest
|
||||||
|
|
||||||
from ..conftest import cleanup
|
from ...conftest import cleanup
|
||||||
|
|
||||||
MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
|
MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
|
||||||
|
|
||||||
@ -20,8 +20,6 @@ PROMPTS = [
|
|||||||
|
|
||||||
LORA_NAME = "typeof/zephyr-7b-beta-lora"
|
LORA_NAME = "typeof/zephyr-7b-beta-lora"
|
||||||
|
|
||||||
pytestmark = pytest.mark.llm
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def llm():
|
def llm():
|
||||||
0
tests/entrypoints/openai/__init__.py
Normal file
0
tests/entrypoints/openai/__init__.py
Normal file
@ -14,7 +14,7 @@ import torch
|
|||||||
from huggingface_hub import snapshot_download
|
from huggingface_hub import snapshot_download
|
||||||
from openai import BadRequestError
|
from openai import BadRequestError
|
||||||
|
|
||||||
from ..utils import RemoteOpenAIServer
|
from ...utils import RemoteOpenAIServer
|
||||||
|
|
||||||
# any model with a chat template should work here
|
# any model with a chat template should work here
|
||||||
MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
|
MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
|
||||||
@ -69,8 +69,6 @@ TEST_CHOICE = [
|
|||||||
"Swift", "Kotlin"
|
"Swift", "Kotlin"
|
||||||
]
|
]
|
||||||
|
|
||||||
pytestmark = pytest.mark.openai
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def zephyr_lora_files():
|
def zephyr_lora_files():
|
||||||
@ -16,7 +16,7 @@ from openai import BadRequestError
|
|||||||
|
|
||||||
from vllm.transformers_utils.tokenizer import get_tokenizer
|
from vllm.transformers_utils.tokenizer import get_tokenizer
|
||||||
|
|
||||||
from ..utils import RemoteOpenAIServer
|
from ...utils import RemoteOpenAIServer
|
||||||
|
|
||||||
# any model with a chat template should work here
|
# any model with a chat template should work here
|
||||||
MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
|
MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
|
||||||
@ -71,8 +71,6 @@ TEST_CHOICE = [
|
|||||||
"Swift", "Kotlin"
|
"Swift", "Kotlin"
|
||||||
]
|
]
|
||||||
|
|
||||||
pytestmark = pytest.mark.openai
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def zephyr_lora_files():
|
def zephyr_lora_files():
|
||||||
@ -2,12 +2,10 @@ import openai
|
|||||||
import pytest
|
import pytest
|
||||||
import ray
|
import ray
|
||||||
|
|
||||||
from ..utils import RemoteOpenAIServer
|
from ...utils import RemoteOpenAIServer
|
||||||
|
|
||||||
EMBEDDING_MODEL_NAME = "intfloat/e5-mistral-7b-instruct"
|
EMBEDDING_MODEL_NAME = "intfloat/e5-mistral-7b-instruct"
|
||||||
|
|
||||||
pytestmark = pytest.mark.openai
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def ray_ctx():
|
def ray_ctx():
|
||||||
@ -52,8 +52,6 @@ TEST_SCHEMA = {
|
|||||||
TEST_REGEX = (r"((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.){3}"
|
TEST_REGEX = (r"((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.){3}"
|
||||||
r"(25[0-5]|(2[0-4]|1\d|[1-9]|)\d)")
|
r"(25[0-5]|(2[0-4]|1\d|[1-9]|)\d)")
|
||||||
|
|
||||||
pytestmark = pytest.mark.openai
|
|
||||||
|
|
||||||
|
|
||||||
def test_guided_logits_processors():
|
def test_guided_logits_processors():
|
||||||
"""Basic unit test for RegexLogitsProcessor and JSONLogitsProcessor."""
|
"""Basic unit test for RegexLogitsProcessor and JSONLogitsProcessor."""
|
||||||
@ -6,7 +6,7 @@ import ray
|
|||||||
# downloading lora to test lora requests
|
# downloading lora to test lora requests
|
||||||
from huggingface_hub import snapshot_download
|
from huggingface_hub import snapshot_download
|
||||||
|
|
||||||
from ..utils import RemoteOpenAIServer
|
from ...utils import RemoteOpenAIServer
|
||||||
|
|
||||||
# any model with a chat template should work here
|
# any model with a chat template should work here
|
||||||
MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
|
MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
|
||||||
@ -14,8 +14,6 @@ MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
|
|||||||
# generation quality here
|
# generation quality here
|
||||||
LORA_NAME = "typeof/zephyr-7b-beta-lora"
|
LORA_NAME = "typeof/zephyr-7b-beta-lora"
|
||||||
|
|
||||||
pytestmark = pytest.mark.openai
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def zephyr_lora_files():
|
def zephyr_lora_files():
|
||||||
@ -1,7 +1,6 @@
|
|||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import pytest
|
|
||||||
import torch
|
import torch
|
||||||
from openai import OpenAI, OpenAIError
|
from openai import OpenAI, OpenAIError
|
||||||
|
|
||||||
@ -10,8 +9,6 @@ from vllm.model_executor.models.opt import OPTForCausalLM
|
|||||||
from vllm.model_executor.sampling_metadata import SamplingMetadata
|
from vllm.model_executor.sampling_metadata import SamplingMetadata
|
||||||
from vllm.utils import get_open_port
|
from vllm.utils import get_open_port
|
||||||
|
|
||||||
pytestmark = pytest.mark.openai
|
|
||||||
|
|
||||||
|
|
||||||
class MyOPTForCausalLM(OPTForCausalLM):
|
class MyOPTForCausalLM(OPTForCausalLM):
|
||||||
|
|
||||||
@ -1,15 +1,11 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
from vllm.entrypoints.openai.serving_chat import OpenAIServingChat
|
from vllm.entrypoints.openai.serving_chat import OpenAIServingChat
|
||||||
|
|
||||||
MODEL_NAME = "openai-community/gpt2"
|
MODEL_NAME = "openai-community/gpt2"
|
||||||
CHAT_TEMPLATE = "Dummy chat template for testing {}"
|
CHAT_TEMPLATE = "Dummy chat template for testing {}"
|
||||||
|
|
||||||
pytestmark = pytest.mark.openai
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class MockModelConfig:
|
class MockModelConfig:
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
from pathlib import Path
|
|
||||||
from typing import Dict, List
|
from typing import Dict, List
|
||||||
|
|
||||||
import openai
|
import openai
|
||||||
@ -8,12 +7,12 @@ import ray
|
|||||||
|
|
||||||
from vllm.multimodal.utils import ImageFetchAiohttp, encode_image_base64
|
from vllm.multimodal.utils import ImageFetchAiohttp, encode_image_base64
|
||||||
|
|
||||||
from ..utils import RemoteOpenAIServer
|
from ...utils import VLLM_PATH, RemoteOpenAIServer
|
||||||
|
|
||||||
MODEL_NAME = "llava-hf/llava-1.5-7b-hf"
|
MODEL_NAME = "llava-hf/llava-1.5-7b-hf"
|
||||||
LLAVA_CHAT_TEMPLATE = (Path(__file__).parent.parent.parent /
|
LLAVA_CHAT_TEMPLATE = VLLM_PATH / "examples/template_llava.jinja"
|
||||||
"examples/template_llava.jinja")
|
|
||||||
assert LLAVA_CHAT_TEMPLATE.exists()
|
assert LLAVA_CHAT_TEMPLATE.exists()
|
||||||
|
|
||||||
# Test different image extensions (JPG/PNG) and formats (gray/RGB/RGBA)
|
# Test different image extensions (JPG/PNG) and formats (gray/RGB/RGBA)
|
||||||
TEST_IMAGE_URLS = [
|
TEST_IMAGE_URLS = [
|
||||||
"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
|
"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
|
||||||
@ -22,8 +21,6 @@ TEST_IMAGE_URLS = [
|
|||||||
"https://upload.wikimedia.org/wikipedia/commons/0/0b/RGBA_comp.png",
|
"https://upload.wikimedia.org/wikipedia/commons/0/0b/RGBA_comp.png",
|
||||||
]
|
]
|
||||||
|
|
||||||
pytestmark = pytest.mark.openai
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def ray_ctx():
|
def ray_ctx():
|
||||||
@ -279,7 +276,3 @@ async def test_multi_image_input(client: openai.AsyncOpenAI, model_name: str,
|
|||||||
)
|
)
|
||||||
completion = completion.choices[0].text
|
completion = completion.choices[0].text
|
||||||
assert completion is not None and len(completion) >= 0
|
assert completion is not None and len(completion) >= 0
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
pytest.main([__file__])
|
|
||||||
@ -4,7 +4,8 @@ import sys
|
|||||||
import time
|
import time
|
||||||
import warnings
|
import warnings
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from typing import Dict, List
|
from pathlib import Path
|
||||||
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
import openai
|
import openai
|
||||||
import ray
|
import ray
|
||||||
@ -40,8 +41,8 @@ else:
|
|||||||
nvmlShutdown()
|
nvmlShutdown()
|
||||||
|
|
||||||
|
|
||||||
# Path to root of repository so that utilities can be imported by ray workers
|
VLLM_PATH = Path(__file__).parent.parent
|
||||||
VLLM_PATH = os.path.abspath(os.path.join(__file__, os.pardir, os.pardir))
|
"""Path to root of the vLLM repository."""
|
||||||
|
|
||||||
|
|
||||||
class RemoteOpenAIServer:
|
class RemoteOpenAIServer:
|
||||||
@ -153,10 +154,12 @@ def init_test_distributed_environment(
|
|||||||
def multi_process_parallel(
|
def multi_process_parallel(
|
||||||
tp_size: int,
|
tp_size: int,
|
||||||
pp_size: int,
|
pp_size: int,
|
||||||
test_target,
|
test_target: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
# Using ray helps debugging the error when it failed
|
# Using ray helps debugging the error when it failed
|
||||||
# as compared to multiprocessing.
|
# as compared to multiprocessing.
|
||||||
|
# NOTE: We need to set working_dir for distributed tests,
|
||||||
|
# otherwise we may get import errors on ray workers
|
||||||
ray.init(runtime_env={"working_dir": VLLM_PATH})
|
ray.init(runtime_env={"working_dir": VLLM_PATH})
|
||||||
|
|
||||||
distributed_init_port = get_open_port()
|
distributed_init_port = get_open_port()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user