Organizace kódu a refaktoring

Úvod do verzování dat s DVC

Ravi Bhadauria

Machine Learning Engineer

Prototypový vs. produkční kód

  • Prototypový kód umožňuje rychlou iteraci
  • Není však vhodný pro produkci
    • Netestovaný a náchylný k chybám
    • Není modulární, obsahuje mnoho opakujících se bloků
    • Pravděpodobně není reprodukovatelný
Úvod do verzování dat s DVC

Vlastnosti kvalitního produkčního kódu

  • Reprodukovatelný: stejné výstupy v různých prostředích a časech

  • Modulární: tvořen oddělenými, nezávislými a testovatelými moduly

  • Konzistentní: jediný zdroj pravdy pro všechny parametry

    • Konfigurační/parametrový soubor

Schématický diagram zobrazující tři vlastnosti produkčního kódu

Úvod do verzování dat s DVC

Konfigurační soubory a YAML

  • Soubory musí být v podporovaném formátu

    • YAML, JSON, TOML, Python
    • Výchozí je params.yaml
  • Budeme pracovat s YAML

    • YAML Ain't Markup Language
    • Standardní formát pro přenos dat mezi jazyky a aplikacemi
    • Jednoduchý a přehledný formát
    • Platné přípony: .yaml nebo .yml
1 https://dvc.org/doc/command-reference/params#description
Úvod do verzování dat s DVC

Syntaxe YAML

  • Parametry se zadávají jako slovníky

    • Klíče a hodnoty oddělené :
  • Komentáře začínají #

  • Datové typy:

    • Celá čísla, desetinná čísla, řetězce
  • Datové struktury:

    • Pole
    • Vnořené slovníky
  • Odsazení je důležité

# 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"
Úvod do verzování dat s DVC

Ukázkový konfigurační soubor

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

# Model training/evaluation paramters train_and_evaluate: rfc_params: n_estimators: 2 ...
Úvod do verzování dat s DVC

Ukázka modulární funkce

# 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)
Úvod do verzování dat s DVC

Ukázková struktura projektu

Obrázek struktury kódu v repozitáři strojového učení

Úvod do verzování dat s DVC

Pojďme procvičovat!

Úvod do verzování dat s DVC

Preparing Video For Download...