Tutorial Hydra: Manajemen Konfigurasi yang Elegan untuk ML

# Hydra: Manajemen Konfigurasi yang Rapi untuk Aplikasi ML dan Python Kebanyakan proyek machine learning dimulai dari satu skrip training dan beberapa hyperparameter yang dilewatkan lewat `argparse`....

By Ruby Abdullah · · tutorial
HydraConfigurationMLOpsExperiment ManagementOmegaConfPython

Hydra: Manajemen Konfigurasi yang Rapi untuk Aplikasi ML dan Python

Kebanyakan proyek machine learning dimulai dari satu skrip training dan beberapa hyperparameter yang dilewatkan lewat argparse. Beberapa bulan kemudian skrip yang sama sudah memiliki tiga puluh flag, path yang di-hardcode tersebar di banyak fungsi, dan tidak ada yang bisa mereproduksi run yang menghasilkan model terbaik kuartal lalu. Hydra, framework open-source dari Meta yang dibangun di atas OmegaConf, dirancang persis untuk menyelesaikan kelas masalah ini. Tutorial ini membahas Hydra dari dasar menggunakan alur kerja training model yang realistis sebagai contoh utama.

Apa Itu Hydra dan Masalah yang Diselesaikannya

Hydra adalah framework Python untuk menyusun (compose) dan menimpa (override) konfigurasi berhierarki. Alih-alih satu file konfigurasi raksasa atau deretan flag command-line, Anda mendeskripsikan konfigurasi sebagai pohon dari file-file YAML kecil yang disusun Hydra saat runtime. Anda kemudian bisa menimpa nilai apa pun dari command line, menukar seluruh grup konfigurasi (misalnya beralih dari ResNet ke Vision Transformer), dan menjalankan sweep di berbagai kombinasi parameter.

Masalah konkret yang ditangani dalam pekerjaan ML:

  • Definisi argparse yang tersebar. Flag menumpuk di banyak file dan sulit ditemukan atau didokumentasikan.
  • Hyperparameter yang di-hardcode. Learning rate dan path yang terkubur dalam kode sumber membuat eksperimen rapuh.
  • Run yang sulit direproduksi. Tanpa snapshot konfigurasi yang persis, mereproduksi hasil beberapa bulan kemudian hanya menjadi tebakan.
  • Konfigurasi eksperimen yang kombinatorial. Mencoba tiga model terhadap empat dataset dengan dua optimizer berarti dua puluh empat run; mengelolanya secara manual rawan kesalahan.

Hydra berdiri di atas OmegaConf, yang menyediakan objek konfigurasi bertipe di baliknya (sebuah DictConfig), interpolasi variabel, dan logika penggabungan. Hydra menambahkan komposisi, override command-line, direktori output otomatis, dan multirun.

Instalasi

Hydra dipublikasikan sebagai hydra-core di PyPI. Pasang ke environment proyek Anda:

pip install hydra-core

Plugin opsional untuk sweeper dan launcher adalah paket terpisah, dipasang saat dibutuhkan:

pip install hydra-optuna-sweeper

pip install hydra-joblib-launcher

pip install hydra-submitit-launcher

Verifikasi instalasi:

python -c "import hydra; print(hydra.version)"

Tutorial ini menargetkan Hydra 1.3.x, yaitu jalur stabil saat ini.

Dasar: Entry Point, File Konfigurasi, dan cfg

Aplikasi Hydra memiliki tiga bagian: direktori konfigurasi, file YAML konfigurasi, dan fungsi entry-point yang didekorasi. Buat struktur proyek seperti ini:

project/

├── train.py

└── conf/

└── config.yaml

Mulai dengan conf/config.yaml minimal:

epochs: 10

batchsize: 32

optimizer:

name: adam

lr: 0.001

Sekarang entry point di train.py:

import hydra

from omegaconf import DictConfig, OmegaConf

@hydra.main(versionbase=None, configpath="conf", configname="config")

def main(cfg: DictConfig) -> None:

print(OmegaConf.toyaml(cfg))

print(f"Training selama {cfg.epochs} epoch")

print(f"Optimizer: {cfg.optimizer.name} @ lr={cfg.optimizer.lr}")

if name == "main":

main()

Beberapa catatan tentang dekorator. versionbase=None memilih perilaku modern dan menghilangkan peringatan kompatibilitas; setel secara eksplisit agar skrip Anda berperilaku konsisten di berbagai versi Hydra. configpath relatif terhadap file yang mendefinisikan main, dan configname adalah nama file YAML tanpa ekstensinya.

Jalankan:

python train.py

Objek cfg adalah DictConfig dari OmegaConf. Anda mengakses nilai dengan notasi titik (cfg.optimizer.lr) atau sintaks kamus (cfg["optimizer"]["lr"]). Objek ini berperilaku seperti namespace bersarang, dan OmegaConf mempertahankan tipe yang dideklarasikan di YAML, sehingga cfg.epochs bertipe int dan cfg.optimizer.lr bertipe float.

Artikel Terkait

Tutorial Metaflow: Framework MLOps dari Netflix untuk Data Science

Tutorial Metaflow: Framework MLOps dari Netflix untuk Data Science Metaflow adalah framework open-source yang dikembangk...

Tutorial Kedro: Pipeline Data Science yang Reproducible dan Terstruktur

Kedro: Pipeline Data Science yang Reproducible dan Mudah Dirawat Sebagian besar proyek data science dimulai dari satu no...

Tutorial Ray Train & Ray Tune: Training Terdistribusi dan Tuning Hyperparameter

Ray Train & Ray Tune: Pelatihan Terdistribusi dan Penyetelan Hiperparameter Sebagian besar proyek machine learning dimul...

ZenML: Framework Pipeline MLOps yang Modular dan Cloud-Agnostic

ZenML: Framework Pipeline MLOps yang Modular dan Cloud-Agnostic Pendahuluan Membangun model machine learning yang akurat...