|
import pyrootutils |
|
|
|
root = pyrootutils.setup_root( |
|
search_from=__file__, |
|
indicator=[".project-root"], |
|
pythonpath=True, |
|
dotenv=True, |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from typing import Tuple |
|
|
|
import hydra |
|
import pytorch_lightning as pl |
|
from omegaconf import DictConfig |
|
from pie_datasets import DatasetDict |
|
from pie_modules.models import * |
|
from pie_modules.taskmodules import * |
|
from pytorch_ie.core import PyTorchIEModel, TaskModule |
|
from pytorch_ie.models import * |
|
from pytorch_ie.taskmodules import * |
|
from pytorch_lightning import Trainer |
|
|
|
from src import utils |
|
from src.datamodules import PieDataModule |
|
from src.models import * |
|
from src.taskmodules import * |
|
|
|
log = utils.get_pylogger(__name__) |
|
|
|
|
|
@utils.task_wrapper |
|
def evaluate(cfg: DictConfig) -> Tuple[dict, dict]: |
|
"""Evaluates given checkpoint on a datamodule testset. |
|
|
|
This method is wrapped in optional @task_wrapper decorator which applies extra utilities |
|
before and after the call. |
|
|
|
Args: |
|
cfg (DictConfig): Configuration composed by Hydra. |
|
|
|
Returns: |
|
Tuple[dict, dict]: Dict with metrics and dict with all instantiated objects. |
|
""" |
|
|
|
|
|
if cfg.get("seed"): |
|
pl.seed_everything(cfg.seed, workers=True) |
|
|
|
|
|
log.info(f"Instantiating dataset <{cfg.dataset._target_}>") |
|
dataset: DatasetDict = hydra.utils.instantiate(cfg.dataset, _convert_="partial") |
|
|
|
|
|
log.info(f"Instantiating taskmodule <{cfg.taskmodule._target_}>") |
|
taskmodule: TaskModule = hydra.utils.instantiate(cfg.taskmodule, _convert_="partial") |
|
|
|
|
|
dataset = taskmodule.convert_dataset(dataset) |
|
|
|
|
|
log.info(f"Instantiating datamodule <{cfg.datamodule._target_}>") |
|
datamodule: PieDataModule = hydra.utils.instantiate( |
|
cfg.datamodule, dataset=dataset, taskmodule=taskmodule, _convert_="partial" |
|
) |
|
|
|
|
|
log.info(f"Instantiating model <{cfg.model._target_}>") |
|
model: PyTorchIEModel = hydra.utils.instantiate(cfg.model, _convert_="partial") |
|
|
|
|
|
logger = utils.instantiate_dict_entries(cfg, "logger") |
|
|
|
|
|
log.info(f"Instantiating trainer <{cfg.trainer._target_}>") |
|
trainer: Trainer = hydra.utils.instantiate(cfg.trainer, logger=logger, _convert_="partial") |
|
|
|
object_dict = { |
|
"cfg": cfg, |
|
"taskmodule": taskmodule, |
|
"dataset": dataset, |
|
"model": model, |
|
"logger": logger, |
|
"trainer": trainer, |
|
} |
|
|
|
if logger: |
|
log.info("Logging hyperparameters!") |
|
utils.log_hyperparameters(logger=logger, model=model, taskmodule=taskmodule, config=cfg) |
|
|
|
log.info("Starting testing!") |
|
trainer.test(model=model, datamodule=datamodule, ckpt_path=cfg.ckpt_path) |
|
|
|
|
|
|
|
|
|
metric_dict = trainer.callback_metrics |
|
|
|
return metric_dict, object_dict |
|
|
|
|
|
@hydra.main(version_base="1.2", config_path=str(root / "configs"), config_name="evaluate.yaml") |
|
def main(cfg: DictConfig) -> None: |
|
metric_dict, _ = evaluate(cfg) |
|
|
|
return metric_dict |
|
|
|
|
|
if __name__ == "__main__": |
|
utils.replace_sys_args_with_values_from_files() |
|
utils.prepare_omegaconf() |
|
main() |
|
|