Kodorganisation och refaktorisering

Introduktion till dataversionshantering med DVC

Ravi Bhadauria

Machine Learning Engineer

Prototypkod vs produktionskod

  • Prototypkod möjliggör snabb iteration
  • Men lämpar sig inte för produktion
    • Otesterad och felbenägen
    • Inte modulär – innehåller många upprepade kodblock
    • Troligtvis inte reproducerbar
Introduktion till dataversionshantering med DVC

Egenskaper hos bra produktionskod

  • Reproducerbar: återskapa samma utdata i olika miljöer och vid olika tidpunkter

  • Modulär: skriven som distinkta, oberoende och testbara moduler

  • Konsekvent: en enda källa till sanning för alla parametrar

    • En konfigurations-/parameterfil

Ett schematiskt diagram som visar tre egenskaper hos produktionskod

Introduktion till dataversionshantering med DVC

Konfigurationsfiler och YAML

  • Filer ska vara i ett format som stöds

    • YAML, JSON, TOML, Python
    • Standard är params.yaml
  • Vi arbetar med YAML

    • YAML Ain't Markup Language
    • Ger ett standardformat för att överföra data mellan språk eller applikationer
    • Enkelt och tydligt format
    • Giltiga filändelser: .yaml eller .yml
1 https://dvc.org/doc/command-reference/params#description
Introduktion till dataversionshantering med DVC

YAML-syntax

  • Ange parametrar som ordlistor

    • Nycklar och värden separerade med :
  • Kommentarer börjar med #

  • Datatyper:

    • Integer, Floats, Strings
  • Datastrukturer:

    • Arrays
    • Nästlade ordlistor
  • Indragningar är viktiga

# Key-value pairs
a: 1
b: 1.2
c: "String value"
# Arrays
a: [1, 2.2, 3, 4.8]
b:
  - 5
  - "String value"
# Nested dictionaries
a:
  b: "Some value"
  c: "Some other value"
Introduktion till dataversionshantering med DVC

Exempel på konfigurationsfil

# Data preprocessing paramters
preprocess:
  ...
  target_column: RainTomorrow
  categorical_features:
    - Location
    - WindGustDir
    - ...

# Model training/evaluation paramters train_and_evaluate: rfc_params: n_estimators: 2 ...
Introduktion till dataversionshantering med DVC

Exempel på modulär funktion

# 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 }
# In entry-point code (train_and_evaluate.py)
from model import evaluate_model
metrics = evaluate_model(model, X_test, y_test)
Introduktion till dataversionshantering med DVC

Exempel på projektets kodstruktur

Bild av kodstruktur i ett maskininlärningsprojekt

Introduktion till dataversionshantering med DVC

Nu kör vi en övning!

Introduktion till dataversionshantering med DVC

Preparing Video For Download...