1. Giriş
| Kubeflow, Kubernetes için bir makine öğrenimi araç setidir. Proje, Kubernetes'te makine öğrenimi (ML) iş akışlarının dağıtımlarını basit, taşınabilir ve ölçeklenebilir hale getirmeye odaklanmıştır. Amaç, makine öğrenimi için çeşitli altyapılara sınıfının en iyisi olan açık kaynaklı sistemler dağıtmanın kolay bir yolunu sağlamaktır. |
Kubeflow dağıtımı nasıl görünür?
Kubeflow dağıtımı:
- Taşınabilir: Google Cloud Platform (GCP), şirket içi veya sağlayıcılar arasında olması fark etmeksizin tüm Kubernetes kümelerinde çalışır.
- Ölçeklenebilir: Dalgalanan kaynakları kullanabilir ve yalnızca Kubernetes kümesine ayrılan kaynakların sayısı ile sınırlıdır.
- Birleştirilebilir: Seçilmiş bir makine öğrenimi çerçeveleri ve kitaplıkları arasından seçim yaparak bağımsız adımları tam bir makine öğrenimi iş akışında yapılandırmanıza olanak tanır.
Kubeflow, gevşek bağlı mikro hizmetleri tek bir birim olarak düzenlemenize ve bunları dizüstü bilgisayar, şirket içi veya bulut dahil olmak üzere çeşitli konumlara dağıtmanıza olanak tanır.
Bu codelab'de, MiniKF kullanarak kendi Kubeflow dağıtımınızı oluşturma ve ardından bir modeli eğitip sunmak için hiperparametre ayarlama ile Kubeflow Pipelines iş akışı çalıştırma adımları açıklanmaktadır. Tüm bu işlemleri Jupyter Notebook'tan yapabilirsiniz.
Ne oluşturacaksınız?
Bu codelab'de, herhangi bir CLI komutu veya SDK kullanmadan Kubeflow Pipelines'da hiperparametre ayarlama içeren karmaşık bir veri bilimi ardışık düzeni oluşturacaksınız. Kubernetes veya Docker hakkında bilgi sahibi olmanız gerekmez. İşlem tamamlandığında altyapınızda şunlar bulunur:
- Aşağıdakileri otomatik olarak yükleyen bir MiniKF (Mini Kubeflow) sanal makinesi:
- Kubernetes (Minikube kullanılarak)
- Kubeflow
- Genel amaçlı Jupyter not defterlerini Kubeflow Pipelines iş akışlarına dönüştürmek için kullanılan bir araç olan Kale ( GitHub)
- Veri sürümü oluşturma ve tekrarlanabilirlik için Arrikto Rok
Neler öğreneceksiniz?
- MiniKF ile Kubeflow'u yükleme
- Jupyter not defterlerinizi herhangi bir KSA komutu veya SDK kullanmadan Kubeflow Pipelines'a dönüştürme
- Bir düğmeyi tıklayarak not defterinden hiperparametre ayarıyla Kubeflow Pipelines çalıştırma
- Verilerinizi not defterinde ve her ardışık düzen adımında otomatik olarak sürüm oluşturma
Gerekenler
- Sahip izinlerine sahip olduğunuz etkin bir GCP projesi
Bu, Kubeflow'a odaklanan ileri düzey bir codelab'dir. Daha fazla bilgi ve platforma giriş için Introduction to Kubeflow (Kubeflow'a Giriş) dokümanına bakın. Alakalı olmayan kavramlar ve kod blokları işaretlenmiştir ve yalnızca kopyalayıp yapıştırmanız için paylaşılmıştır.
2. Ortamı ayarlama
GCP projenizi oluşturma
GCP projesi oluşturmak veya mevcut GCP projenizi yapılandırmak için aşağıdaki adımları uygulayın. Mevcut bir GCP projesini kullanmayı planlıyorsanız projenin aşağıda açıklanan minimum koşulları karşıladığından emin olun. İlk adım, GCP Console'da Resource Manager'ı açmaktır.
Yeni bir proje oluşturun veya mevcut bir projeyi seçin:

Aşağıdaki minimum koşulları karşıladığınızdan emin olun:
- Proje için sahip rolüne sahip olduğunuzdan emin olun.
- Projeniz için faturalandırmanın etkinleştirildiğinden emin olun.
- GCP ücretsiz katmanını veya 300 ABD doları kredili 12 aylık deneme süresini kullanıyorsanız ücretsiz katman yeterli kaynak sunmadığından MiniKF'nin varsayılan GCP yüklemesini çalıştıramayacağınızı unutmayın. Ücretli hesaba yükseltme yapmanız gerekir.
GCP projesi oluşturma konusunda daha fazla yardım için GCP belgelerine bakın.
GCP projenizi oluşturduktan sonra doğrudan MiniKF'yi yükleme talimatlarına gidin.
Önceden ayrılmış GCP projenizi açın.
Önceden ayrılmış GCP projenizi açmak için aşağıdaki düğmeyi tıklayarak GCP Console'u ziyaret edin ve sol üstteki hamburger menüsünde bulunan Ana Sayfa panelini açın. Ekran boşsa gösterge tablosu oluşturmak için istemde Evet'i tıklayın.

Proje henüz seçilmediyse Proje seçin'i tıklayın:

Projenizi seçin. Yalnızca bir tane olmalıdır:

3. MiniKF'yi yükleme
MiniKF'nin dahil olduğu bir Compute örneği oluşturma
GCP Marketplace'te "MiniKF"yi arayın.
Arrikto tarafından sunulan MiniKF sanal makinesini seçin:

BAŞLAT düğmesini tıklayın ve projenizi seçin:

Yapılandır ve Dağıt penceresinde, MiniKF örneğiniz için bir ad ve bölge seçin ve varsayılan seçenekleri değiştirmeyin. Ardından Dağıt düğmesini tıklayın:

MiniKF Compute örneğinin başlatılmasını bekleyin:

MiniKF'ye giriş yapma
MiniKF VM başlatıldığında SSH düğmesini tıklayarak bağlanın ve giriş yapın. Minikube, Kubeflow ve Rok'un dağıtımını başlatacak olan minikf komutunu çalıştırmak için ekrandaki talimatları uygulayın. Bu işlemin tamamlanması birkaç dakika sürer.

Kubeflow'a giriş yapma
Yükleme tamamlandığında ve tüm pod'lar hazır olduğunda MiniKF kontrol panelini ziyaret edin. MiniKF kullanıcı adını ve şifresini kullanarak Kubeflow'a giriş yapın:


Chrome kullanıcıları şu ekranı görür:

Firefox kullanıcıları şu ekranı görür:

Safari kullanıcıları şu ekranı görür:

Rok'a giriş yapma
Kubeflow'a giriş yaptıktan sonra hamburger simgesini tıklayarak sol menüyü açın. Snapshots'ı tıklayın ve MiniKF kullanıcı adı ile şifresini kullanarak Rok'a giriş yapın.


Tebrikler! MiniKF'yi GCP'ye başarıyla dağıttınız. Artık not defterleri oluşturabilir, makine öğrenimi kodunuzu yazabilir, Kubeflow Pipelines'ı çalıştırabilir ve veri sürümü oluşturma ile yeniden üretilebilirlik için Rok'u kullanabilirsiniz.
4. Not defterinizden ardışık düzen çalıştırma
Bu bölümde, Udacity AI Nanodegree'deki bir proje olan Köpek Cinsi Tanımlama örneğini çalıştıracaksınız. Son model, köpek resmi verildiğinde köpeğin cinsini tahmin eder.
Kubeflow kümenizde not defteri sunucusu oluşturma
Kubeflow merkezi kontrol panelinde Notebooks (Not Defterleri) bağlantısına gidin.

New Server'ı (Yeni Sunucu) tıklayın.

Not defteri sunucunuz için bir ad belirtin.

Aşağıdaki Docker görüntüsünü seçtiğinizden emin olun (Görüntü etiketinin farklı olabileceğini unutmayın):
gcr.io/arrikto/jupyter-kale:f20978e
5 GB boyutunda yeni ve boş bir veri birimi ekleyin ve bu birime data adını verin.

Not defteri sunucusunu oluşturmak için Launch'u (Başlat) tıklayın.

Not defteri sunucusu kullanıma hazır olduğunda Bağlan'ı tıklayarak sunucuya bağlanın.

Verileri ve not defterini indirme
JupyterLab açılış sayfasının bulunduğu yeni bir sekme açılır. JupyterLab'de yeni bir terminal oluşturun.

Terminal penceresinde, data klasörüne gitmek ve laboratuvarın geri kalanında kullanacağınız not defterini ve verileri indirmek için şu komutları çalıştırın:
cd data/ git clone https://github.com/kubeflow-kale/kale
Klonlanan depoda, veriler ve not eklenmiş not defterleriyle birlikte bir dizi seçilmiş örnek bulunur.
Kenar çubuğunda data/kale/examples/dog-breed-classification/ klasörüne gidin ve dog-breed.ipynb not defterini açın.

Köpek Cinsi Tanımlama örneğinin makine öğrenimi kodunu inceleme
Şu an için, yeni kopyaladığınız depoda bulunan daha küçük veri kümelerini kullanacağınızdan veri kümelerini indiren hücreleri çalıştırmayın. Bu örneği evde kendi hızınızda çalıştırıyorsanız veri kümelerini indirebilirsiniz.
Gerekli tüm kitaplıkları içe aktarmak için imports hücresini çalıştırın. Bir kitaplık eksik olduğundan kodun başarısız olduğunu unutmayın:

Normalde, bu not defterini yeni yüklenen kitaplıkları da içerecek şekilde Kubeflow işlem hattı olarak çalıştırabilmek için yeni bir Docker görüntüsü oluşturmanız gerekir. Neyse ki Rok ve Kale, geliştirme sırasında yüklediğiniz kitaplıkların Rok'un anlık görüntü teknolojisi ve Kale'nin bu anlık görüntülenmiş birimleri işlem hattı adımlarına monte etmesi sayesinde işlem hattınıza ulaşmasını sağlar.
Eksik kitaplığı yüklemek için sonraki hücreyi çalıştırın:

Yeniden başlat simgesini tıklayarak not defteri çekirdeğini yeniden başlatın:

imports hücresini doğru kitaplıklar yüklü şekilde tekrar çalıştırın ve başarılı olduğunu görün.
Not defterinizi Kubeflow Pipelines'da ardışık düzene dönüştürme
Not defterinin sol bölmesindeki Kubeflow simgesini tıklayarak Kale'i etkinleştirin:

Kale Deployment Panel'deki kaydırma çubuğunu tıklayarak Kale'i etkinleştirin:

Not defterindeki hücre başına bağımlılıkları keşfedin. Birden fazla not defteri hücresinin tek bir işlem hattı adımının parçası olabileceğini (hücrelerin solundaki renk çubuklarıyla gösterilir) ve bir işlem hattı adımının önceki adımlara bağlı olabileceğini (hücrelerin üzerindeki bağlıdır etiketleriyle gösterilir) inceleyin. Örneğin, aşağıdaki resimde aynı işlem hattı adımının parçası olan birden fazla hücre gösterilmektedir. Aynı kırmızı renge sahiptirler ve önceki bir işlem hattı adımına bağlıdırlar.

Derle ve Çalıştır düğmesini tıklayın:

Artık Kale, not defterinizi Kubeflow Pipelines ardışık düzenine dönüştürerek oluşturur. Ayrıca, Kale mevcut not defterinin veri hacminin anlık görüntülerini almak için Rok ile entegre olduğundan anlık görüntünün ilerleme durumunu izleyebilirsiniz. Rok, veri sürüm oluşturma ve Derle ve Çalıştır düğmesini tıkladığınız zamanki gibi tüm ortamı yeniden oluşturma işlemlerini yapar. Bu sayede, verileriniz ve kodunuz için bir zaman makineniz olur. Ayrıca, yeni Docker görüntüleri oluşturmanıza gerek kalmadan, kodunuzu geliştirdiğiniz ortamda işlem hattınız çalışır.

Ardışık düzen derlenip Kubeflow Pipelines'a yüklendi. Şimdi bağlantıyı tıklayarak Kubeflow Pipelines kullanıcı arayüzüne gidin ve çalıştırmayı görüntüleyin.

Kubeflow Pipelines kullanıcı arayüzü yeni bir sekmede açılır. Çalıştırmanın tamamlanmasını bekleyin.


Tebrikler! Az önce Kubeflow Pipelines'da not defterinizden başlayarak uçtan uca bir ardışık düzen çalıştırdınız.
5. Hiperparametre ayarı ile transfer öğrenimi
Sonuçları inceleme
cnn-from-scratch adımının günlüklerine göz atın. (Kubeflow Pipelines kullanıcı arayüzündeki grafikte adımı, ardından Günlükler sekmesini tıklayın.) Bu adımda, evrişimli nöral ağı (CNN) sıfırdan eğittiniz. Eğitilen modelin doğruluğunun çok düşük olduğunu ve bu adımın tamamlanmasının uzun sürdüğünü fark edeceksiniz.

cnn-vgg16 adımının günlüklerine göz atın. Bu adımda, önceden eğitilmiş VGG-16 modelinde (Visual Geometry Group (VGG) tarafından eğitilmiş bir sinir ağı) transfer öğrenimi kullandınız. Doğruluk oranı önceki modele göre çok daha yüksek olsa da daha iyisini yapabiliriz.

Şimdi cnn-resnet50 adımının günlüklerine göz atın. Bu adımda, önceden eğitilmiş ResNet-50 modelinde transfer öğrenimi kullandınız. Doğruluk oranı çok daha yüksektir. Bu nedenle, bu codelab'in geri kalanında bu modeli kullanacaksınız.

Hiperparametre ayarı
Kubeflow kullanıcı arayüzünüzde not defteri sunucusuna geri dönün ve dog-breed-katib.ipynb adlı not defterini açın (data/kale/examples/dog-breed-classification/ yolunda). Bu not defterinde, Katib'i kullanarak ResNet-50 modelinde bazı hiperparametre ayarlama denemeleri yapacaksınız. Not defterinin başında parametreleri tanımlamak için bir hücre olduğunu unutmayın:

Hiperparametre ayarlamayı çalıştırmak için not defterinin sol bölmesinde Katib ile HP ayarlama'yı etkinleştirin:

Ardından Katib'i yapılandırmak için Katib işi oluştur'u tıklayın:

Her parametre için arama alanını ve bir hedefi tanımlayın:

Compile and Run Katib Job (Katib İşi Derle ve Çalıştır) düğmesini tıklayın:

Katib denemesinin ilerleme durumunu izleyin:

Katib denemesini görmek için Görüntüle'yi tıklayın:

Çalıştırmaları Kubeflow Pipelines'da (KFP) görmek için Bitti'yi tıklayın:

Katib deneme sayfasında yeni denemeleri görürsünüz:

KFP kullanıcı arayüzünde ise yeni çalıştırmaları görürsünüz:

Şimdi, olanları inceleyelim. Daha önce bir not defterinden bir işlem hattı çalıştırması oluşturan Kale, artık her biri farklı bir bağımsız değişken kombinasyonuyla beslenen birden fazla işlem hattı çalıştırması oluşturuyor.
Katib, Kubeflow'un genel amaçlı hiperparametre ayarlama işlerini çalıştırmak için kullanılan bileşenidir. Katib, aslında çalıştırdığı işler (Katib jargonunda deneme olarak adlandırılır) hakkında hiçbir şey bilmez. Kale'nin ilgilendiği tek şey arama alanı, optimizasyon algoritması ve hedeftir. Katib, basit işlerin (yani kapsüllerin) deneme olarak çalıştırılmasını destekler ancak Kale, denemelerin Kubeflow Pipelines'da ardışık düzenler olarak çalıştırılması ve ardından ardışık düzen çalıştırmalarından metriklerin toplanması için bir ara katman uygular.
Katib denemesi denemeler oluşturduğundan Katib kullanıcı arayüzünde daha fazla deneme görürsünüz:

KFP kullanıcı arayüzünde daha fazla çalıştırma:

Katib denemesi tamamlandığında tüm denemeleri Katib kullanıcı arayüzünde görüntüleyebilirsiniz:

Ayrıca KFP kullanıcı arayüzündeki tüm çalıştırmalar:

Not Defteri'ne geri dönerseniz Kale panelinde Katib denemesinin hemen yanında bir bilgi düğmesi görürsünüz:

İstemi tıkladığınızda en iyi sonucu ve bu sonucu üreten parametreleri görürsünüz:

6. Temizleme
MiniKF VM'sini yok etme
GCP Console'da Deployment Manager'a gidin ve minikf-on-gcp dağıtımını silin.
7. Tebrikler
Tebrikler! Kubeflow (MiniKF), Kale ve Rok kullanarak uçtan uca bir veri bilimi iş akışını başarıyla çalıştırdınız.
Yapabilecekleriniz
Kubeflow topluluğuna katılın:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- Haftalık topluluk görüşmesi, Slack ve diğer topluluk ayrıntıları
