Skip to content

Commit 944d32b

Browse files
stakodiakbaberabb
andauthored
Fix: Reduce CLI loading time from 2.2s to 0.05s (#3099)
* Lazy-load submodules to reduce import time * pacify pre-commit --------- Co-authored-by: Baber <[email protected]>
1 parent e0dc33a commit 944d32b

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

lm_eval/__init__.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
11
import logging
22
import os
33

4-
from .evaluator import evaluate, simple_evaluate
5-
64

75
__version__ = "0.4.9"
6+
7+
8+
# Lazy-load .evaluator module to improve CLI startup
9+
def __getattr__(name):
10+
if name == "evaluate":
11+
from .evaluator import evaluate
12+
13+
return evaluate
14+
elif name == "simple_evaluate":
15+
from .evaluator import simple_evaluate
16+
17+
return simple_evaluate
18+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
19+
20+
21+
__all__ = ["evaluate", "simple_evaluate", "__version__"]

lm_eval/__main__.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,6 @@
77
from pathlib import Path
88
from typing import Union
99

10-
from lm_eval import evaluator, utils
11-
from lm_eval.evaluator import request_caching_arg_to_dict
12-
from lm_eval.loggers import EvaluationTracker, WandbLogger
13-
from lm_eval.tasks import TaskManager
14-
from lm_eval.utils import (
15-
handle_non_serializable,
16-
make_table,
17-
simple_parse_args_string,
18-
)
19-
2010

2111
def try_parse_json(value: str) -> Union[str, dict, None]:
2212
if value is None:
@@ -314,6 +304,17 @@ def cli_evaluate(args: Union[argparse.Namespace, None] = None) -> None:
314304
parser = setup_parser()
315305
args = parse_eval_args(parser)
316306

307+
# defer loading `lm_eval` submodules for faster CLI load
308+
from lm_eval import evaluator, utils
309+
from lm_eval.evaluator import request_caching_arg_to_dict
310+
from lm_eval.loggers import EvaluationTracker, WandbLogger
311+
from lm_eval.tasks import TaskManager
312+
from lm_eval.utils import (
313+
handle_non_serializable,
314+
make_table,
315+
simple_parse_args_string,
316+
)
317+
317318
if args.wandb_args:
318319
wandb_args_dict = simple_parse_args_string(args.wandb_args)
319320
wandb_config_args_dict = simple_parse_args_string(args.wandb_config_args)

0 commit comments

Comments
 (0)