test_whisper.py 6.07 KB
Newer Older
1
# SPDX-License-Identifier: Apache-2.0
2
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
4
from typing import Optional

zhuwenwen's avatar
zhuwenwen committed
5
import os
6
7
import pytest

8
from vllm import SamplingParams
9
10
from vllm.assets.audio import AudioAsset

11
from ....conftest import VllmRunner
zhuwenwen's avatar
zhuwenwen committed
12
from ....utils import create_new_process_for_each_test, multi_gpu_test, models_path_prefix
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

PROMPTS = [
    {
        "prompt":
        "<|startoftranscript|><|en|><|transcribe|><|notimestamps|>",
        "multi_modal_data": {
            "audio": AudioAsset("mary_had_lamb").audio_and_sample_rate,
        },
    },
    {  # Test explicit encoder/decoder prompt
        "encoder_prompt": {
            "prompt": "",
            "multi_modal_data": {
                "audio": AudioAsset("winning_call").audio_and_sample_rate,
            },
        },
        "decoder_prompt":
        "<|startoftranscript|><|en|><|transcribe|><|notimestamps|>",
    }
]

EXPECTED = {
zhuwenwen's avatar
zhuwenwen committed
35
    os.path.join(models_path_prefix, "openai/whisper-tiny"): [
36
37
38
39
40
41
42
43
44
45
46
        " He has birth words I spoke in the original corner of that. And a"
        " little piece of black coat poetry. Mary had a little sandwich,"
        " sweet, with white and snow. And everyone had it very went the last"
        " would sure to go.",
        " >> And the old one, fit John the way to Edgar Martinez. >> One more"
        " to line down the field line for our base camp. Here comes joy. Here"
        " is June and the third base. They're going to wave him in. The throw"
        " to the plate will be late. The Mariners are going to play for the"
        " American League Championship. I don't believe it. It just continues"
        " by all five."
    ],
zhuwenwen's avatar
zhuwenwen committed
47
    os.path.join(models_path_prefix, "openai/whisper-small"): [
48
49
50
51
52
53
54
55
56
        " The first words I spoke in the original pornograph. A little piece"
        " of practical poetry. Mary had a little lamb, its fleece was quite a"
        " slow, and everywhere that Mary went the lamb was sure to go.",
        " And the old one pitch on the way to Edgar Martinez one month. Here"
        " comes joy. Here is Junior to third base. They're gonna wave him"
        " in. The throw to the plate will be late. The Mariners are going to"
        " play for the American League Championship. I don't believe it. It"
        " just continues. My, oh my."
    ],
zhuwenwen's avatar
zhuwenwen committed
57
    os.path.join(models_path_prefix, "openai/whisper-medium"): [
58
59
60
61
62
63
64
65
66
67
        " The first words I spoke in the original phonograph, a little piece"
        " of practical poetry. Mary had a little lamb, its fleece was quite as"
        " slow, and everywhere that Mary went the lamb was sure to go.",
        " And the 0-1 pitch on the way to Edgar Martinez swung on the line"
        " down the left field line for Obeyshev. Here comes Joy. Here is"
        " Jorgen at third base. They're going to wave him in. The throw to the"
        " plate will be late. The Mariners are going to play for the American"
        " League Championship. I don't believe it. It just continues. My, oh"
        " my."
    ],
zhuwenwen's avatar
zhuwenwen committed
68
    os.path.join(models_path_prefix, "openai/whisper-large-v3"): [
69
70
71
72
73
74
75
76
77
78
        " The first words I spoke in the original phonograph, a little piece"
        " of practical poetry. Mary had a little lamb, its feet were quite as"
        " slow, and everywhere that Mary went, the lamb was sure to go.",
        " And the 0-1 pitch on the way to Edgar Martinez. Swung on the line."
        " Now the left field line for a base hit. Here comes Joy. Here is"
        " Junior to third base. They're going to wave him in. The throw to the"
        " plate will be late. The Mariners are going to play for the American"
        " League Championship. I don't believe it. It just continues. My, oh,"
        " my."
    ],
zhuwenwen's avatar
zhuwenwen committed
79
    os.path.join(models_path_prefix, "openai/whisper-large-v3-turbo"): [
80
81
82
83
84
85
86
87
88
89
90
91
92
93
        " The first words I spoke in the original phonograph, a little piece"
        " of practical poetry. Mary had a little lamb, its streets were quite"
        " as slow, and everywhere that Mary went the lamb was sure to go.",
        " And the 0-1 pitch on the way to Edgar Martinez. Swung on the line"
        " down the left field line for a base hit. Here comes Joy. Here is"
        " Junior to third base. They're going to wave him in. The throw to the"
        " plate will be late. The Mariners are going to play for the American"
        " League Championship. I don't believe it. It just continues. My, oh,"
        " my."
    ]
}


def run_test(
94
    vllm_runner: type[VllmRunner],
95
96
97
98
99
100
101
102
    model: str,
    *,
    tensor_parallel_size: int,
    distributed_executor_backend: Optional[str] = None,
) -> None:
    prompt_list = PROMPTS * 10
    expected_list = EXPECTED[model] * 10

103
104
    with vllm_runner(
            model,
105
            dtype="half",
106
107
108
109
110
            max_model_len=448,
            tensor_parallel_size=tensor_parallel_size,
            distributed_executor_backend=distributed_executor_backend,
    ) as vllm_model:
        llm = vllm_model.model
111

112
113
114
115
116
        sampling_params = SamplingParams(
            temperature=0,
            top_p=1.0,
            max_tokens=200,
        )
117

118
        outputs = llm.generate(prompt_list, sampling_params)
119
120
121
122
123
124
125
126

    for output, expected in zip(outputs, expected_list):
        print(output.outputs[0].text)
        assert output.outputs[0].text == expected


@pytest.mark.core_model
@pytest.mark.parametrize(
zhuwenwen's avatar
zhuwenwen committed
127
    "model", [os.path.join(models_path_prefix, "openai/whisper-small"), os.path.join(models_path_prefix, "openai/whisper-large-v3-turbo")])
128
@create_new_process_for_each_test()
129
130
131
132
133
134
def test_models(vllm_runner, model) -> None:
    run_test(
        vllm_runner,
        model,
        tensor_parallel_size=1,
    )
135
136
137
138


@multi_gpu_test(num_gpus=2)
@pytest.mark.core_model
zhuwenwen's avatar
zhuwenwen committed
139
@pytest.mark.parametrize("model", [os.path.join(models_path_prefix, "openai/whisper-large-v3-turbo")])
140
@pytest.mark.parametrize("distributed_executor_backend", ["ray", "mp"])
141
@create_new_process_for_each_test()
142
143
144
145
146
147
148
149
150
151
152
def test_models_distributed(
    vllm_runner,
    model,
    distributed_executor_backend,
) -> None:
    run_test(
        vllm_runner,
        model,
        tensor_parallel_size=2,
        distributed_executor_backend=distributed_executor_backend,
    )