Faffio's picture
Added Continuos retraining
aef5ea1
raw
history blame
2.25 kB
import os
import time
import sys
"""
Questa vuole essere solo una simulazione del retrain del modello, in quanto rifare il train
Costerebbe molto in termini computazionali, quindi l'intento è creare solo il processo per farlo
e integrarlo nel file yaml come funzione obbligatoria prima del push/deploy.
Faccio usare un dataset in CSV, se vuoto non fa il retrain e pusha lo stesso nella repository
"""
# Percorsi configurabili
DATA_PATH = "data/new_data.csv"
MODEL_OUTPUT_DIR = "models/retrained_roberta"
def train_and_evaluate():
print("🚀 Starting MLOps Retraining Pipeline...")
# 1. DATA VALIDATION CHECK
# Controlliamo se il file esiste e se ha dimensioni > 0
if not os.path.exists(DATA_PATH) or os.stat(DATA_PATH).st_size < 10:
print(f"ℹ️ Dataset '{DATA_PATH}' is empty or missing.")
print("⚠️ No new data available for retraining.")
print("✅ Skipping process. (This is normal behavior for the demo).")
# Usciamo con codice 0 (Successo) perché "non fare nulla" è un risultato valido
sys.exit(0)
# --- SIMULATION ZONE (GPU Constraints) ---
print(f"📂 Loading dataset from {DATA_PATH}...")
# In reale: df = pd.read_csv(DATA_PATH)
print("⚙️ Initializing RoBERTa Fine-Tuning on CPU (Simulation)...")
time.sleep(2) # Simuliamo il tempo di caricamento
# Simula il log del training
print("Epoch 1/3: Loss 0.45 ... accuracy: 0.78")
print("Epoch 2/3: Loss 0.22 ... accuracy: 0.84")
# 2. MODEL EVALUATION CHECK (Il punto che chiedevi)
print("⚖️ Evaluating new model vs current production model...")
# Qui ci sarebbe: if new_accuracy > old_accuracy:
simulated_improvement = True
if simulated_improvement:
print("✅ Performance improved! (Accuracy +2.5%)")
print(f"💾 Saving new model artifact to {MODEL_OUTPUT_DIR}...")
os.makedirs(MODEL_OUTPUT_DIR, exist_ok=True)
with open(f"{MODEL_OUTPUT_DIR}/metadata.txt", "w") as f:
f.write(f"Model retrained on {time.strftime('%Y-%m-%d')}\nStatus: Active")
else:
print("❌ No improvement detected. Keeping the old model.")
sys.exit(0)
if __name__ == "__main__":
train_and_evaluate()