2025-02-02 14:58:18 -05:00
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
2023-05-20 13:06:59 -07:00
|
|
|
import argparse
|
2023-10-30 18:14:37 +02:00
|
|
|
from typing import List, Tuple
|
2023-05-20 13:06:59 -07:00
|
|
|
|
2024-03-25 23:59:47 +09:00
|
|
|
from vllm import EngineArgs, LLMEngine, RequestOutput, SamplingParams
|
2024-06-20 19:00:13 -04:00
|
|
|
from vllm.utils import FlexibleArgumentParser
|
2023-05-20 13:06:59 -07:00
|
|
|
|
|
|
|
|
2023-10-30 18:14:37 +02:00
|
|
|
def create_test_prompts() -> List[Tuple[str, SamplingParams]]:
|
|
|
|
"""Create a list of test prompts with their sampling parameters."""
|
|
|
|
return [
|
2023-08-02 14:04:39 -07:00
|
|
|
("A robot may not injure a human being",
|
2023-10-16 10:56:50 -07:00
|
|
|
SamplingParams(temperature=0.0, logprobs=1, prompt_logprobs=1)),
|
2023-05-20 13:06:59 -07:00
|
|
|
("To be or not to be,",
|
|
|
|
SamplingParams(temperature=0.8, top_k=5, presence_penalty=0.2)),
|
|
|
|
("What is the meaning of life?",
|
2023-07-03 11:31:55 -07:00
|
|
|
SamplingParams(n=2,
|
|
|
|
best_of=5,
|
|
|
|
temperature=0.8,
|
|
|
|
top_p=0.95,
|
|
|
|
frequency_penalty=0.1)),
|
2023-05-20 13:06:59 -07:00
|
|
|
]
|
|
|
|
|
2023-10-30 18:14:37 +02:00
|
|
|
|
|
|
|
def process_requests(engine: LLMEngine,
|
|
|
|
test_prompts: List[Tuple[str, SamplingParams]]):
|
|
|
|
"""Continuously process a list of prompts and handle the outputs."""
|
2023-05-28 03:20:05 -07:00
|
|
|
request_id = 0
|
2023-10-30 18:14:37 +02:00
|
|
|
|
|
|
|
while test_prompts or engine.has_unfinished_requests():
|
2023-05-20 13:06:59 -07:00
|
|
|
if test_prompts:
|
|
|
|
prompt, sampling_params = test_prompts.pop(0)
|
2023-06-17 17:25:21 +08:00
|
|
|
engine.add_request(str(request_id), prompt, sampling_params)
|
2023-05-23 21:39:50 -07:00
|
|
|
request_id += 1
|
2023-05-20 13:06:59 -07:00
|
|
|
|
2023-10-30 18:14:37 +02:00
|
|
|
request_outputs: List[RequestOutput] = engine.step()
|
|
|
|
|
2023-05-20 13:06:59 -07:00
|
|
|
for request_output in request_outputs:
|
2023-06-22 00:17:24 -07:00
|
|
|
if request_output.finished:
|
2023-05-20 13:06:59 -07:00
|
|
|
print(request_output)
|
|
|
|
|
2023-10-30 18:14:37 +02:00
|
|
|
|
|
|
|
def initialize_engine(args: argparse.Namespace) -> LLMEngine:
|
|
|
|
"""Initialize the LLMEngine from the command line arguments."""
|
|
|
|
engine_args = EngineArgs.from_cli_args(args)
|
|
|
|
return LLMEngine.from_engine_args(engine_args)
|
|
|
|
|
|
|
|
|
|
|
|
def main(args: argparse.Namespace):
|
|
|
|
"""Main function that sets up and runs the prompt processing."""
|
|
|
|
engine = initialize_engine(args)
|
|
|
|
test_prompts = create_test_prompts()
|
|
|
|
process_requests(engine, test_prompts)
|
2023-05-20 13:06:59 -07:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
2024-06-20 19:00:13 -04:00
|
|
|
parser = FlexibleArgumentParser(
|
2023-06-17 17:25:21 +08:00
|
|
|
description='Demo on using the LLMEngine class directly')
|
|
|
|
parser = EngineArgs.add_cli_args(parser)
|
2023-05-20 13:06:59 -07:00
|
|
|
args = parser.parse_args()
|
|
|
|
main(args)
|