test_lazy_outlines.py 2.08 KB
Newer Older
1
2
import sys

youkaichao's avatar
youkaichao committed
3
4
from vllm_test_utils import blame

5
from vllm import LLM, SamplingParams
6
from vllm.distributed import cleanup_dist_env_and_memory
7
8


youkaichao's avatar
youkaichao committed
9
def run_normal():
10
11
12
13
14
15
16
17
    prompts = [
        "Hello, my name is",
        "The president of the United States is",
        "The capital of France is",
        "The future of AI is",
    ]
    sampling_params = SamplingParams(temperature=0.8, top_p=0.95)

18
    # Create an LLM without guided decoding as a baseline.
19
20
21
22
23
24
25
26
27
    llm = LLM(model="facebook/opt-125m",
              enforce_eager=True,
              gpu_memory_utilization=0.3)
    outputs = llm.generate(prompts, sampling_params)
    for output in outputs:
        prompt = output.prompt
        generated_text = output.outputs[0].text
        print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

28
29
30
31
    # Destroy the LLM object and free up the GPU memory.
    del llm
    cleanup_dist_env_and_memory()

youkaichao's avatar
youkaichao committed
32
33

def run_lmfe(sample_regex):
34
    # Create an LLM with guided decoding enabled.
35
36
37
    llm = LLM(model="facebook/opt-125m",
              enforce_eager=True,
              guided_decoding_backend="lm-format-enforcer",
38
              gpu_memory_utilization=0.6)
39
40
41
42
43
44
45
46
47
48
49
50
51
52
    sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
    outputs = llm.generate(
        prompts=[
            f"Give an example IPv4 address with this regex: {sample_regex}"
        ] * 2,
        sampling_params=sampling_params,
        use_tqdm=True,
        guided_options_request=dict(guided_regex=sample_regex))

    for output in outputs:
        prompt = output.prompt
        generated_text = output.outputs[0].text
        print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

youkaichao's avatar
youkaichao committed
53
54
55
56

def test_lazy_outlines(sample_regex):
    """If users don't use guided decoding, outlines should not be imported.
    """
57
    # make sure outlines is not imported
youkaichao's avatar
youkaichao committed
58
59
60
61
62
63
64
    module_name = "outlines"
    with blame(lambda: module_name in sys.modules) as result:
        run_normal()
        run_lmfe(sample_regex)
    assert not result.found, (
        f"Module {module_name} is already imported, the"
        f" first import location is:\n{result.trace_stack}")