Skip to content

Commit 652fd68

Browse files
committed
add ability to pass in multiple request rates
1 parent 2287517 commit 652fd68

File tree

5 files changed

+21
-19
lines changed

5 files changed

+21
-19
lines changed

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def _setup_long_description() -> Tuple[str, str]:
2525
'openai',
2626
'requests',
2727
'transformers',
28+
'click'
2829
],
2930
extras_require={
3031
'dev': [

src/guidellm/executor/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Profile,
44
ProfileGenerationModes,
55
ProfileGenerator,
6-
SingleProfileGenerator,
6+
MultiProfileGenerator,
77
SweepProfileGenerator,
88
)
99

@@ -12,6 +12,6 @@
1212
"ProfileGenerationModes",
1313
"Profile",
1414
"ProfileGenerator",
15-
"SingleProfileGenerator",
15+
"MultiProfileGenerator",
1616
"SweepProfileGenerator",
1717
]

src/guidellm/executor/executor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def __init__(
1414
self,
1515
request_generator: RequestGenerator,
1616
backend: Backend,
17-
profile_mode: Union[str, ProfileGenerationModes] = "single",
17+
profile_mode: Union[str, ProfileGenerationModes] = "multi",
1818
profile_args: Optional[Dict[str, Any]] = None,
1919
max_requests: Optional[int] = None,
2020
max_duration: Optional[float] = None,

src/guidellm/executor/profile_generator.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from abc import ABC, abstractmethod
22
from dataclasses import dataclass
33
from enum import Enum
4-
from typing import Optional, Union
4+
from typing import List, Optional, Union
55

66
import numpy
77

@@ -12,13 +12,13 @@
1212
"ProfileGenerationModes",
1313
"Profile",
1414
"ProfileGenerator",
15-
"SingleProfileGenerator",
15+
"MultiProfileGenerator",
1616
"SweepProfileGenerator",
1717
]
1818

1919

2020
class ProfileGenerationModes(Enum):
21-
SINGLE = "single"
21+
MULTI = "multi"
2222
SWEEP = "sweep"
2323

2424

@@ -61,25 +61,24 @@ def next_profile(
6161
pass
6262

6363

64-
@ProfileGenerator.register_generator(ProfileGenerationModes.SINGLE)
65-
class SingleProfileGenerator(ProfileGenerator):
66-
def __init__(self, rate: float, rate_type: str, **kwargs):
67-
super().__init__(ProfileGenerationModes.SINGLE)
68-
self._rate = rate
64+
@ProfileGenerator.register_generator(ProfileGenerationModes.MULTI)
65+
class MultiProfileGenerator(ProfileGenerator):
66+
def __init__(self, rate: List[float], rate_type: str, **kwargs):
67+
super().__init__(ProfileGenerationModes.MULTI)
68+
self._rates = rate
69+
self._rate_index = 0
6970
self._rate_type = rate_type
7071
self._generated = False
7172

7273
def next_profile(
7374
self, current_report: TextGenerationBenchmarkReport
7475
) -> Optional[Profile]:
75-
if self._generated:
76+
if self._rate_index >= len(self._rates):
7677
return None
7778

78-
self._generated = True
79-
8079
if self._rate_type == "constant":
8180
return Profile(
82-
load_gen_mode=LoadGenerationModes.CONSTANT, load_gen_rate=self._rate
81+
load_gen_mode=LoadGenerationModes.CONSTANT, load_gen_rate=self._rates[self._rate_index]
8382
)
8483

8584
if self._rate_type == "synchronous":
@@ -89,7 +88,7 @@ def next_profile(
8988

9089
if self._rate_type == "poisson":
9190
return Profile(
92-
load_gen_mode=LoadGenerationModes.POISSON, load_gen_rate=self._rate
91+
load_gen_mode=LoadGenerationModes.POISSON, load_gen_rate=self._rates[self._rate_index]
9392
)
9493

9594
raise ValueError(f"Invalid rate type: {self._rate_type}")
@@ -151,4 +150,4 @@ def next_profile(
151150
load_gen_mode=LoadGenerationModes.CONSTANT, load_gen_rate=rate
152151
)
153152

154-
return None
153+
return None

src/guidellm/main.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@
4646
@click.option(
4747
"--rate",
4848
type=float,
49-
default="1.0",
49+
default=[1.0],
5050
help="Rate to use for constant and poisson rate types",
51+
multiple=True,
5152
)
5253
@click.option(
5354
"--num-seconds",
@@ -106,10 +107,11 @@ def main(
106107
raise ValueError(f"Unknown data type: {data_type}")
107108

108109
# Create executor
110+
profile_mode = rate_type if rate_type == "sweep" else "multi"
109111
executor = Executor(
110112
request_generator=request_generator,
111113
backend=backend,
112-
profile_mode=rate_type,
114+
profile_mode=profile_mode,
113115
profile_args={"rate_type": rate_type, "rate": rate},
114116
max_requests=num_requests,
115117
max_duration=num_seconds,

0 commit comments

Comments
 (0)