ZenML: Framework Pipeline MLOps yang Modular dan Cloud-Agnostic
Pendahuluan
Membangun model machine learning yang akurat hanyalah sebagian kecil dari tantangan dalam produksi ML. Tantangan sesungguhnya terletak pada bagaimana membuat pipeline yang reproducible, scalable, dan mudah di-maintain. ZenML hadir sebagai framework MLOps open-source yang dirancang untuk mengatasi masalah ini dengan pendekatan yang modular dan cloud-agnostic.
ZenML memungkinkan data scientist dan ML engineer untuk mendefinisikan pipeline ML menggunakan Python decorator yang sederhana, sambil tetap memberikan fleksibilitas penuh untuk mengintegrasikan berbagai tool dan platform cloud. Dengan konsep "stacks" yang unik, Anda bisa berpindah dari local development ke production di cloud tanpa mengubah kode pipeline.
Dalam tutorial ini, kita akan mempelajari ZenML dari dasar hingga membangun pipeline end-to-end yang mencakup data ingestion, preprocessing, training, evaluation, dan deployment.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Python 3.8 atau lebih baru
- pip package manager
- Pemahaman dasar tentang machine learning
- Familiar dengan scikit-learn atau framework ML lainnya
Instalasi ZenML
Instalasi ZenML sangat mudah menggunakan pip:
pip install zenml
Untuk instalasi dengan integrasi tambahan:
pip install "zenml[server]"
Setelah instalasi, inisialisasi ZenML repository di project Anda:
zenml init
Jalankan ZenML dashboard secara lokal:
zenml login --local
Dashboard akan tersedia di http://127.0.0.1:8237 dan memberikan visualisasi lengkap pipeline, artifacts, dan stacks Anda.
Konsep Dasar: Steps dan Pipelines
Mendefinisikan Steps dengan @step
Step adalah unit kerja terkecil dalam ZenML. Setiap step adalah sebuah fungsi Python yang di-dekorasi dengan @step:
from zenml import step
import pandas as pd
@step
def loaddata() -> pd.DataFrame:
"""Memuat dataset dari sumber data."""
df = pd.readcsv("data/trainingdata.csv")
return df
@step
def preprocessdata(df: pd.DataFrame) -> pd.DataFrame:
"""Membersihkan dan memproses data."""
df = df.dropna()
df = df.dropduplicates()
return df
ZenML secara otomatis melakukan type checking dan serialization pada input/output setiap step berdasarkan type hints yang Anda berikan.
Mendefinisikan Pipeline dengan @pipeline
Pipeline menghubungkan beberapa steps menjadi alur kerja yang terstruktur:
from zenml import pipeline
@pipeline
def trainingpipeline():
"""Pipeline untuk training model ML."""
data = loaddata()
processeddata = preprocessdata(data)
model = trainmodel(processeddata)
metrics = evaluatemodel(model, processeddata)
return metrics
Menjalankan pipeline semudah memanggil fungsi:
if name == "main":
trainingpipeline()
Parameterisasi Steps
Anda bisa membuat steps yang menerima parameter konfigurasi:
from zenml import step
from pydantic import BaseModel
class TrainingConfig(BaseModel):
learningrate: float = 0.01
nestimators: int = 100
maxdepth: int = 5
@step
def trainmodel(
data: pd.DataFrame,
config: TrainingConfig = TrainingConfig()
) -> object:
"""Melatih model dengan konfigurasi yang dapat disesuaikan."""
from sklearn.ensemble import RandomForestClassifier
X = data.drop("target", axis=1)
y = data["target"]
model = RandomForestClassifier(
nestimators=config.nestimators,
maxdepth=config.maxdepth
)
model.fit(X, y)
return model
Artifacts dan Materializers
Memahami Artifacts
Setiap output dari step secara otomatis disimpan sebagai artifact. Artifact adalah data yang dihasilkan dan dikonsumsi oleh steps dalam pipeline. ZenML melacak setiap artifact dengan metadata lengkap termasuk versi, tipe, dan lineage.