diff --git a/Dockerfile b/Dockerfile index cfd6705..0015fbe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN --mount=type=cache,target=/root/.cache/pip \ python3 -m pip install --upgrade -r /requirements.txt # Install vLLM (switching back to pip installs since issues that required building fork are fixed and space optimization is not as important since caching) and FlashInfer -RUN python3 -m pip install vllm==v0.6.1.post2 && \ +RUN python3 -m pip install vllm==0.6.2 && \ python3 -m pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.3 # Setup for Option 2: Building the Image with the Model included diff --git a/builder/requirements.txt b/builder/requirements.txt index 056b1ea..f9712e0 100644 --- a/builder/requirements.txt +++ b/builder/requirements.txt @@ -1,10 +1,11 @@ ray pandas pyarrow -runpod==1.7.0 +runpod==1.7.1 huggingface-hub packaging typing-extensions==4.7.1 pydantic pydantic-settings -hf-transfer \ No newline at end of file +hf-transfer +transformers \ No newline at end of file diff --git a/src/engine.py b/src/engine.py index d170edf..985a9cc 100644 --- a/src/engine.py +++ b/src/engine.py @@ -11,6 +11,7 @@ from vllm import AsyncLLMEngine from vllm.entrypoints.openai.serving_chat import OpenAIServingChat from vllm.entrypoints.openai.serving_completion import OpenAIServingCompletion from vllm.entrypoints.openai.protocol import ChatCompletionRequest, CompletionRequest, ErrorResponse +from vllm.entrypoints.openai.serving_engine import BaseModelPath from utils import DummyRequest, JobInput, BatchSize, create_error_response from constants import DEFAULT_MAX_CONCURRENCY, DEFAULT_BATCH_SIZE, DEFAULT_BATCH_SIZE_GROWTH_FACTOR, DEFAULT_MIN_BATCH_SIZE @@ -121,14 +122,16 @@ class OpenAIvLLMEngine(vLLMEngine): self.response_role = os.getenv("OPENAI_RESPONSE_ROLE") or "assistant" asyncio.run(self._initialize_engines()) self.raw_openai_output = bool(int(os.getenv("RAW_OPENAI_OUTPUT", 1))) - + async def _initialize_engines(self): self.model_config = await self.llm.get_model_config() - + self.base_model_paths = [ + BaseModelPath(name=self.engine_args.model, model_path=self.engine_args.model) + ] self.chat_engine = OpenAIServingChat( - async_engine_client=self.llm, + engine_client=self.llm, model_config=self.model_config, - served_model_names=[self.served_model_name], + base_model_paths=self.base_model_paths, response_role=self.response_role, chat_template=self.tokenizer.tokenizer.chat_template, lora_modules=None, @@ -136,9 +139,9 @@ class OpenAIvLLMEngine(vLLMEngine): request_logger=None ) self.completion_engine = OpenAIServingCompletion( - async_engine_client=self.llm, + engine_client=self.llm, model_config=self.model_config, - served_model_names=[self.served_model_name], + base_model_paths=self.base_model_paths, lora_modules=[], prompt_adapters=None, request_logger=None diff --git a/src/utils.py b/src/utils.py index 220be90..bfc8ce9 100644 --- a/src/utils.py +++ b/src/utils.py @@ -3,6 +3,7 @@ import logging from http import HTTPStatus from functools import wraps from time import time +from vllm.entrypoints.openai.protocol import RequestResponseMetadata try: from vllm.utils import random_uuid @@ -47,10 +48,14 @@ class JobInput: self.min_batch_size = int(min_batch_size) if min_batch_size else None self.openai_route = job.get("openai_route") self.openai_input = job.get("openai_input") - +class DummyState: + def __init__(self): + self.request_metadata = None + class DummyRequest: def __init__(self): self.headers = {} + self.state = DummyState() async def is_disconnected(self): return False