Organisasi kode dan refactoring

Pengantar Versioning Data dengan DVC

Ravi Bhadauria

Machine Learning Engineer

Kode prototipe vs kode produksi

  • Kode prototyping memungkinkan iterasi cepat
  • Namun tidak cocok untuk produksi
    • Tidak diuji dan rentan error
    • Tidak modular, banyak blok kode berulang
    • Cenderung tidak dapat direproduksi
Pengantar Versioning Data dengan DVC

Ciri kode produksi yang baik

  • Reproducible: hasil sama di lingkungan dan waktu berbeda

  • Modular: ditulis sebagai modul terpisah, independen, dan dapat diuji

  • Konsisten: satu sumber kebenaran untuk semua parameter

    • Sebuah file konfigurasi/parameter

Diagram skematik yang menunjukkan tiga sifat kode produksi

Pengantar Versioning Data dengan DVC

File konfigurasi dan YAML

  • File harus berformat yang didukung

    • YAML, JSON, TOML, Python
    • Bawaan adalah params.yaml
  • Kita akan memakai YAML

    • YAML Ain't Markup Language
    • Format standar untuk bertukar data antar bahasa/aplikasi
    • Sederhana dan bersih
    • Ekstensi valid: .yaml atau .yml
1 https://dvc.org/doc/command-reference/params#description
Pengantar Versioning Data dengan DVC

Sintaks YAML

  • Nyatakan parameter sebagai dictionary

    • Key dan value dipisahkan oleh :
  • Komentar diawali #

  • Tipe data:

    • Integer, Float, String
  • Struktur data:

    • Array
    • Dictionary bertingkat
  • Indentasi penting

# 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"
Pengantar Versioning Data dengan DVC

Contoh file konfigurasi

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

# Model training/evaluation paramters train_and_evaluate: rfc_params: n_estimators: 2 ...
Pengantar Versioning Data dengan DVC

Contoh fungsi modular

# 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)
Pengantar Versioning Data dengan DVC

Contoh tata letak kode proyek

Gambar tata letak kode di repositori Machine Learning

Pengantar Versioning Data dengan DVC

Ayo berlatih!

Pengantar Versioning Data dengan DVC

Preparing Video For Download...