Tutorial Flyte: Workflow Orchestration untuk Machine Learning dan Data Engineering
Flyte adalah platform workflow orchestration open-source yang dirancang khusus untuk machine learning, data engineering, dan data science. Dikembangkan oleh Union.ai dan digunakan oleh perusahaan seperti Spotify, Lyft, dan Freenome, Flyte menyediakan cara yang scalable, reproducible, dan production-ready untuk mengelola pipeline data dan ML.
Berbeda dengan workflow orchestrator tradisional seperti Airflow yang fokus pada scheduling task, Flyte dibangun dari awal dengan pemahaman mendalam tentang kebutuhan ML: versioning data dan model, type safety, caching hasil komputasi, dan native support untuk container execution. Dalam tutorial ini, kita akan mempelajari Flyte dari instalasi hingga membangun pipeline ML yang siap production.
Mengapa Flyte?
Sebelum memulai, mari pahami mengapa Flyte menjadi pilihan yang semakin populer di ekosistem MLOps:
Instalasi dan Setup
Prasyarat
Pastikan sistem Anda memiliki:
- Python 3.8 atau lebih baru
- Docker (untuk menjalankan Flyte secara lokal)
- pip atau conda untuk manajemen paket
Instalasi Flytekit
Flytekit adalah SDK Python untuk menulis workflow Flyte:
pip install flytekit
Untuk fitur tambahan seperti integrasi Pandas dan visualisasi:
pip install flytekit[pandas]
pip install flytekitplugins-deck-standard
Menjalankan Flyte Secara Lokal
Flyte menyediakan sandbox untuk development lokal menggunakan Docker:
pip install flytectl
flytectl demo start
Perintah ini akan menjalankan cluster Flyte lengkap di Docker, termasuk:
- Flyte Admin (API server)
- Flyte Console (web UI)
- Flyte Propeller (workflow engine)
- MinIO (object storage)
- PostgreSQL (metadata store)
Setelah berhasil, akses Flyte Console di http://localhost:30080/console.
Alternatif yang lebih ringan, Anda bisa menjalankan workflow secara lokal tanpa cluster:
pyflyte run myworkflow.py myworkflow --inputparam value
Konsep Dasar Flyte
Tasks
Task adalah unit kerja terkecil di Flyte. Sebuah task adalah fungsi Python yang didekorasi dengan @task:
from flytekit import task
@task
def sayhello(name: str) -> str:
return f"Hello, {name}!"
Perhatikan bahwa type hint wajib digunakan. Flyte menggunakan type hint untuk validasi dan serialisasi data.
Workflows
Workflow menggabungkan beberapa task menjadi sebuah pipeline:
from flytekit import task, workflow
@task
def sayhello(name: str) -> str:
return f"Hello, {name}!"
@task
def greetinglength(greeting: str) -> int:
return len(greeting)
@workflow
def myworkflow(name: str) -> int:
greeting = sayhello(name=name)
length = greetinglength(greeting=greeting)
return length
Menjalankan Workflow
Ada beberapa cara menjalankan workflow:
# Jalankan secara lokal (untuk development)
pyflyte run myworkflow.py myworkflow --name "Flyte"
Jalankan di cluster Flyte
pyflyte run --remote myworkflow.py myworkflow --name "Flyte"
Atau jalankan langsung dari Python:
if name == "main":
result = myworkflow(name="Flyte")
print(f"Result: {result}")
Penggunaan Dasar: Pipeline Data Processing
Mari bangun pipeline data processing sederhana menggunakan Flyte: