Організація коду та рефакторинг

Вступ до керування версіями даних із DVC

Ravi Bhadauria

Machine Learning Engineer

Прототипування vs продакшн-код

  • Прототипування коду дає змогу швидко ітерувати
  • Але не підходить для продакшну
    • Неперевірений і схильний до помилок
    • Немонолітний: багато повторів коду
    • Ймовірно нерепродуковний
Вступ до керування версіями даних із DVC

Властивості якісного продакшн-коду

  • Репродуковний: відтворює ті самі результати в різних середовищах і часі

  • Модульний: написаний як окремі, незалежні та тестовані модулі

  • Послідовний: єдине джерело правди для всіх параметрів

    • Файл конфігурації/параметрів

Схематична діаграма, що показує три властивості продакшн-коду

Вступ до керування версіями даних із DVC

Конфігураційні файли та YAML

  • Файли мають бути у підтримуваному форматі

    • YAML, JSON, TOML, Python
    • Типово — params.yaml
  • Працюватимемо з YAML

    • YAML Ain't Markup Language
    • Уніфікований формат передачі даних між мовами чи застосунками
    • Простий і читабельний формат
    • Дійсні розширення: .yaml або .yml
1 https://dvc.org/doc/command-reference/params#description
Вступ до керування версіями даних із DVC

Синтаксис YAML

  • Параметри задавайте як словники

    • Ключі та значення розділяються :
  • Коментарі починаються з #

  • Типи даних:

    • Цілі, числа з плав. крапкою, рядки
  • Структури даних:

    • Масиви
    • Вкладені словники
  • Важливі відступи

# 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"
Вступ до керування версіями даних із DVC

Приклад конфігураційного файлу

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

# Model training/evaluation paramters train_and_evaluate: rfc_params: n_estimators: 2 ...
Вступ до керування версіями даних із DVC

Приклад модульної функції

# 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)
Вступ до керування версіями даних із DVC

Приклад структури коду проєкту

Зображення структури коду в репозиторії з машинного навчання

Вступ до керування версіями даних із DVC

Давайте потренуємось!

Вступ до керування версіями даних із DVC

Preparing Video For Download...