HP Tuning ile Notebook'tan Kubeflow Pipelines'a: Veri Bilimi Yolculuğu

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:

99b103929d928576.png

Aşağıdaki minimum koşulları karşıladığınızdan emin olun:

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.

.

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

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:

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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:

7d5f7d17a80a1930.png

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

5228086caadc44c6.png

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.

774e83c3e96cf7b3.png

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:

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

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

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

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.

16171f35a935a9af.png

80aad6ba5d298a7e.png

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.

60825e935fd0f39b.png

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

f9303c0a182e47f5.png

Not defteri sunucunuz için bir ad belirtin.

a2343f30bc9522ab.png

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.

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

52f1f8234988ceaa.png

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.

ab9ac96f1a1f0d09.png

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.

2bc436465522f65b.png

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:

5e2b97ab2512f139.png

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:

c483da77943a6f01.png

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

376b5203209c2c91.png

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:

7b96241f2ab6c389.png

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

804cfbf9d76b7e23.png

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.

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

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.

de1b88af76df1a9a.png

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.

e0b467e2e7034b5d.png

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

21a9d54a57f3e20c.png

39e6fa39516d2773.png

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.

62bf0835e9896c67.png

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.

2b45072da65e20ae.png

Ş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.

a1dc84ea48a87820.png

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:

87b9f6c98dc1823e.png

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

a518eba74d341139.png

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

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

Katib denemesinin ilerleme durumunu izleyin:

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

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

a511dca519580133.png

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

43dd34ee2b75018d.png

Ş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:

3e854d3d4bb766c.png

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

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

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

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

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:

Daha fazla bilgi