Kurs

Giriş
Bir makine öğrenimi modeli oluştururken, modeli üretimde eğitmek ve sunmak için gereken altyapıyı hesaba katmayı unutabilirsiniz. Uçtan uca makine öğrenimi iş akışlarında, tüm uygulama, platform ve kaynak gereksinimlerini yönetmek zorlayıcı olabilir.
Geleneksel web dağıtımlarına kıyasla, makine öğrenimi uygulamalarının farklı bir ayak izi vardır. Örneğin, eğitim aşaması kaynak açısından yoğundur, çıkarım (inference) aşaması ise hafif ve hızlıdır. Tüm bu parçaları çalıştırmak için araç ve çerçevelere de ihtiyaç duyarsınız. Uçtan uca makine öğrenimi uygulamaları için bir standart geliştirmede kullanılabilecek, son derece popüler bir açık kaynak çerçeve Kubeflow'dur.
Kubeflow nedir?
Kubeflow, seçilmiş bir dizi araç ve çerçeve içeren açık kaynaklı bir projedir. Kubeflow’un birincil amacı, taşınabilir ve ölçeklenebilir makine öğrenimi iş akışlarını geliştirmeyi, dağıtmayı ve yönetmeyi kolaylaştırmaktır.
Kubeflow, Kubernetes üzerine inşa edilmiştir, konteynerleri çalıştırmak ve orkestre etmek için açık kaynaklı bir platformdur. Kubernetes, farklı ortamlarda tutarlı şekilde çalışacak şekilde tasarlanmıştır; bu da Kubeflow’un çalışma biçiminin anahtarıdır. Kubeflow, Kubernetes’in iyi olduğu şeyi yapmasına izin verecek şekilde tasarlanmıştır; böylece verileri yönetme, not defterleri çalıştırma, modelleri eğitme ve sunma gibi ML iş akışlarını tanımlamaya ve çalıştırmaya odaklanabilirsiniz.
Kubeflow, Google’ın TensorFlow Extended adlı dahili projesinden evrilmiştir. Başlangıçta Kubernetes üzerinde TensorFlow işleri yürütmenin daha basit bir yolu olarak başladı; ancak o zamandan beri uçtan uca makine öğrenimi iş akışlarını çalıştırmak için çoklu mimari, çoklu bulut bir çerçeveye dönüştü.
Kubeflow ve Makine Öğrenimi İş Akışları
Kubeflow, veri bilimciler ve makine öğrenimi mühendisleri için her iki dünyanın en iyi işlevlerini bir arada sunan bir platformdur. Veri bilimciler, ML modelleriyle deneyler yapmak ve deneylerini Kubernetes üzerinde en verimli şekilde orkestre etmek için Kubeflow’u kullanabilir.
Makine öğrenimi mühendisleri ise Kubeflow’u geliştirme, test ve üretim sunumu için ML sistemlerini farklı ortamlara dağıtmak üzere kullanabilir.
Aşağıdaki diyagram, bir makine öğrenimi projesindeki iki farklı aşamaya örnektir: (i) Deneysel Aşama ve (ii) Üretim Aşaması.
Kubeflow, aşağıdaki boru hattındaki neredeyse tüm adımları desteklemek için birçok farklı bileşene sahiptir. Örneğin, modelin hiperparametre ayarlaması için Kubeflow’da “Katib” adlı bir bileşen bulunur. Kubeflow’un temel bileşenlerini bu eğitimin ilerleyen kısımlarında ele alacağız.

Kubeflow - Makine Öğrenimi İş Akışı
Kubeflow’un Kurulumu
Kubeflow ile hızlıca çalışmaya başlamanın iki yolu vardır:
- paketlenmiş dağıtımlar ile kurun (basit ve doğrudan).
- manifestler ile kurun (ileri seviye).
Paketlenmiş dağıtımlar ilgili bakımcılar tarafından geliştirilir ve desteklenir. Örneğin, Azure üzerindeki Kubeflow Microsoft tarafından yönetilmektedir. Aşağıdaki tabloda dağıtımların tam listesini görebilirsiniz:

Kubeflow Paketlenmiş Dağıtımlar
Kubeflow’un Üç İlkesi
Bileşenlik (Composability)
Bileşenlik, bileşenlerin birbiriyle ilişkilerini ele alan bir sistem tasarım ilkesidir. Kubeflow yüksek derecede bileşenlidir; bu sayede gerekirse makine öğrenimi boru hattınızın farklı bölümleri için farklı TensorFlow sürümlerini kolayca kullanabilirsiniz.
Taşınabilirlik
Taşınabilirlik, Kubeflow’u çalıştırdığınız her yerde tüm makine öğrenimi projenizi çalıştırabileceğiniz anlamına gelir. Platformdan bağımsızdır ve kullanıcı için tüm zorlukları soyutlar. Kodu yalnızca bir kez yazmanız yeterlidir; Kubeflow soyutlamayı üstlenerek kodu dizüstü bilgisayarınızda veya bulutta bir küme üzerinde çalıştırmanızı sağlar.
Ölçeklenebilirlik
Ölçeklenebilirlik, projenizin ihtiyaç duyulduğunda daha fazla kaynağa erişebilmesi ve ihtiyaç olmadığında bunları serbest bırakabilmesi demektir. Her ortamda CPU, GPU ve TPU gibi farklı bilişim kaynakları bulunabilir.

Kubeflow Bileşenleri
Kubeflow bileşenleri, birlikte Kubeflow’u oluşturan mantıksal bloklardır. Genel olarak, bir makine öğrenimi projesinde bir veya daha fazla bileşeni kullanırsınız.
Kontrol Paneli
Her şeyden önce, Merkezi Kontrol Paneli diğer Kubeflow bileşenlerine hızlı erişim sağlar. Faydalı bileşenlerden bazıları şunlardır:
- Not Defterleri: Not defteri sunucularını yönetmek için.
- Boru Hatları: Kubeflow boru hatlarını yönetmek için.
- Deneyler: Katib deneylerini yönetmek için.

Kubeflow Kontrol Paneli Arayüz Görünümü
Not Defterleri
Kubeflow, tümleşik bir Jupyter not defteri ortamıyla birlikte gelir. Not defterleri hızlı testler yapmak, modeller geliştirmek ve hatta ML uygulamaları yazmak için kullanışlıdır.
ML mühendislerinin ve veri bilimcilerin not defterlerini yerelde çalıştırmaları ve kaynaklarla sınırlı kalmaları sık görülen bir durumdur. Not defterlerinin kümede bulunması, kaynakların dinamik olarak ölçeklenebildiği yerlerde işleri çalıştırmayı kolaylaştırır.

Boru Hatları
Kubeflow Pipelines, Docker konteynerlerine dayalı uçtan uca taşınabilir ve ölçeklenebilir makine öğrenimi boru hatları oluşturmak için güçlü bir Kubeflow bileşenidir.
Makine Öğrenimi Boru Hatları, veri toplamadan makine öğrenimi modellerini sunmaya kadar her şeyi yönetebilen bir dizi adımdan oluşur. Bir boru hattındaki her adım bir Docker konteyneridir; dolayısıyla taşınabilir ve ölçeklenebilirdir. Boru hattındaki her adım bağımsızdır; bu da boru hattı bileşenlerini yeniden kullanmanıza olanak tanır.

Bu eğitimde, Kubeflow Pipelines bileşenini ayrıntılı olarak inceleyecek ve Kubeflow kullanarak bir makine öğrenimi boru hattının nasıl oluşturulup çalıştırılacağına dair kod örneğini göreceğiz.
Katib
Katib, ölçekli otomatik hiperparametre ayarlaması için tasarlanmış bir Kubeflow bileşenidir. Hiperparametre ayarlaması, iyi modeller geliştirmede büyük rol oynar; çünkü bir hiperparametre uzayında elle arama yapmak çok çaba gerektirebilir.
Katib, hiperparametre değerlerinizi tanımlı bir metrik (örneğin AUC veya RMSE) etrafında optimize etmenize yardımcı olur. Modelinizi üretime hazırlamak için en iyi yapılandırmayı bulmanın ve görselleştirmenin kullanışlı bir yoludur.

Kubeflow Pipelines
Bir makine öğrenimi iş akışı, veri hazırlamadan model eğitimine, model değerlendirmesine ve daha fazlasına uzanan birçok adımı içerebilir. Bunları gelişigüzel biçimde takip etmek zordur.
Uygun araçlar olmadan deney günlüğü tutma ve model sürüm takibi yapmak da veri bilimciler için başka bir zorluktur. Kubeflow Pipelines, veri bilimcilerin bileşenlere ayrılabilir, paylaşılabilir ve tekrarlanabilir standartlarla makine öğrenimi iş akışları geliştirmesine olanak tanır.
Kubeflow, veri bilimcilerin makine öğrenimi kodu geliştirirken disiplinli bir boru hattı yaklaşımını benimsemelerine ve bunu buluta ölçeklendirmelerine yardımcı olan Kubernetes yerel bir çözümdür. Kubeflow Pipelines’ın nihai hedefleri şunlardır:
- Makine Öğrenimi Boru Hatlarının ölçekli orkestrasyonunu basitleştirmek
- Çoklu kiracılık ile daha hızlı deney, tekrarlanabilirlik ve iş birliği sağlamak. Kubeflow arayüzü, erişim denetimiyle gruplar oluşturmak ve kullanıcılara gruplara eklemek için kullanılabilir.
- Yeniden kullanılabilir olmak ve farklı ML bileşenleri (boru hattı adımları) için standardizasyon sunmak.
Kubeflow’u kullanarak, her seferinde yeniden inşa etmeden, yapı taşları gibi uçtan uca makine öğrenimi çözümleri oluşturabilirsiniz. Kubeflow ayrıca yürütme izleme, iş akışı zamanlama, meta veri günlüğü ve sürümlendirme gibi çeşitli diğer özellikleri de destekler.

Kubeflow Pipelines’ta Önemli Kavramlar
Boru Hattı (Pipeline)
Boru hattı, bir makine öğrenimi (ML) iş akışındaki açıkça tanımlanmış adımlar dizisidir. Boru hattı, boru hattını çalıştırmak için gereken girdilerin (parametrelerin) ve her bileşenin giriş ve çıkışlarının tanımına sahip olmalıdır. Bir boru hattındaki her bileşen bir girdi alır, onu işler ve çıktıyı bir sonraki bileşene sağlar.
Burada anlaşılması gereken çok önemli bir kavram, Kubeflow boru hattındaki her adımın (bileşenin) temelde bir Docker konteyneri olduğudur. Bir boru hattını yürüttüğünüzde, Kubeflow, boru hattındaki bileşenlere karşılık gelen bir veya daha fazla Kubernetes Pod’u başlatır. Pod’lar daha sonra Docker konteynerini başlatır ve bu da bileşende yazdığınız kodu çalıştırır.
Bileşen (Component)
Bir boru hattı bileşeni, eksik değer ataması, veri ölçekleme veya makine öğrenimi modeli eğitimi gibi makine öğrenimi iş akışında bir adımı gerçekleştiren, kendi içinde yeterli koddur.
Kubeflow boru hattındaki bir bileşen bir fonksiyona benzer. Bu nedenle her bileşenin bir adı, girdi parametreleri ve bir çıktısı vardır.
Bir boru hattındaki her bileşen bir Docker imajı olarak paketlenmelidir; böylece boru hattının her adımı diğerlerinden bağımsız olur ve ML iş akışlarınızın farklı bölümlerinde farklı çerçeve ve araçları karıştırıp eşleştirebilirsiniz.
Deney (Experiment)
Bir deney, aynı boru hattının farklı yapılandırmalarını çalıştırmanıza ve sonuçları karşılaştırıp analiz etmenize olanak tanır. Normalde makine öğreniminde, hangisinin en iyi çalıştığını görmek için farklı parametreleri denemeniz gerekir. Kubeflow Pipeline Experiment bunun için tasarlanmıştır.
Graf
Graf, Kubeflow arayüzündeki görsel sunumdur. Her bir adıma karşılık gelen boru hattı bileşenleri arasındaki ebeveyn/çocuk ilişkilerini gösteren oklarla, bir boru hattı çalıştırmasının yürüttüğü veya yürütmekte olduğu adımları gösterir.
Kubeflow’da boru hatları oluşturmanın üç yolu
Umarız artık Kubeflow boru hatlarının ne olduğu ve bu çerçeveyi üretimde makine öğrenimi iş akışlarını tasarlamak ve dağıtmak için kullanmanın faydalarının neler olduğu açıktır. Kubeflow’u kullanarak boru hatları oluşturup dağıtmanın üç yolunu hızlıca gözden geçirelim.
Kullanıcı Arayüzü (UI)
Kubeflow arayüzünü, boru hatları çalıştırmak, başkalarının sizinle paylaştığı boru hatlarını yüklemek, çalıştırmaların çıktıları ve yapıtlarını (artifact) görüntülemek ve otomatik çalıştırmaları zamanlamak için kullanabilirsiniz. Boru Hattı arayüzü şöyle görünür:

Kubeflow Boru Hattı Arayüzleri
Resmi Python SDK
Kubeflow, ML boru hatlarını programatik olarak geliştirip yürütmek için kullanabileceğiniz bir dizi Python kitaplığı sağlar. Kubeflow boru hatları için en yaygın kullanım yolu budur.
REST API
Kubeflow ayrıca sürekli tümleştirme/dağıtım sistemleri için REST API’leri sunar. Aşağı akıştaki kurumsal sistem veya süreçlere herhangi bir Kubeflow Boru Hattı işlevini entegre etmek istediğiniz bir kullanım durumunu hayal edin.
Kubeflow Boru Hattı Eğitimi
Kubeflow ile başlamanın en kolay yolu, temelde bulutta yönetilen bir hizmet gibi olan paketlenmiş bir dağıtımı kullanmaktır. Burada, GCP üzerinde Kubeflow hizmetini kullanıyoruz. Hizmeti GCP üzerinde nasıl dağıtacağınızı öğrenmek için bu resmi kılavuzu izleyebilirsiniz.
Dağıtım başarılı olduktan sonra, bu kontrol paneline GCP uç noktanızdan erişebilirsiniz.

Kubeflow Kontrol Paneli - GCP üzerinde Dağıtım
Kubeflow Pipelines, birkaç örnek boru hattıyla birlikte gelir. Python’da temel bir veri ön işleme boru hattını deneyelim. Sol taraftaki araç çubuğundan boru hattına tıklayın.

Kubeflow Boru Hatları - GCP üzerinde Dağıtım
Deney oluştur’a tıklayın:

Kubeflow Boru Hatları - GCP üzerinde Dağıtım
İstemleri takip edin ve ardından boru hattını çalıştırmak için çalışma ekranındaki başlat düğmesine tıklayın.

Kubeflow Boru Hatları - GCP üzerinde Dağıtım
Deney kontrol panelinde görünecektir:

Kubeflow Boru Hatları - GCP üzerinde Dağıtım
Çalışma tamamlandığında çıktıyı görmek için deneye tıklayın:

Kubeflow Boru Hatları - GCP üzerinde Dağıtım
Artık Kubeflow arayüzünü kullanarak boru hatlarını nasıl çalıştırabileceğinizi biliyorsunuz. Yukarıdaki boru hattındaki her bileşen, basit ve kendi içinde izole edilmiş bir Python betiğidir. Yukarıdaki örnekte adımlar “Metin Yazdır” veya “Sayıları Topla” gibi basittir.
Bu bileşenleri Python’da nasıl kodlayıp derleyebileceğinize dair daha karmaşık bir örneğe bakalım.
Python SDK ile Bir Kubeflow Boru Hattı Oluşturun
Bu örnekte iki bileşenli bir Kubeflow boru hattı oluşturacağız:
- Girdi olarak iletilen URL’ye göre sıkıştırılmış tar dosyasını indirin,
- Tüm csv dosyalarını çıkarın ve `pd.concat` işlevini kullanarak tek bir pandas veri çerçevesi oluşturun.
Kuramsal olarak, bu boru hattını iki adıma bölmek yerine, URL’yi alan, sıkıştırılmış dosyayı indiren ve ardından tüm csv dosyalarını tek bir dosyada birleştiren tek bir işlev de oluşturabiliriz.
Ancak bunu iki adımda yapmanın faydası, sıkıştırılmış dosyayı indirmek için bir adım oluşturabilmeniz ve bunu diğer projelerde de yeniden kullanabilmenizdir.
Kubeflow’da, bileşeni bir yaml dosyası olarak tanımlayabilir ve bileşeni doğrudan URL’den yüklemek için `kfp.components.load_component_from_url` işlevini kullanabilirsiniz.
İlk adım için, bu açık kaynaklı URL’den bileşeni yükleyelim.
```
web_downloader_op = kfp.components.load_component_from_url(
'https://raw.githubusercontent.com/kubeflow/pipelines/master/components/web/Download/component-sdk-v2.yaml')
```
İkinci adım için bir Python işlevi tanımlayacağız:
```
@component(
packages_to_install=['pandas==1.1.4'],
output_component_file='component.yaml'
)
def merge_csv(tar_data: Input[Artifact], output_csv: Output[Dataset]):
import glob
import pandas as pd
import tarfile
tarfile.open(name=tar_data.path, mode="r|gz").extractall('data')
df = pd.concat(
[pd.read_csv(csv_file, header=None)
for csv_file in glob.glob('data/*.csv')])
df.to_csv(output_csv.path, index=False, header=False)
```
Gördüğünüz gibi, işlev `kfp.dsl.component` ek açıklamasıyla süslenmiştir. Bu ek açıklamayı, konteyner imajını, paket bağımlılıklarını (bu örnekte pandas[1.1.4]) ve bileşen özelliklerinin kaydedileceği konumu (component.yaml) tanımlamak için kullanabiliriz.
Artık bu iki bileşeni `pipeline` operatörünü kullanarak bir boru hattında birbirine bağlayabilirsiniz.
Bir boru hattı tanımlayın ve bir bileşenden görev oluşturun:
@dsl.pipeline(
name='my-pipeline',
# You can optionally specify your own pipeline_root
# pipeline_root='gs://my-pipeline-root/example-pipeline',
)
def my_pipeline(url: str):
web_downloader_task = web_downloader_op(url=url)
merge_csv_task = merge_csv(tar_data=web_downloader_task.outputs['data'])
# The outputs of the merge_csv_task can be referenced using the
# merge_csv_task.outputs dictionary: merge_csv_task.outputs['output_csv']
```
Boru hattı tanımlandıktan sonra derleyebiliriz. Bunu yapmanın iki yolu vardır. İlki Kubeflow arayüzü üzerinden.
```
kfp.compiler.Compiler(mode=kfp.dsl.PipelineExecutionMode.V2_COMPATIBLE).compile(
pipeline_func=my_pipeline,
package_path='pipeline.yaml')
```
Artık bu `pipeline.yaml` dosyasını Kubeflow Boru Hattı kullanıcı arayüzünü kullanarak yükleyip çalıştırabiliriz. Alternatif olarak, boru hattını Kubeflow Boru Hattı SDK istemcisini kullanarak da çalıştırabiliriz.
```
client = kfp.Client()
client.create_run_from_pipeline_func(
my_pipeline,
mode=kfp.dsl.PipelineExecutionMode.V2_COMPATIBLE,
# You can optionally override your pipeline_root when submitting the run too:
# pipeline_root='gs://my-pipeline-root/example-pipeline',
arguments={
'url': 'https://storage.googleapis.com/ml-pipeline-playground/iris-csv-files.tar.gz'
})
```
Bu boru hattını bir makine öğrenimi modeli ekleyecek şekilde genişletmemiz gerekirse, `Input[Dataset]` alan ve istediğimiz herhangi bir çerçeveyi (örneğin sklearn, Tensorflow veya PyTorch) kullanarak modeli eğiten bir Python işlevi oluştururuz.
İşlev oluşturulduktan sonra, üçüncü görevi eklemek için `my_pipeline` işlevini düzenlememiz ve ardından boru hattını `kfp.Client` veya arayüzü kullanarak yeniden derlememiz gerekir.
Eğitim, Kubeflow Resmi kaynağından uyarlanmıştır.
Sonuç
Birkaç milyon satırlık veriyi bir Jupyter Not Defteri’nde denemek bir şeydir. Bulutta uzaktan milyarlarca satır üzerinde bir makine öğrenimi modeli eğitmek başka bir şey. Makine öğrenimi, büyük modelleri ölçeklenebilir ve dağıtık bir ortamda eğitme aşamasına gelindiğinde gerçekten zorlaşır.
Kubernetes, makine öğrenimi işleri için en popüler ve yaygın kullanılan orkestrasyon çerçevelerinden biridir; Kubeflow ise kullanıcılar için birçok zorlu ayrıntıyı soyutlamak üzere Kubernetes üzerine inşa edilmiş bir çerçevedir. Yine de bunun tek seçeneğiniz olmadığını bilmekte fayda var. Her şeyde olduğu gibi alternatifler mevcuttur.
Bu tür platformlara bir örnek Databricks’tir. Kubernetes’ten farklı olan kendine özgü bir orkestrasyon motoruna sahiptir ve Not Defterleri, Deney Günlüğü, Model Kaydı, İş Zamanlama ve İzleme’yi destekleyen şık bir arayüzle birlikte gelir.
Amazon Sagemaker, Kubernetes / Kubeflow’a bir başka alternatif örneğidir. Amazon SageMaker, veri bilimcilerin ve geliştiricilerin makine öğrenimi modellerini hızlı ve kolay bir şekilde oluşturup eğitmek ve doğrudan üretime hazır, barındırılan bir ortama dağıtmak için kullanabilecekleri tamamen yönetilen bir makine öğrenimi hizmetidir. Keşif ve analiz için tümleşik bir Jupyter Not Defteri ortamı sağlar.
Sürekli gelişen tüm bu mühendislik kavramları sizi bunaltıyor mu? Endişelenmeyin, Datacamp Understanding Data Engineering kursunu sunuyor. Bu derste bir veri mühendisinin temel sorumluluklarını, bunların veri bilimcilerinkinden nasıl farklılaştığını ve bir organizasyonda veri akışını nasıl kolaylaştırdıklarını öğreneceksiniz. Ayrıca veri mühendislerinin, veri bilimciler için veri bilimi çalışmalarını mümkün kılan altyapıyı nasıl oluşturduklarını da öğreneceksiniz. Kodlama yok involved!
Kubeflow SSS
Kubeflow ile Kubernetes arasındaki fark nedir?
Kubernetes, yazılım dağıtımı, ölçekleme ve yönetimini otomatikleştirmek için açık kaynaklı bir konteyner orkestrasyon sistemidir. Öte yandan Kubeflow, Kubernetes üzerinde taşınabilir ve ölçeklenebilir makine öğrenimi iş akışlarını geliştirmeyi, dağıtmayı ve yönetmeyi kolaylaştırmak için seçilmiş bir dizi araç ve çerçeve içeren açık kaynaklı bir projedir. Kubeflow, Kubernetes üzerine inşa edilmiştir.
Kubeflow, Kubernetes'in bir parçası mı?
Hayır, Kubeflow ayrı bir kütüphanedir. Diğer tüm Python kütüphanelerinde olduğu gibi pip install ile kurabilirsiniz.
Kubeflow açık kaynaklı bir çerçeve midir?
Evet, Kubeflow tamamen açık kaynaktır ve Apache-2.0 lisansı altında kullanıma sunulmuştur.
Airflow ile Kubeflow arasındaki fark nedir?
Apache Airflow genel bir görev orkestrasyon platformuyken, Kubeflow makine öğrenimi görevlerine odaklanır. Her iki araç da görevleri Python ile tanımlamanıza izin verir; ancak Kubeflow, görevleri ağırlıklı olarak Kubernetes üzerinde çalıştırır.
Kubeflow ile MLFlow arasındaki fark nedir?
Bunlar iki çok farklı açık kaynaklı çerçevedir. Kubeflow, Kubernetes üzerinde taşınabilir ve ölçeklenebilir makine öğrenimi iş akışlarını geliştirmeyi, dağıtmayı ve yönetmeyi kolaylaştıran bir konteyner orkestrasyon sistemidir; MLFlow ise deney takibi ve model sürümlendirme için bir kütüphanedir.
