nemo-evaluator-launcher 0.1.14__tar.gz → 0.1.26__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/PKG-INFO +2 -2
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/pyproject.toml +1 -1
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/__init__.py +15 -1
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/api/functional.py +19 -29
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/api/types.py +9 -0
- nemo_evaluator_launcher-0.1.26/src/nemo_evaluator_launcher/cli/info.py +512 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/cli/ls_runs.py +26 -6
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/cli/main.py +24 -1
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/cli/run.py +42 -12
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/cli/status.py +9 -8
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/common/helpers.py +150 -29
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/common/logging_utils.py +12 -4
- nemo_evaluator_launcher-0.1.26/src/nemo_evaluator_launcher/common/printing_utils.py +93 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/deployment/vllm.yaml +2 -1
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/execution/local.yaml +1 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/execution/slurm/default.yaml +5 -4
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/base.py +23 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/lepton/executor.py +156 -95
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/local/executor.py +76 -20
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/local/run.template.sh +22 -7
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/slurm/executor.py +72 -30
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/exporters/local.py +25 -16
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/exporters/mlflow.py +168 -70
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/exporters/utils.py +85 -33
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/exporters/wandb.py +40 -5
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/package_info.py +1 -1
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/resources/mapping.toml +51 -15
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher.egg-info/PKG-INFO +2 -2
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher.egg-info/SOURCES.txt +2 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher.egg-info/requires.txt +1 -1
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/LICENSE +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/README.md +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/setup.cfg +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/api/__init__.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/api/utils.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/cli/__init__.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/cli/export.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/cli/kill.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/cli/ls_tasks.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/cli/version.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/common/__init__.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/common/execdb.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/common/mapping.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/__init__.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/default.yaml +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/deployment/generic.yaml +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/deployment/nim.yaml +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/deployment/none.yaml +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/deployment/sglang.yaml +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/deployment/trtllm.yaml +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/configs/execution/lepton/default.yaml +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/__init__.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/lepton/__init__.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/lepton/deployment_helpers.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/lepton/job_helpers.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/local/__init__.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/registry.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/executors/slurm/__init__.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/exporters/__init__.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/exporters/base.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/exporters/gsheets.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher/exporters/registry.py +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher.egg-info/dependency_links.txt +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher.egg-info/entry_points.txt +0 -0
- {nemo_evaluator_launcher-0.1.14 → nemo_evaluator_launcher-0.1.26}/src/nemo_evaluator_launcher.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nemo-evaluator-launcher
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.26
|
|
4
4
|
Summary: Launcher for the evaluations provided by NeMo Evaluator containers with different runtime backends
|
|
5
5
|
Author: NVIDIA
|
|
6
6
|
Author-email: nemo-toolkit@nvidia.com
|
|
@@ -478,7 +478,7 @@ Requires-Dist: mlflow>=2.8.0; extra == "mlflow"
|
|
|
478
478
|
Provides-Extra: wandb
|
|
479
479
|
Requires-Dist: wandb>=0.15.0; extra == "wandb"
|
|
480
480
|
Provides-Extra: gsheets
|
|
481
|
-
Requires-Dist:
|
|
481
|
+
Requires-Dist: gspread>=5.0.0; extra == "gsheets"
|
|
482
482
|
Provides-Extra: exporters
|
|
483
483
|
Requires-Dist: mlflow; extra == "exporters"
|
|
484
484
|
Requires-Dist: wandb; extra == "exporters"
|
|
@@ -40,7 +40,7 @@ repository = "https://github.com/NVIDIA-NeMo/Evaluator/packages/nemo-evaluator-l
|
|
|
40
40
|
[project.optional-dependencies]
|
|
41
41
|
mlflow = ["mlflow>=2.8.0"]
|
|
42
42
|
wandb = ["wandb>=0.15.0"]
|
|
43
|
-
gsheets = ["
|
|
43
|
+
gsheets = ["gspread>=5.0.0"]
|
|
44
44
|
exporters = ["mlflow", "wandb", "gsheets"]
|
|
45
45
|
all = ["mlflow", "wandb", "gsheets"]
|
|
46
46
|
|
|
@@ -20,6 +20,7 @@ It automatically initializes logging and conditionally loads internal components
|
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
22
|
import importlib
|
|
23
|
+
import warnings
|
|
23
24
|
|
|
24
25
|
from nemo_evaluator_launcher.common.logging_utils import logger
|
|
25
26
|
from nemo_evaluator_launcher.package_info import (
|
|
@@ -32,9 +33,22 @@ from nemo_evaluator_launcher.package_info import (
|
|
|
32
33
|
__version__,
|
|
33
34
|
)
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
# Suppress pydantic warnings from third-party libraries (e.g., wandb) that are not
|
|
37
|
+
# compatible with Pydantic 2.x field metadata on Python 3.13+
|
|
38
|
+
warnings.filterwarnings(
|
|
39
|
+
"ignore",
|
|
40
|
+
message=r"The 'repr' attribute.*Field\(\).*",
|
|
41
|
+
category=Warning,
|
|
42
|
+
)
|
|
43
|
+
warnings.filterwarnings(
|
|
44
|
+
"ignore",
|
|
45
|
+
message=r"The 'frozen' attribute.*Field\(\).*",
|
|
46
|
+
category=Warning,
|
|
47
|
+
)
|
|
36
48
|
|
|
37
49
|
|
|
50
|
+
logger.info("Version info", pkg=__package_name__, ver=__version__)
|
|
51
|
+
|
|
38
52
|
try:
|
|
39
53
|
importlib.import_module("nemo_evaluator_launcher_internal")
|
|
40
54
|
logger.debug(
|
|
@@ -440,23 +440,28 @@ def export_results(
|
|
|
440
440
|
single_id = invocation_ids[0]
|
|
441
441
|
|
|
442
442
|
if "." in single_id: # job_id
|
|
443
|
+
# Try reading config from artifacts working dir (auto-export on remote node)
|
|
444
|
+
cfg_file = None
|
|
445
|
+
for name in ("run_config.yml", "config.yml"):
|
|
446
|
+
p = Path(name)
|
|
447
|
+
if p.exists():
|
|
448
|
+
cfg_file = p
|
|
449
|
+
break
|
|
450
|
+
|
|
443
451
|
md_job_data = None
|
|
444
|
-
|
|
445
|
-
ypath_artifacts = Path("run_config.yml")
|
|
446
|
-
if ypath_artifacts.exists():
|
|
452
|
+
if cfg_file:
|
|
447
453
|
try:
|
|
448
454
|
cfg_yaml = (
|
|
449
|
-
yaml.safe_load(
|
|
450
|
-
or {}
|
|
455
|
+
yaml.safe_load(cfg_file.read_text(encoding="utf-8")) or {}
|
|
451
456
|
)
|
|
452
|
-
|
|
457
|
+
|
|
458
|
+
# Merge exporter override file if present
|
|
453
459
|
ypath_export = Path("export_config.yml")
|
|
454
460
|
if ypath_export.exists():
|
|
455
461
|
exp_yaml = (
|
|
456
462
|
yaml.safe_load(ypath_export.read_text(encoding="utf-8"))
|
|
457
463
|
or {}
|
|
458
464
|
)
|
|
459
|
-
# execution.auto_export contains auto-export destinations
|
|
460
465
|
exec_cfg = cfg_yaml.get("execution") or {}
|
|
461
466
|
auto_exp = (exp_yaml.get("execution") or {}).get(
|
|
462
467
|
"auto_export"
|
|
@@ -464,42 +469,30 @@ def export_results(
|
|
|
464
469
|
if auto_exp is not None:
|
|
465
470
|
exec_cfg["auto_export"] = auto_exp
|
|
466
471
|
cfg_yaml["execution"] = exec_cfg
|
|
467
|
-
|
|
468
|
-
# top-level export block contains exporter config
|
|
469
472
|
if "export" in exp_yaml:
|
|
470
473
|
cfg_yaml["export"] = exp_yaml["export"]
|
|
471
|
-
|
|
472
|
-
# Merge evaluation.tasks from export_config (Slurm writes it there)
|
|
473
474
|
if "evaluation" in exp_yaml and exp_yaml["evaluation"]:
|
|
474
475
|
eval_cfg = cfg_yaml.get("evaluation") or {}
|
|
475
476
|
eval_cfg.update(exp_yaml["evaluation"])
|
|
476
477
|
cfg_yaml["evaluation"] = eval_cfg
|
|
477
478
|
|
|
478
|
-
# metadata
|
|
479
479
|
executor_name = (cfg_yaml.get("execution") or {}).get(
|
|
480
480
|
"type", "local"
|
|
481
481
|
)
|
|
482
|
-
|
|
483
482
|
md_job_data = JobData(
|
|
484
483
|
invocation_id=single_id.split(".")[0],
|
|
485
484
|
job_id=single_id,
|
|
486
485
|
timestamp=0.0,
|
|
487
|
-
executor=executor_name,
|
|
486
|
+
executor=executor_name, # ensures slurm tag is preserved
|
|
488
487
|
data={
|
|
489
488
|
"output_dir": str(Path.cwd().parent),
|
|
490
|
-
"storage_type": "remote_local",
|
|
489
|
+
"storage_type": "remote_local", # no SSH in auto-export path
|
|
491
490
|
},
|
|
492
491
|
config=cfg_yaml,
|
|
493
492
|
)
|
|
494
|
-
# DEBUG: print what we loaded
|
|
495
|
-
print(f"DEBUG: cfg_yaml keys: {list(cfg_yaml.keys())}")
|
|
496
|
-
if "evaluation" in cfg_yaml:
|
|
497
|
-
print(
|
|
498
|
-
f"DEBUG: evaluation.tasks: {cfg_yaml.get('evaluation', {}).get('tasks')}"
|
|
499
|
-
)
|
|
500
493
|
except Exception:
|
|
501
494
|
md_job_data = None
|
|
502
|
-
|
|
495
|
+
|
|
503
496
|
job_data = md_job_data or ExecutionDB().get_job(single_id)
|
|
504
497
|
if job_data is None:
|
|
505
498
|
return {
|
|
@@ -507,7 +500,6 @@ def export_results(
|
|
|
507
500
|
"error": f"Job {single_id} not found in ExecutionDB",
|
|
508
501
|
}
|
|
509
502
|
|
|
510
|
-
# Convert single job result to invocation-like structure
|
|
511
503
|
job_result = exporter.export_job(job_data)
|
|
512
504
|
return {
|
|
513
505
|
"success": job_result.success,
|
|
@@ -522,10 +514,9 @@ def export_results(
|
|
|
522
514
|
},
|
|
523
515
|
"metadata": job_result.metadata or {},
|
|
524
516
|
}
|
|
517
|
+
|
|
525
518
|
elif single_id.isdigit(): # pipeline_id
|
|
526
|
-
# Find job by pipeline_id
|
|
527
519
|
db = ExecutionDB()
|
|
528
|
-
# Search all jobs for matching pipeline_id
|
|
529
520
|
for job_id, job_data in db._jobs.items():
|
|
530
521
|
if job_data.data.get("pipeline_id") == int(single_id):
|
|
531
522
|
job_result = exporter.export_job(job_data)
|
|
@@ -542,14 +533,13 @@ def export_results(
|
|
|
542
533
|
"metadata": job_result.metadata or {},
|
|
543
534
|
}
|
|
544
535
|
return {"success": False, "error": f"Pipeline {single_id} not found"}
|
|
536
|
+
|
|
545
537
|
else: # invocation_id
|
|
546
538
|
result = exporter.export_invocation(single_id)
|
|
547
|
-
# Ensure metadata is present in job results to prevent KeyError
|
|
548
539
|
if "jobs" in result:
|
|
549
540
|
for job_id, job_result in result["jobs"].items():
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
return result # type: ignore[no-any-return]
|
|
541
|
+
job_result.setdefault("metadata", {})
|
|
542
|
+
return result
|
|
553
543
|
else:
|
|
554
544
|
# Multiple IDs - parse and group
|
|
555
545
|
db = ExecutionDB()
|
|
@@ -19,9 +19,18 @@ This module defines data structures and helpers for configuration and type safet
|
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
21
|
import os
|
|
22
|
+
import warnings
|
|
22
23
|
from dataclasses import dataclass
|
|
23
24
|
from typing import cast
|
|
24
25
|
|
|
26
|
+
# ruff: noqa: E402
|
|
27
|
+
# Later when adding optional module to hydra, since the internal package is optional,
|
|
28
|
+
# will generate a hydra warning. We suppress it as distraction and bad UX, before hydra gets invoked.
|
|
29
|
+
warnings.filterwarnings(
|
|
30
|
+
"ignore",
|
|
31
|
+
message="provider=hydra.searchpath.*path=nemo_evaluator_launcher_internal.*is not available\\.",
|
|
32
|
+
)
|
|
33
|
+
|
|
25
34
|
import hydra
|
|
26
35
|
from hydra.core.global_hydra import GlobalHydra
|
|
27
36
|
from omegaconf import DictConfig, OmegaConf
|