llm_engine_example.py 2.21 KB
Newer Older
1
import argparse
2
from typing import List, Tuple
3

4
from vllm import EngineArgs, LLMEngine, RequestOutput, SamplingParams
5
from vllm.utils import FlexibleArgumentParser
6
7


8
9
10
def create_test_prompts() -> List[Tuple[str, SamplingParams]]:
    """Create a list of test prompts with their sampling parameters."""
    return [
Zhuohan Li's avatar
Zhuohan Li committed
11
        ("A robot may not injure a human being",
12
         SamplingParams(temperature=0.0, logprobs=1, prompt_logprobs=1)),
13
14
15
        ("To be or not to be,",
         SamplingParams(temperature=0.8, top_k=5, presence_penalty=0.2)),
        ("What is the meaning of life?",
16
17
18
19
20
         SamplingParams(n=2,
                        best_of=5,
                        temperature=0.8,
                        top_p=0.95,
                        frequency_penalty=0.1)),
21
        ("It is only with the heart that one can see rightly",
22
23
         SamplingParams(n=3, best_of=3, use_beam_search=True,
                        temperature=0.0)),
24
25
    ]

26
27
28
29

def process_requests(engine: LLMEngine,
                     test_prompts: List[Tuple[str, SamplingParams]]):
    """Continuously process a list of prompts and handle the outputs."""
30
    request_id = 0
31
32

    while test_prompts or engine.has_unfinished_requests():
33
34
        if test_prompts:
            prompt, sampling_params = test_prompts.pop(0)
Zhuohan Li's avatar
Zhuohan Li committed
35
            engine.add_request(str(request_id), prompt, sampling_params)
Zhuohan Li's avatar
Zhuohan Li committed
36
            request_id += 1
37

38
39
        request_outputs: List[RequestOutput] = engine.step()

40
        for request_output in request_outputs:
41
            if request_output.finished:
42
43
                print(request_output)

44
45
46
47
48
49
50
51
52
53
54
55

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)
56
57
58


if __name__ == '__main__':
59
    parser = FlexibleArgumentParser(
Zhuohan Li's avatar
Zhuohan Li committed
60
61
        description='Demo on using the LLMEngine class directly')
    parser = EngineArgs.add_cli_args(parser)
62
63
    args = parser.parse_args()
    main(args)