Skip to content

Commit c8af27d

Browse files
squashed/rebased/signed
Signed-off-by: Brian Dellabetta <bdellabe@redhat.com>
1 parent 2352c7d commit c8af27d

File tree

1 file changed

+34
-7
lines changed

1 file changed

+34
-7
lines changed

tests/lmeval/test_lmeval.py

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from pathlib import Path
55

66
import numpy
7+
import pandas as pd
78
import pytest
89
import torch
910
import yaml
@@ -13,6 +14,7 @@
1314
from llmcompressor.core import active_session
1415
from tests.e2e.e2e_utils import run_oneshot_for_e2e_testing
1516
from tests.examples.utils import requires_gpu_count
17+
from tests.test_timer.timer_utils import get_singleton_manager, log_time
1618

1719

1820
class LmEvalConfig(BaseModel):
@@ -34,6 +36,7 @@ class LmEvalConfig(BaseModel):
3436
logger.warning("lm_eval is not installed. This test will be skipped")
3537

3638
TEST_DATA_FILE = os.environ.get("TEST_DATA_FILE", None)
39+
TIMINGS_DIR = os.environ.get("TIMINGS_DIR", "timings/lm-eval")
3740

3841

3942
# Will run each test case in its own process through run_tests.sh
@@ -94,6 +97,7 @@ def set_up(self, test_data_file: str):
9497
def test_lm_eval(self, test_data_file: str):
9598
# Run vLLM with saved model
9699
self.set_up(test_data_file)
100+
97101
if not self.save_dir:
98102
self.save_dir = self.model.split("/")[1] + f"-{self.scheme}"
99103
oneshot_model, processor = run_oneshot_for_e2e_testing(
@@ -111,20 +115,33 @@ def test_lm_eval(self, test_data_file: str):
111115
)
112116

113117
logger.info("================= SAVING TO DISK ======================")
114-
oneshot_model.save_pretrained(self.save_dir)
115-
processor.save_pretrained(self.save_dir)
116-
recipe_path = os.path.join(self.save_dir, "recipe.yaml")
118+
self._save_compressed_model(oneshot_model, processor)
117119

118120
# Use the session to fetch the recipe;
119121
# Reset session for next test case
122+
self._handle_recipe()
123+
124+
logger.info("================= Running LM Eval ======================")
125+
self._run_lm_eval()
126+
127+
self.tear_down()
128+
129+
@log_time
130+
def _save_compressed_model(self, oneshot_model, processor):
131+
oneshot_model.save_pretrained(self.save_dir)
132+
processor.save_pretrained(self.save_dir)
133+
134+
@log_time
135+
def _handle_recipe(self):
136+
recipe_path = os.path.join(self.save_dir, "recipe.yaml")
120137
session = active_session()
121138
recipe_yaml_str = session.get_serialized_recipe()
122139
with open(recipe_path, "w") as fp:
123140
fp.write(recipe_yaml_str)
124141
session.reset()
125142

126-
logger.info("================= Running LM Eval ======================")
127-
143+
@log_time
144+
def _run_lm_eval(self):
128145
model_args = {"pretrained": self.save_dir}
129146
model_args.update(self.lmeval.model_args)
130147
results = lm_eval.simple_evaluate(
@@ -145,8 +162,18 @@ def test_lm_eval(self, test_data_file: str):
145162
)
146163
assert numpy.isclose(expected_val, actual_val, rtol=0.05)
147164

148-
self.tear_down()
149-
150165
def tear_down(self):
166+
timer = get_singleton_manager()
167+
# fetch dictionary of measurements, where keys are func names
168+
# and values are the time it took to run the method, each
169+
# time it was called
170+
measurements = timer.measurements
171+
if measurements:
172+
p = Path(TIMINGS_DIR)
173+
p.mkdir(parents=True, exist_ok=True)
174+
175+
df = pd.DataFrame(measurements)
176+
df.to_csv(p / f"{self.save_dir}.csv", index=False)
177+
151178
if self.save_dir is not None:
152179
shutil.rmtree(self.save_dir)

0 commit comments

Comments
 (0)