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

1. Giriş

Kubeflow, Kubernetes için kullanılan bir makine öğrenimi araç setidir. Projenin amacı, Kubernetes'te makine öğrenimi (ML) iş akışlarının dağıtımlarını basit, taşınabilir ve ölçeklenebilir hale getirmektir. Amaç, çeşitli altyapılara makine öğrenimi için sınıfının en iyisi açık kaynak sistemleri dağıtmanın basit bir yolunu sunmaktır.

Kubeflow dağıtımı nasıldır?

Kubeflow dağıtımı:

  • Taşınabilir: Google Cloud Platform'da (GCP), şirket içinde veya sağlayıcılar arasında bulunan tüm Kubernetes kümelerinde çalışır.
  • Ölçeklenebilir: Dalgalanan kaynakları kullanabilir ve yalnızca Kubernetes kümesine ayrılan kaynak sayısıyla sınırlandırılır.
  • Oluşturulabilir: Özel olarak seçilmiş makine öğrenimi çerçeveleri ve kitaplıkları arasından seçim yaparak eksiksiz bir makine öğrenimi iş akışında bağımsız adımlar yapılandırmanızı sağlar.

Kubeflow, serbest bağlantılı mikro hizmetleri tek bir birim olarak düzenleme ve dizüstü bilgisayar, şirket içi veya bulut gibi çeşitli konumlara dağıtma olanağı sunar.

Bu codelab'de, MiniKF'yi kullanarak kendi Kubeflow dağıtımınızı oluşturma, ardından model eğitmek ve sunmak için hiperparametre ayarı ile Kubeflow Pipelines iş akışını çalıştırma adımları açıklanmaktadır. Tüm bunları bir Jupyter Notebook'un içinden yapabilirsiniz.

Oluşturacaklarınız

Bu codelab'de, herhangi bir CLI komutu veya SDK kullanmadan Kubeflow Pipelines'da hiperparametre ayarı yaparak karmaşık bir veri bilimi ardışık düzeni derleyeceksiniz. Kubernetes veya Docker bilgisine sahip olmanız gerekmez. Bu işlemin ardından altyapınız şunları içerecektir:

  • Aşağıdakileri otomatik olarak yükleyen bir MiniKF (Mini Kubeflow) sanal makinesi:
  • Kubernetes (Minikube kullanan)
  • Kubeflow
  • Genel amaçlı Jupyter Notebooks'u Kubeflow Pipelines iş akışlarına dönüştürmek için kullanılan Kale aracı ( GitHub)
  • Veri sürümü oluşturma ve yeniden oluşturulabilirlik için Arrikto Rok

Neler öğreneceksiniz?

  • Kubeflow'u MiniKF ile yükleme
  • CLI komutu veya SDK kullanmadan Jupyter not defterlerinizi Kubeflow Pipelines'a dönüştürme
  • Kubeflow Pipelines'ı tek bir tıklamayla not defterinin içinden hiperparametre ayarıyla çalıştırma
  • Not defterinde ve her ardışık düzen adımında verilerinizi otomatik olarak sürüm oluşturma

Gerekenler

  • Sahip izinlerine sahip olduğunuz etkin bir GCP projesi

Bu, Kubeflow'a odaklanan gelişmiş bir codelab'dir. Daha fazla bilgi ve platforma giriş için Introduction to Kubeflow (Kubeflow'a Giriş) belgelerine bakın. Alakalı olmayan kavramlar ve kod blokları vurgulanır ve kolayca kopyalayıp yapıştırmanız için sunulur.

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 gereksinimleri karşıladığından emin olun. İlk adım, GCP Console'da kaynak yöneticisini açmaktır.

Yeni proje oluşturun veya mevcut bir projeyi seçin:

99b103929d928576.png

Aşağıdaki minimum gereksinimleri kontrol edin:

GCP projesi oluşturma konusunda daha fazla yardım almak için GCP belgelerini inceleyin.

GCP projenizi oluşturduktan sonra, doğrudan MiniKF'yi yükleme talimatlarına gidin.

Önceden tahsis edilmiş GCP projenizi açma

Önceden tahsis edilen GCP projenizi açmak için aşağıdaki düğmeyi tıklayarak GCP Console'u ziyaret edin ve sol üstteki hamburger menüde yer alan Ana Sayfa panelini açın. Ekran boşsa bir kontrol paneli oluşturmak için istemdeki Evet'i tıklayın.

3fdc4329995406a0.png

Proje seçili değilse Select a project'i (Proje seç) tıklayın:

e8952c0b96067dea.png

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

fe25c1925487142.png

3. MiniKF'yi yükle

MiniKF dahil bir Compute örneği oluşturma

GCP Marketplace'te "MiniKF" araması yapın.

Arrikto'nun MiniKF sanal makinesini seçin:

d6b423c1911ea85a.png

LANSMAN düğmesini tıklayın ve projenizi seçin:

7d07439db939b61c.png

Yapılandır ve Deploy (Dağıt) penceresinde MiniKF örneğiniz için bir ad ve alt bölge seçip varsayılan seçenekleri olduğu gibi bırakın. Ardından Dağıt düğmesini tıklayın:

7d5f7d17a80a1930.png

MiniKF Compute örneğinin yüklenmesini bekleyin:

5228086caadc44c6.png

MiniKF'ye giriş yap

MiniKF sanal makinesi kurulduğunda bağlanıp SSH düğmesini tıklayarak giriş yapın. Ekrandaki talimatları uygulayarak minikf komutunu çalıştırarak Minikube, Kubeflow ve Rok'un dağıtımını başlatın. Bu işlemin tamamlanması birkaç dakika sürer.

774e83c3e96cf7b3.png

Kubeflow'a giriş yapın

Yükleme tamamlandığında ve tüm kapsüller hazır olduğunda MiniKF kontrol panelini ziyaret edin. MiniKF kullanıcı adı ve şifresiyle 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ş yapın

Kubeflow'a giriş yaptıktan sonra hamburger simgesini tıklayarak soldaki menüyü açın. Snapshots'ı (Anlık Görüntüler) tıklayın, ardından MiniKF kullanıcı adı ve şifresiyle Rok'a giriş yapın.

16171f35a935a9af.png

80aad6ba5d298a7e.png

Tebrikler! MiniKF'yi GCP'de başarıyla dağıttınız. Artık not defterleri oluşturabilir, makine öğrenimi kodunuzu yazabilir, Kubeflow Pipelines'ı çalıştırabilir, veri sürümü oluşturma ve yeniden üretilebilirlik için Rok'u kullanabilirsiniz.

4. Not defterinizin içinden ardışık düzen çalıştırma

Bu bölümde, Udacity AI Nanodegree projesindeki Köpek Türü Tanımlama örneğini yürüteceksiniz. Bir köpeğin resmi dikkate alındığında, son model köpeğin cinsine ilişkin bir tahmin sağlayacaktır.

Kubeflow kümenizde not defteri sunucusu oluşturma

Kubeflow merkezi kontrol panelindeki Notebooks 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ılık gösterebileceğini unutmayın):

gcr.io/arrikto/jupyter-kale:f20978e

5 GB boyutunda yeni ve boş bir veri hacmi ekleyip veri olarak adlandırın.

8544d9b05826b316.png

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

28c024bcc55cc70a.png

Not defteri sunucusu kullanılabilir olduğunda sunucuya bağlanmak için Bağlan'ı tıklayın.

52f1f8234988ceaa.png

Verileri ve not defterini indirme

JupyterLab açılış sayfasıyla yeni bir sekme açılır. JupyterLab'de yeni bir terminal oluşturun.

ab9ac96f1a1f0d09.png

Terminal penceresinde, data klasörüne gidip 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 depo, verilerin ve ek açıklamalı not defterlerinin yer aldığı bir dizi seçilmiş örnek içerir.

Kenar çubuğundan data/kale/examples/dog-breed-classification/ klasörüne gidin ve dog-breed.ipynb not defterini açın.

2bc436465522f65b.png

Köpek Irkı Tanımlama örneğinin ML kodunu inceleyin

Şu an için, veri kümelerini indiren hücreleri çalıştırmayın. Çünkü, klonladığınız depoda yer alan bazı daha küçük veri kümelerini kullanacaksınız. Bu örneği evinizde 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 Notebook'u yeni yüklenen kitaplıkları dahil etmek üzere bir Kubeflow ardışık düzeni olarak çalıştırabilmek için yeni bir Docker görüntüsü oluşturmanız gerekir. Neyse ki Rok ve Kale, Rok'un anlık görüntü teknolojisi ve Kale'nin anlık olarak alınan bu birimleri ardışık düzen adımlarına eklemesi sayesinde geliştirme sırasında yüklediğiniz kitaplıkların ardışık düzeninize yerleştirilmesini sağlıyor.

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

Doğru kitaplıkları yükleyerek imports hücresini tekrar çalıştırın ve başarılı bir şekilde izleyin.

Not defterinizi Kubeflow Pipelines'da bir ardışık düzene dönüştürme

Not defterinin sol bölmesindeki Kubeflow simgesini tıklayarak Kale'yi etkinleştirin:

7b96241f2ab6c389.png

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

804cfbf9d76b7e23.png

Not defterindeki hücre başına bağımlılıkları keşfedin. Birden çok not defteri hücresinin, hücrelerin solundaki renk çubuklarıyla belirtildiği gibi tek bir ardışık düzen adımının parçası olabileceğini ve hücrelerin üzerindeki etiketlere bağlı olarak belirtildiği gibi, bir ardışık düzen adımının önceki adımlara nasıl bağlı olabileceğini öğrenin. Örneğin, aşağıdaki resimde aynı ardışık düzen adımının parçası olan birden çok hücre gösterilmektedir. Bunlar aynı kırmızı renge sahiptir ve önceki bir ardışık düzen adımına bağlıdır.

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

Kale artık not defterinizi Kubeflow Pipelines ardışık düzenine dönüştürüp not defterinizi oluşturuyor. Ayrıca Kale, mevcut not defterinin veri hacminin anlık görüntüsünü almak için Rok ile entegre olduğundan anlık görüntünün ilerleme durumunu izleyebilirsiniz. Rok, veriler için sürüm oluşturma ve tüm ortamı yeniden oluşturma işlemlerini Derle ve Çalıştır düğmesini tıkladığınızda olduğu gibi yapar. Böylece, verileriniz ve kodunuz için bir zaman makineniz olur ve ardışık düzeniniz, yeni Docker görüntüleri derlemenize gerek kalmadan kodunuzu geliştirdiğiniz ortamda çalışır.

de1b88af76df1a9a.png

Ardışık düzen derlendi ve 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. Koşunun bitmesini bekleyin.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

Tebrikler! Not defterinizden başlayarak Kubeflow Pipelines'da uçtan uca bir ardışık düzen çalıştırdınız.

5. Hiperparametre ayarı ile öğrenmeyi aktarma

Sonuçları inceleme

cnn-from-scratch adımı günlüklerine göz atın. (Kubeflow Pipelines kullanıcı arayüzündeki grafikte yer alan adımı, ardından Logs (Günlükler) sekmesini tıklayın.) Bu, konvolüsyonel nöral ağı (CNN) sıfırdan eğittiğiniz adımdır. Eğitilen modelin doğruluk oranının çok düşük olduğunu ve bu adımın tamamlanmasının uzun sürdüğünü görebilirsiniz.

62bf0835e9896c67.png

cnn-vgg16 adımının günlüklerine göz atın. Bu adımda, Visual Geometry Group (VGG) tarafından eğitilen bir nöral ağ olan önceden eğitilmiş VGG-16 modelinde aktarım öğrenmesini kullandınız. Doğruluk, önceki modelden çok daha yüksek olsa da daha iyisini sunabiliriz.

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 aktarımla öğrenmeyi 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 (data/kale/examples/dog-breed-classification/ yolunda) açın. Bu not defterinde, Katib'i kullanarak ResNet-50 modeli üzerinde bazı hiperparametre ayarı denemeleri çalıştıracaksınız. Not defterinin başında parametreleri tanımlamak için tek bir hücre olduğuna dikkat edin:

87b9f6c98dc1823e.png

Hiperparametre ayarını çalıştırmak için not defterinin sol bölmesinde Katib ile HP Tuning'i etkinleştirin:

a518eba74d341139.png

Ardından Katib'i yapılandırmak için Katib İşini ayarla'yı tıklayın:

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

Katib denemesinin ilerlemesini izleyin:

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

Katib deneme sayfasında yeni denemeleri göreceksiniz:

a511dca519580133.png

Ayrıca KFP kullanıcı arayüzünde yeni çalıştırmaları göreceksiniz:

43dd34ee2b75018d.png

Az önce olanları açalım. Kale daha önce not defterinden ardışık düzen çalıştırması üretirken şimdi de her biri farklı bağımsız değişken kombinasyonlarıyla beslenen birden fazla ardışık düzen çalıştırması oluşturuyor.

Katib, Kubeflow'un genel amaçlı hiperparametre ayarı işlerini çalıştırmaya yarayan bileşenidir. Katib, yürüttüğü işler hakkında hiçbir bilgiye sahip değil (Katib jargonunda denemeler olarak adlandırıldı). Kale'nin ilgilendiği tek şey arama alanı, optimizasyon algoritması ve hedef. Katib, deneme olarak basit İşlerin (Kapsüllerin) çalıştırılmasını destekler ancak Kale, denemelerin Kubeflow Pipelines'da ardışık düzenlerini çalıştırmasını ve ardından ardışık düzen çalıştırmalarından metrikleri toplamasını sağlamak için bir dolgu uygular.

Katib denemesi deneme üretirken Katib kullanıcı arayüzünde daha fazla deneme göreceksiniz:

3e854d3d4bb766c.png

KFP kullanıcı arayüzünde başka çalıştırma işlemleri de yapılır:

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

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

95b092180d71dc80.png

Bunu tıkladığınızda en iyi sonucu ve bunu üreten parametreleri görürsünüz:

3b0ce47e548e5afb.png

6. Temizleme

MiniKF sanal makinesini kaldır

GCP Console'da Deployment Manager'a gidin ve minikf-on-gcp dağıtımını silin.

7. Tebrikler

Tebrikler! Kubeflow (MiniKF), Kale ve Rok'u kullanarak uçtan uca veri bilimi iş akışını başarıyla çalıştırdınız.

Sırada ne var?

Kubeflow topluluğuna katılın:

Daha fazla bilgi