Tutorial Metaflow: Framework MLOps dari Netflix untuk Data Science
Metaflow adalah framework open-source yang dikembangkan oleh Netflix untuk membangun dan mengelola proyek data science secara efisien. Framework ini memungkinkan data scientist untuk fokus pada pemodelan tanpa harus khawatir tentang infrastruktur, orkestrasi, dan deployment. Dalam tutorial ini, kita akan mempelajari cara menggunakan Metaflow dari dasar hingga fitur-fitur lanjutan.
Mengapa Metaflow?
Dalam dunia data science dan machine learning, salah satu tantangan terbesar bukan membangun model, melainkan mengelola seluruh lifecycle dari eksperimen hingga produksi. Metaflow hadir untuk menyelesaikan masalah ini dengan pendekatan yang pragmatis:
- Human-centric API: Dirancang agar mudah digunakan oleh data scientist, bukan hanya ML engineers
- Versioning otomatis: Setiap eksperimen secara otomatis di-track dan bisa direproduksi
- Skalabilitas transparan: Beralih dari laptop ke cloud tanpa mengubah kode
- Dependency management: Mengelola environment Python secara otomatis
- Integration: Bekerja dengan AWS, Azure, GCP, dan Kubernetes
Instalasi
Instalasi Dasar
pip install metaflow
Instalasi dengan Dukungan AWS
pip install metaflow[aws]
Verifikasi Instalasi
import metaflow
print(metaflow.version)
Konfigurasi Awal
Setelah instalasi, jalankan konfigurasi:
metaflow configure show
Untuk konfigurasi AWS S3 sebagai datastore:
metaflow configure aws
Konsep Dasar: Flow dan Step
Metaflow menggunakan konsep Flow dan Step untuk mengorganisasi pipeline data science. Sebuah Flow adalah DAG (Directed Acyclic Graph) yang terdiri dari beberapa Step.
Flow Pertama
from metaflow import FlowSpec, step
class HelloFlow(FlowSpec):
@step
def start(self):
print("Memulai flow pertama!")
self.message = "Hello from Metaflow"
self.next(self.end)
@step
def end(self):
print(f"Pesan: {self.message}")
print("Flow selesai!")
if name == 'main':
HelloFlow()
Jalankan flow:
python helloflow.py run
Memahami Artifact
Setiap variabel yang disimpan sebagai self.x dalam sebuah step akan menjadi artifact yang secara otomatis di-versioning dan bisa diakses kembali.
from metaflow import FlowSpec, step
class ArtifactFlow(FlowSpec):
@step
def start(self):
self.data = [1, 2, 3, 4, 5]
self.modelname = "randomforest"
self.next(self.process)
@step
def process(self):
self.result = sum(self.data) 2
print(f"Model: {self.modelname}")
print(f"Hasil: {self.result}")
self.next(self.end)
@step
def end(self):
print(f"Final result: {self.result}")
if name == 'main':
ArtifactFlow()
Branching dan Join
Metaflow mendukung eksekusi paralel melalui branching. Ini sangat berguna untuk membandingkan beberapa model secara bersamaan.
Contoh Branching
from metaflow import FlowSpec, step
class BranchFlow(FlowSpec):
@step
def start(self):
self.rawdata = list(range(100))
self.next(self.trainrf, self.trainxgb)
@step
def trainrf(self):
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import makeclassification
X, y = makeclassification(nsamples=1000, nfeatures=20, randomstate=42)
model = RandomForestClassifier(nestimators=100, randomstate=42)
model.fit(X, y)
self.accuracy = model.score(X, y)
self.modeltype = "RandomForest"
print(f"RF Accuracy: {self.accuracy:.4f}")
self.next(self.join)
@step
def trainxgb(self):