[CI/Build] [3/3] Reorganize entrypoints tests (#5966)

This commit is contained in:
Cyrus Leung 2024-06-30 12:58:49 +08:00 committed by GitHub
parent cff6a1fec1
commit 9d47f64eb6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 19 additions and 48 deletions

View File

@ -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"

View File

@ -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",
] ]

View File

View 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():

View File

@ -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():

View File

@ -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():

View File

View 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():

View File

@ -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():

View File

@ -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():

View File

@ -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."""

View File

@ -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():

View File

@ -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):

View File

@ -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:

View File

@ -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__])

View 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()