Organizacja kodu i refaktoryzacja

Wprowadzenie do wersjonowania danych z DVC

Ravi Bhadauria

Machine Learning Engineer

Kod prototypowy a produkcyjny

  • Kod prototypowy umożliwia szybką iterację
  • Nie nadaje się jednak do środowiska produkcyjnego
    • Nieprzetestowany i podatny na błędy
    • Niemoduralny — zawiera wiele powtarzających się bloków kodu
    • Prawdopodobnie niereproduktowalny
Wprowadzenie do wersjonowania danych z DVC

Cechy dobrego kodu produkcyjnego

  • Reprodukowalny: odtwarza te same wyniki w różnych środowiskach i momentach

  • Modularny: podzielony na odrębne, niezależne i testowalne moduły

  • Spójny: jedno źródło prawdy dla wszystkich parametrów

    • Plik konfiguracyjny / parametrów

Schemat przedstawiający trzy właściwości kodu produkcyjnego

Wprowadzenie do wersjonowania danych z DVC

Pliki konfiguracyjne i YAML

  • Pliki muszą być w obsługiwanym formacie

    • YAML, JSON, TOML, Python
    • Domyślnie: params.yaml
  • Będziemy pracować z YAML

    • YAML Ain't Markup Language
    • Standardowy format wymiany danych między językami i aplikacjami
    • Prosty i przejrzysty format
    • Dopuszczalne rozszerzenia: .yaml lub .yml
1 https://dvc.org/doc/command-reference/params#description
Wprowadzenie do wersjonowania danych z DVC

Składnia YAML

  • Parametry jako słowniki

    • Klucze i wartości oddzielone znakiem :
  • Komentarze zaczynają się od #

  • Typy danych:

    • Integer, Float, String
  • Struktury danych:

    • Tablice
    • Słowniki zagnieżdżone
  • Wcięcia mają znaczenie

# 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"
Wprowadzenie do wersjonowania danych z DVC

Przykładowy plik konfiguracyjny

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

# Model training/evaluation paramters train_and_evaluate: rfc_params: n_estimators: 2 ...
Wprowadzenie do wersjonowania danych z DVC

Przykładowa funkcja modularna

# 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)
Wprowadzenie do wersjonowania danych z DVC

Przykładowy układ kodu projektu

Obraz przedstawiający układ kodu w repozytorium uczenia maszynowego

Wprowadzenie do wersjonowania danych z DVC

Czas na ćwiczenia!

Wprowadzenie do wersjonowania danych z DVC

Preparing Video For Download...