Organizzazione del codice e refactoring

Introduzione al versionamento dei dati con DVC

Ravi Bhadauria

Machine Learning Engineer

Prototipo vs codice di produzione

  • Il codice di prototipazione consente iterazioni rapide
  • Ma non è adatto alla produzione
    • Non testato e soggetto a errori
    • Poco modulare, con molti blocchi ripetuti
    • Probabilmente non riproducibile
Introduzione al versionamento dei dati con DVC

Caratteristiche di buon codice di produzione

  • Riproducibile: ricrea gli stessi output in ambienti e tempi diversi

  • Modulare: scritto in moduli distinti, indipendenti e testabili

  • Coerente: unica fonte di verità per tutti i parametri

    • Un file di configurazione/parametri

Diagramma schematico con tre proprietà del codice di produzione

Introduzione al versionamento dei dati con DVC

File di configurazione e YAML

  • I file devono essere in un formato supportato

    • YAML, JSON, TOML, Python
    • Predefinito: params.yaml
  • Useremo YAML

    • YAML Ain't Markup Language
    • Consente un formato standard per trasferire dati tra lingue o app
    • Formato semplice e pulito
    • Estensioni valide: .yaml o .yml
1 https://dvc.org/doc/command-reference/params#description
Introduzione al versionamento dei dati con DVC

Sintassi YAML

  • Specifica i parametri come dizionari

    • Chiavi e valori separati da :
  • I commenti iniziano con #

  • Tipi di dato:

    • Interi, Float, Stringhe
  • Strutture dati:

    • Array
    • Dizionari annidati
  • L'indentazione è importante

# Coppie chiave-valore
a: 1
b: 1.2
c: "String value"
# Array
a: [1, 2.2, 3, 4.8]
b:
  - 5
  - "String value"
# Dizionari annidati
a:
  b: "Some value"
  c: "Some other value"
Introduzione al versionamento dei dati con DVC

Esempio di file di configurazione

# Parametri di preprocessing dei dati
preprocess:
  ...
  target_column: RainTomorrow
  categorical_features:
    - Location
    - WindGustDir
    - ...

# Parametri di training/valutazione del modello train_and_evaluate: rfc_params: n_estimators: 2 ...
Introduzione al versionamento dei dati con DVC

Esempio di funzione modulare

# In model.py
def evaluate_model(model, X_test, y_test):
    """Evaluate a model on a test set and return metrics."""
    y_pred = model.predict(X_test)
    precision = precision_score(y_test, y_pred)
    ...
    return { "accuracy": accuracy, "precision": precision,
        "recall": recall, "f1_score": f1 }
# Nel codice di entry point (train_and_evaluate.py)
from model import evaluate_model
metrics = evaluate_model(model, X_test, y_test)
Introduzione al versionamento dei dati con DVC

Esempio di layout del progetto

Schema del layout del codice in un repository di Machine Learning

Introduzione al versionamento dei dati con DVC

Passiamo alla pratica !

Introduzione al versionamento dei dati con DVC

Preparing Video For Download...