Kurs
Metaflow, veri iş akışları oluşturmak ve yönetmek için güçlü bir çerçevedir. Bu eğitimde, nasıl başlayacağınızı öğreneceksiniz. Özellikle şu konulara değineceğiz:
- Kurulum süreci
- Temel bir iş akışı oluşturma
- Temel kavramlar
- En iyi uygulamalar
Bu makalenin sonunda, iş akışlarınızı verimli bir şekilde düzenlemek ve ölçeklendirmek için gerekli becerilere sahip olacaksınız!
Metaflow nedir?

Kaynak: Why Metaflow?
Metaflow, veri bilimi projelerini yönetmeye yardımcı olmak için tasarlanmış bir Python çerçevesidir. Netflix tarafından, veri bilimciler ve makine öğrenimi mühendislerinin daha üretken olmasına yardımcı olmak amacıyla geliştirilmiştir. Bunu, süreçlerin baştan sona sorunsuz şekilde çalışmasını sağlayan iş akışı orkestrasyonu gibi karmaşık görevleri basitleştirerek başarır.
Metaflow’un başlıca özellikleri arasında, iş akışlarınızdaki değişiklikleri izleyen otomatik veri sürümlendirme ve kullanıcıların daha büyük veri setlerini ve daha karmaşık görevleri ele almasını sağlayan ölçeklenebilir iş akışları desteği bulunur.
Metaflow’un bir diğer avantajı, AWS ile kolayca entegre olmasıdır. Bu, kullanıcıların depolama ve işlem gücü için bulut kaynaklarından yararlanabilmesi anlamına gelir. Ayrıca, kullanıcı dostu Python API’si hem yeni başlayanlar hem de deneyimli kullanıcılar için erişilebilir kılar.
Hadi kuruluma başlayalım.
Metaflow’u Kurma
Metaflow, yeni projeler için Python 2.7 yerine Python 3 kurulmasını önerir. Belgelerde “Python 3, kullanım ömrü dolmuş Python 2.7’ye kıyasla daha az hataya sahiptir ve daha iyi desteklenmektedir.” ifadesi yer alır.
Bir sonraki adım, proje bağımlılıklarınızı yönetmek için sanal bir ortam oluşturmaktır. Bunu yapmak için aşağıdaki komutu çalıştırın:
python -m venv venv
source venv/bin/activate
Bu, bir sanal ortam oluşturur ve etkinleştirir. Etkinleştirildikten sonra, Metaflow’u kurmaya hazırsınız.
Metaflow, MacOS ve Linux için bir Python paketi olarak mevcuttur. En son sürüm, aşağıdaki komutu çalıştırarak Metaflow Github deposundan veya PyPi’dan kurulabilir:
pip install metaflow
Ne yazık ki, bu yazının yazıldığı sırada Metaflow, Windows kullanıcıları için yerel destek sunmuyor. Ancak Windows 10 kullanıcıları, Windows işletim sistemi içinde bir Linux ortamı çalıştırmalarını sağlayan WSL’yi (Windows Subsystem for Linux) kullanarak Metaflow’u kurabilir. Check out the documentation for a step-by-step guide on installing Metaflow on Windows 10.
AWS entegrasyonu (İsteğe bağlı)
Metaflow, AWS ile sorunsuz bir şekilde çalışır ve bu, kullanıcıların iş akışlarını bulut altyapısı kullanarak ölçeklendirmesine olanak tanır. AWS’yi entegre etmek için AWS kimlik bilgilerinizi yapılandırmanız gerekir.
Not: Bu adımlar, hâlihazırda bir AWS hesabınız ve AWS CLI’ın kurulu olduğunu varsayar. Daha fazla bilgi için AWS belgelerindeki talimatları izleyin.
- Önce, aşağıdaki komutla AWS CLI’ı kurun:
pip install awscli
- Aşağıdaki komutla AWS’yi yapılandırın
aws configure
Buradan, AWS Erişim Anahtarı Kimliğinizi (Access Key ID) ve Gizli Erişim Anahtarınızı (Secret Access Key) girmeniz istenecektir — bunlar, AWS CLI’ın AWS’ye yaptığınız istekleri kimlik doğrulaması için kullandığı kimlik bilgileridir. Bölgenizi ve çıktı biçiminizi girmeniz de istenebilir.
Bu ayrıntıları girdikten sonra, işte bu kadar! Metaflow, iş akışlarını çalıştırmak için AWS kimlik bilgilerinizi otomatik olarak kullanacaktır.
Metaflow ile İlk İş Akışınızı Oluşturma
Artık Metaflow kurulduğuna göre, ilk iş akışınızı oluşturma zamanı. Bu bölümde, bir akış oluşturmanın, çalıştırmanın ve Metaflow’da görevlerin ve adımların nasıl düzenlendiğini anlamanın temellerini adım adım anlatacağım.
Bu bölümün sonunda, veriyi işleyen ve basit işlemler yapan bir iş akışına sahip olacaksınız. Hadi başlayalım!
Bir Metaflow akışına genel bakış
Metaflow veri akışı paradigmasını kullanır; bu paradigma, bir programı yönlendirilmiş bir işlem grafiği olarak temsil eder. Bu yaklaşım, özellikle makine öğreniminde veri işleme hatları oluşturmak için idealdir.
Metaflow’da, işlemler grafiğine akış (flow) denir. Bir akış, adımlara bölünmüş bir dizi görevden oluşur. Her adımın, grafikteki kenarlar olarak işlev gören adımlar arası geçişlerle, bir düğüm olarak temsil edilen bir işlem olduğunu not edin.

Metaflow’da temel doğrusal bir geçiş | Kaynak: Metaflow belgeleri
Metaflow’daki akışlar için birkaç yapısal kural vardır. Örneğin, her akış bir başlangıç (start) adımı ve bir bitiş (end) adımı içermelidir. Bir akış çalıştırıldığında, yani bir çalıştırma (run) gerçekleştiğinde, başlangıç adımıyla başlar ve hatasız şekilde bitiş adımına ulaşırsa başarılı kabul edilir.
Başlangıç ve bitiş adımları arasında neler olacağı tamamen size bağlıdır — bunu bir sonraki bölümde göreceksiniz.
İlk akışınızı yazma
Başlamak için basit bir akış örneği burada. Not: Kod DataLab’de çalıştırılabilir.
from metaflow import FlowSpec, step
class MyFirstFlow(FlowSpec):
@step
def start(self):
print("Starting the flow!")
self.data = [1, 2, 3, 4, 5] # Example dataset
self.next(self.process_data)
@step
def process_data(self):
self.processed_data = [x * 2 for x in self.data] # Simple data processing
print("Processed data:", self.processed_data)
self.next(self.end)
@step
def end(self):
print("Flow is complete!")
if __name__ == '__main__':
MyFirstFlow()
Bu akışta:
start()adımı iş akışını başlatır ve bir veri kümesi tanımlar.process_data()adımı veriyi her bir öğeyi ikiyle çarparak işler.end()adımı akışı tamamlar.
Her adım @step dekoratörünü kullanır ve adımlar self.next() ile birbirine bağlanarak akış sırası tanımlanır.
Akışınızı çalıştırma
Akışınızı yazdıktan sonra, my_first_flow.py olarak kaydedin. Komut satırından şu komutla çalıştırın:
py -m my_first_flow.py run
Metaflow 2.12’de, kullanıcıların not defterlerinde akış geliştirmesine ve çalıştırmasına olanak tanıyan yeni bir özellik eklendi.
Tanımlı bir hücrede akışı çalıştırmak için, aynı hücrenin son satırına NBRunner tek satırını eklemeniz yeterlidir. Örneğin:
from metaflow import FlowSpec, step, NBRunner
class MyFirstFlow(FlowSpec):
@step
def start(self):
print("Starting the flow!")
self.data = [1, 2, 3, 4, 5] # Example dataset
self.next(self.process_data)
@step
def process_data(self):
self.processed_data = [x * 2 for x in self.data] # Simple data processing
print("Processed data:", self.processed_data)
self.next(self.end)
@step
def end(self):
print("Flow is complete!")
run = NBRunner(MyFirstFlow).nbrun()
Şu hatayı alırsanız:
“Metaflow, ortam değişkenlerine ($USERNAME vb.) göre kullanıcı adınızı belirleyemedi”
Metaflow çalışmadan önce kodunuza şunları ekleyin:
import os
if os.environ.get("USERNAME") is None:
os.environ["USERNAME"] = "googlecolab"
Her iki durumda da Metaflow akışı adım adım çalıştıracaktır. Yani, her bir adımın çıktısını terminalde şu şekilde görüntüleyecektir:

Yukarıdaki kodun çıktısı | Kaynak: Yazarın görseli
Metaflow’daki Temel Kavramlar
Metaflow’un temel kavramlarını anlamak, verimli ve ölçeklenebilir veri iş akışları oluşturmak için kritik öneme sahiptir. Bu bölümde üç temel kavramı ele alacağım:
- Adımlar ve dallanma
- Veri yapıtları (artifacts)
- Sürümleme
Bu unsurlar, Metaflow’un iş akışlarını yapılandırma ve yürütme omurgasını oluşturur; karmaşık süreçleri kolayca yönetmenizi sağlar.
Adımlar ve dallanma
Makalede daha önce adımlardan kısaca bahsettik, ancak netlik için tekrar ele alalım. Metaflow iş akışlarıyla ilgili anlaşılması gereken en önemli nokta, adımlar etrafında inşa edilmeleridir.
Adımlar, bir iş akışı içindeki her bir görevi temsil eder. Başka bir deyişle, her adım belirli bir işlemi yürütür (ör. veri yükleme, işleme, modelleme vb.).
Yukarıda “İlk akışınızı yazma” bölümünde oluşturduğumuz örnek, doğrusal bir dönüşümdü. Sıralı adımlara ek olarak Metaflow, kullanıcıların iş akışlarını dallandırmasına da olanak tanır. Dallanmış iş akışları, yürütme için ayrı yollar oluşturarak birden çok görevin paralel olarak çalıştırılmasını sağlar.

Bir dallanma örneği | Kaynak: Metaflow belgeleri
Dallanmanın en büyük faydası performanstır. Dallanma, Metaflow’un çeşitli adımları birden çok CPU çekirdeği veya buluttaki örnekler üzerinde çalıştırabilmesini sağlar.
Kodda bir dallanma şöyle görünür:
from metaflow import FlowSpec, step, NBRunner
class BranchFlow(FlowSpec):
@step
def start(self):
print("Starting the flow!")
self.data = [1, 2, 3, 4, 5] # Example dataset
self.next(self.split)
@step
def split(self):
self.next(self.branch1, self.branch2)
@step
def branch1(self):
# Code for branch 1
print("This is branch 1")
self.next(self.join)
@step
def branch2(self):
# Code for branch 2
print("This is branch 2")
self.next(self.join)
@step
def join(self, inputs):
# Merging branches back
print("Branches joined.")
self.next(self.end)
@step
def end(self):
print("Flow is complete!")
run = NBRunner(BranchFlow).nbrun()
|
💡Özet: Dallanma, kullanıcıların aynı anda birden çok görevi işleyebilen karmaşık iş akışları tasarlamasına olanak tanır. |
Veri yapıtları (artifacts)
Veri yapıtları (artifacts), bir iş akışında adımlar arasında veri depolamanıza ve aktarmanıza olanak tanıyan değişkenlerdir. Bu yapıtlar, bir adımın çıktısını bir sonraki adıma kalıcı kılar — böylece veri sonraki adımlar için erişilebilir olur.
Özetle, bir Metaflow sınıfındaki bir adım içinde veriyi self’e atadığınızda, onu bir yapıt olarak kaydetmiş olursunuz; bu da akıştaki diğer adımlar tarafından erişilebilir hale gelir (koddaki yorumlara bakın).
class ArtifactFlow(FlowSpec):
@step
def start(self):
# Step 1: Initializing data
print("Starting the flow!")
self.data = [1, 2, 3, 4, 5] # Example dataset saved as an artifact
self.next(self.process_data)
@step
def process_data(self):
# Step 2: Processing the data from the 'start' step
self.processed_data = [x * 2 for x in self.data] # Processing artifact data
print("Processed data:", self.processed_data)
self.next(self.save_results)
@step
def save_results(self):
# Step 3: Saving the processed data artifact
self.results = sum(self.processed_data) # Saving final result as an artifact
print("Sum of processed data:", self.results)
self.next(self.end)
@step
def end(self):
# Final step
print("Flow is complete!")
print(f"Final result: {self.results}") # Accessing artifact in final step
Yapıtlar neden Metaflow’un temel bir kavramıdır? Çünkü birçok kullanım alanı vardır:
- Veri akışı yönetimini otomatikleştirerek veriyi elle yükleme ve depolama gereksinimini ortadan kaldırır.
- Kalıcılığı (bir sonraki bölümde daha fazla) etkinleştirir; böylece kullanıcılar Client API ile daha sonra analiz yapabilir, Cards ile görselleştirebilir ve akışlar arasında yeniden kullanabilir.
- Yerel ve bulut ortamları arasında tutarlılık sağlar. Bu, açık veri transferi ihtiyacını ortadan kaldırır.
- Hatalardan önce veriyi incelemeyi ve hatalar düzeltildikten sonra yürütmeleri sürdürmeyi mümkün kılar.
Sürümleme ve kalıcılık
Metaflow, iş akışlarınız için sürümlemeyi otomatik olarak yönetir. Bu, bir akış her çalıştırıldığında benzersiz bir çalıştırma olarak izlenmesi anlamına gelir. Diğer bir deyişle, her çalıştırmanın kendi sürümü vardır; bu da geçmiş çalıştırmaları kolayca incelemenizi ve yeniden üretmenizi sağlar.
Metaflow bunu, her çalıştırmaya benzersiz tanımlayıcılar atayarak ve o yürütmedeki veri ve yapıtları koruyarak yapar. Bu kalıcılık, çalıştırmalar arasında hiçbir verinin kaybolmamasını sağlar. Geçmiş iş akışları kolayca yeniden ziyaret edilip incelenebilir ve gerekirse belirli adımlar yeniden çalıştırılabilir. Sonuç olarak hata ayıklama ve yinelemeli geliştirme çok daha verimli hale gelir ve yeniden üretilebilirliği sürdürmek kolaylaşır.
Pratik Örnek: Bir Makine Öğrenimi Modelini Eğitme
Bu bölümde, Metaflow kullanarak bir makine öğrenimi modeli eğitme sürecinde size rehberlik edeceğim. Şunları öğreneceksiniz:
- Veri yükleyen bir iş akışı tanımlama
- Bir makine öğrenimi modeli eğitme
- Sonuçları izleme
Sonunda, makine öğrenimi iş akışlarını verimli şekilde yapılandırmak ve çalıştırmak için Metaflow’u nasıl kullanacağınıza dair daha iyi bir anlayışa sahip olacaksınız. Hadi başlayalım!
Öncelikle, bir veri kümesi yükleyen, eğitimi gerçekleştiren ve modelin sonuçlarını çıktılara veren temel bir akış oluşturacağız.
Not: Kod DataLab’de çalıştırılabilir.
from metaflow import FlowSpec, step, Parameter, NBRunner
class TrainModelFlow(FlowSpec):
@step
def start(self):
# Load and split the dataset
print("Loading data...")
self.data = [1, 2, 3, 4, 5] # Replace with actual data loading logic
self.labels = [0, 1, 0, 1, 0] # Replace with labels
self.next(self.train_model)
@step
def train_model(self):
# Training a simple model (e.g., linear regression)
print("Training the model...")
self.model = sum(self.data) / len(self.data) # Replace with actual model training
print(f"Model output: {self.model}")
self.next(self.end)
@step
def end(self):
# Final step
print("Training complete. Model ready for deployment!")f
Bu kodda üç adım tanımlıyoruz:
start(): Veri kümesini yükler ve böler. Gerçek bir senaryoda veriyi gerçek bir kaynaktan (ör. bir dosya veya veritabanı) yüklersiniz.train_model(): Bir modelin eğitimini simüle eder. Burada gerçek bir makine öğrenimi algoritması yerine basit bir ortalama hesabı yapılır, ancak bunu ihtiyacınız olan herhangi bir eğitim koduyla değiştirebilirsiniz.end(): Akışın sonunu belirtir ve modelin devreye almaya hazır olduğunu ifade eder.
Akışı tanımladıktan sonra, aşağıdaki komutla çalıştırabilirsiniz:
run = NBRunner(TrainModelFlow)
run.nbrun()
Bu kodun yalnızca not defterlerinde çalıştığını (tüm kodun tek bir hücrede olması gerektiğini) unutmayın.
Bu kodu bir betik olarak çalıştırmak isterseniz, NBRunner komutlarını kaldırın ve betiğinizin sonuna aşağıdakini ekleyip kaydedin (ör. “metaflow_ml_model.py”):
if __name__ == "__main__":
TrainModelFlow()
Ardından, betiği çalıştırmak için komut satırına gidin ve aşağıdaki komutu çalıştırın:
py -m metaflow_ml_model.py
Metaflow, her çalıştırmayı otomatik olarak izler ve sonuçları Metaflow UI üzerinden görselleştirmenize olanak tanır.
Metaflow Kullanımı için En İyi Uygulamalar
Peki, Metaflow’un özelliklerinden en iyi şekilde nasıl yararlanırız? İşte bunu başarırken aynı anda iş akışlarınızı optimize etmenize yardımcı olacak birkaç en iyi uygulama:
Küçük akışlarla başlayın
Metaflow’a yeniyseniz, API’sine aşina olmak için basit iş akışlarıyla başlayın. Küçük başlamak, çerçevenin nasıl çalıştığını anlamanıza ve daha karmaşık projelere geçmeden önce yeteneklerine güven duymanıza yardımcı olur. Bu yaklaşım öğrenme eğrisini düşürür ve sağlam bir temel sağlar.
Hata ayıklama için Metaflow’un UI’ını kullanın
Metaflow, oldukça güçlü bir kullanıcı arayüzü içerir ve bu, iş akışlarınızı hata ayıklama ve izleme konusunda son derece yardımcı olabilir. Çalıştırmaları izlemek, tek tek adımların çıktılarını kontrol etmek ve ortaya çıkabilecek sorunları tespit etmek için UI’ı kullanın. Verilerinizi ve günlüklerinizi görselleştirmek, akışınızın yürütülmesi sırasında problemleri belirlemeyi ve düzeltmeyi kolaylaştırır.
Ölçeklenebilirlik için AWS’den yararlanın
Metaflow’u ilk kurduğunuzda, yerel modda çalışır. Bu modda, yapıtlar ve üstveri yerel bir dizine kaydedilir ve hesaplamalar yerel süreçlerle yürütülür. Bu kurulum kişisel kullanım için uygundur; ancak projeniz iş birliği veya büyük veri kümelerini içeriyorsa, daha iyi ölçeklenebilirlik için Metaflow’u AWS kullanacak şekilde yapılandırmanız önerilir. İyi olan şu ki, Metaflow, AWS ile mükemmel bir entegrasyon sağlar.
Sonuç
Bu eğitimde, Metaflow’a kurulumdan ilk veri bilimi iş akışınızı oluşturmaya kadar nasıl başlayacağınızı ele aldık. Adımları tanımlama, adımlar arasında veri aktarmak için veri yapıtlarını kullanma ve çalıştırmaları izlemek ve yeniden üretmek için sürümleme gibi temel kavramları inceledik. Ayrıca, bir makine öğrenimi modelinin eğitimiyle ilgili pratik bir örneği adım adım yürüttük; bu örnek, iş akışınızı nasıl tanımlayıp çalıştıracağınızı ve izleyeceğinizi gösterdi. Son olarak, Metaflow’dan en iyi şekilde yararlanmanıza yardımcı olacak bazı en iyi uygulamalara değindik.
MLOps öğreniminize devam etmek için aşağıdaki kaynaklara göz atın:

