mdl-mlops / src /train.py
lm-jim
Cambios finales para entrega
23e93fb
Raw
History Blame Contribute Delete
2.02 kB
from pytorch_lightning.loggers import CSVLogger, WandbLogger
from pytorch_lightning.callbacks import EarlyStopping, ModelCheckpoint
import pytorch_lightning as pl
import wandb
def train_model(model, data_module, model_name="main", batch_size=256, max_epochs=40, version="0", save_output=True):
conv_model = model
loggers = []
if save_output:
csv_logger = CSVLogger(
save_dir=f"models/{model_name}/logs",
version=version,
)
loggers.append(csv_logger)
wandb_logger = WandbLogger(
project="mdl-mlops",
name=f"{model_name}-v{version}",
config={
"model_name": model_name,
"version": version,
"max_epochs": max_epochs,
"batch_size": batch_size,
"latent_dim": getattr(model, "latent_dim", "unknown"),
"learning_rate": getattr(model, "lr", "unknown")
}
)
loggers.append(wandb_logger)
callbacks = []
early_stopping_callback = EarlyStopping(
monitor="val_loss",
patience=5,
mode="min"
)
callbacks.append(early_stopping_callback)
if save_output:
checkpoint_callback = ModelCheckpoint(
monitor="val_loss",
mode="min",
save_top_k=1,
dirpath=f"models/{model_name}",
filename=f'best_model-{version}',
enable_version_counter=False
)
callbacks.append(checkpoint_callback)
trainer = pl.Trainer(
max_epochs=max_epochs,
callbacks=callbacks,
accelerator="auto",
devices=1,
enable_checkpointing=True,
logger=loggers
)
trainer.fit(conv_model, datamodule=data_module)
if save_output:
artifact = wandb.Artifact(
name=f"{model_name}-v{version}",
type="model"
)
artifact.add_file(checkpoint_callback.best_model_path)
wandb.log_artifact(artifact)