Od notatnika do Kubeflow Pipelines z HP Tuning: A Data Science Journey

1. Wprowadzenie

Kubeflow to zestaw narzędzi systemów uczących się dla Kubernetes. Celem tego projektu jest uproszczenie wdrożeń przepływów pracy systemów uczących się w Kubernetes – w prosty, przenośny i skalowalny sposób. Celem jest zapewnienie prostego sposobu wdrażania najlepszych w swojej klasie systemów open source na potrzeby systemów uczących się w różnych infrastrukturach.

Jak wygląda wdrożenie Kubeflow?

Wdrożenie Kubeflow:

  • Przenośny – działa w dowolnym klastrze Kubernetes, niezależnie od tego, czy znajduje się w Google Cloud Platform (GCP), lokalnie czy u różnych dostawców.
  • Skalowalność – możliwość korzystania z zasobów zmieniających się i ograniczenia jedynie liczby zasobów przydzielonych do klastra Kubernetes.
  • Kompozycyjne – umożliwia skonfigurowanie niezależnych kroków w pełnym przepływie pracy ML przy użyciu wyselekcjonowanego zestawu bibliotek i platform systemów uczących się.

Kubeflow umożliwia zorganizowanie luźno połączonych mikroserwisów jako pojedynczą jednostkę i wdrożenie ich w różnych lokalizacjach, na przykład na laptopie, lokalnym lub w chmurze.

Dzięki temu ćwiczeniu w Codelabs dowiesz się, jak utworzyć własne wdrożenie Kubeflow za pomocą MiniKF, a następnie uruchomić przepływ pracy Kubeflow Pipelines z dostrajaniem hiperparametrów w celu trenowania i obsługi modelu. Wszystkie te czynności wykonujesz z poziomu notatnika Jupyter.

Co utworzysz

W ramach tego ćwiczenia w Codelabs utworzysz złożony potok badania danych z dostrajaniem hiperparametrów w Kubeflow Pipelines bez użycia poleceń interfejsu wiersza poleceń ani pakietów SDK. Nie musisz znać się na Kubernetes ani Dockerze. Po ukończeniu instalacji infrastruktura będzie zawierać:

  • Maszyna wirtualna MiniKF (Mini Kubeflow), która instaluje się automatycznie:
  • Kubernetes (przy użyciu Minikube)
  • Kubeflow
  • Kale – narzędzie do konwertowania notatników Jupyter ogólnego przeznaczenia na przepływy pracy Kubeflow Pipelines ( GitHub)
  • Arrikto Rok w celu obsługi wersji i odtwarzania danych

Czego się nauczysz

  • Jak zainstalować Kubeflow z MiniKF
  • Jak przekonwertować notatniki Jupyter na Kubeflow Pipelines bez użycia poleceń interfejsu wiersza poleceń lub pakietów SDK
  • Jak uruchamiać Kubeflow Pipelines z dostrajaniem hiperparametrów z poziomu notatnika jednym kliknięciem przycisku
  • Jak automatycznie tworzyć wersje danych w notatniku i w każdym kroku potoku

Czego potrzebujesz

  • aktywny projekt GCP, w którym masz uprawnienia właściciela.

To jest zaawansowane ćwiczenia z programowania dotyczące Kubeflow. Więcej informacji na ten temat i wprowadzenie do platformy znajdziesz w dokumentacji Introduction to Kubeflow (Wprowadzenie do Kubeflow). Nieistotne koncepcje i bloki kodu zostały zamaskowane. Można je po prostu skopiować i wkleić.

2. Konfigurowanie środowiska

Konfigurowanie projektu GCP

Aby utworzyć nowy projekt GCP lub skonfigurować istniejący projekt GCP, wykonaj czynności opisane poniżej. Jeśli planujesz użyć istniejącego projektu GCP, sprawdź, czy spełnia on minimalne wymagania opisane poniżej. Pierwszym krokiem jest otwarcie menedżera zasobów w konsoli GCP.

Utwórz nowy projekt lub wybierz istniejący:

99b103929d928576.png

Musisz spełnić te minimalne wymagania:

  • Sprawdź, czy masz rolę właściciela projektu.
  • Sprawdź, czy w projekcie są włączone płatności.
  • Jeśli korzystasz z poziomu bezpłatnego GCP lub 12-miesięcznego okresu próbnego z środkami w wysokości 300 USD, pamiętaj, że nie możesz uruchomić domyślnej instalacji MiniKF w GCP, ponieważ poziom bezpłatny nie zapewnia wystarczającej ilości zasobów. Musisz przejść na płatne konto.

Więcej informacji o konfigurowaniu projektu GCP znajdziesz w dokumentacji GCP.

Po skonfigurowaniu projektu GCP przejdź bezpośrednio do instrukcji instalowania MiniKF.

Otwieranie wstępnie przydzielonego projektu GCP

Jeśli chcesz otworzyć wstępnie przydzielony projekt GCP, kliknij przycisk poniżej, aby przejść do konsoli GCP i otworzyć panel główny, który znajdziesz w menu z 3 kreskami w lewym górnym rogu. Jeśli ekran jest pusty, kliknij Tak w komunikacie, aby utworzyć panel.

3fdc4329995406a0.png

Jeśli projekt nie został jeszcze wybrany, kliknij Select a project (Wybierz projekt):

e8952c0b96067dea.png

Wybierz projekt. Powinien być tylko jeden:

fe25c1925487142.png

3. Zainstaluj MiniKF

Tworzenie instancji Compute zawierającej MiniKF

W GCP Marketplace wyszukaj „MiniKF”.

Wybierz maszynę wirtualną MiniKF firmy Arrikto:

d6b423c1911ea85a.png

Kliknij przycisk URUCHOM i wybierz projekt:

7d07439db939b61c.png

W sekcji Konfiguracja & Okno wdrażania, wybierz nazwę i strefę dla instancji MiniKF, a następnie pozostaw opcje domyślne. Następnie kliknij przycisk Wdróż:

7d5f7d17a80a1930.png

Poczekaj na uruchomienie instancji MiniKF Compute:

5228086caadc44c6.png

Zaloguj się w MiniKF

Gdy maszyna wirtualna MiniKF będzie działać, połącz się i zaloguj, klikając przycisk SSH. Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby uruchomić polecenie minikf, które spowoduje rozpoczęcie wdrażania minikube, Kubeflow i Rok. Ich wykonanie może potrwać kilka minut.

774e83c3e96cf7b3.png

Zaloguj się w Kubeflow

Gdy instalacja się zakończy i wszystkie pody będą gotowe, przejdź do pulpitu MiniKF. Zaloguj się w Kubeflow przy użyciu nazwy użytkownika i hasła MiniKF:

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Użytkownicy Chrome zobaczą ten ekran:

6258e0f09e46a6c2.png

Użytkownicy Firefoksa zobaczą ten ekran:

8cff90ce2f0670bd.png

Użytkownicy przeglądarki Safari zobaczą ten ekran:

1c6fd768d71c0a92.png

Zaloguj się w Roku

Po zalogowaniu się w Kubeflow otwórz menu po lewej stronie, klikając ikonę hamburgera. Kliknij Snapshots (Zrzuty) i zaloguj się w Roku przy użyciu nazwy użytkownika i hasła MiniKF.

16171f35a935a9af.png

80aad6ba5d298a7e.png

Gratulacje! Udało Ci się wdrożyć MiniKF w GCP. Teraz możesz tworzyć notatniki, pisać kod ML, uruchamiać Kubeflow Pipelines i używać Rok do obsługi wersji i odtwarzania danych.

4. Uruchamianie potoku z poziomu notatnika

W tej sekcji uruchomisz przykładową identyfikację ras psów, czyli projekt w ramach Udacity AI NanoStopni. Na podstawie zdjęcia psa końcowy model będzie określać jego rasę.

Tworzenie serwera notatników w klastrze Kubeflow

Otwórz link Notatniki w centralnym panelu Kubeflow.

60825e935fd0f39b.png

Kliknij New Server (Nowy serwer).

f9303c0a182e47f5.png

Podaj nazwę serwera notatników.

a2343f30bc9522ab.png

Sprawdź, czy został wybrany ten obraz Dockera (tag obrazu może być inny):

gcr.io/arrikto/jupyter-kale:f20978e

Dodaj nowy, pusty wolumin o rozmiarze 5 GB i nadaj mu nazwę dane.

8544d9b05826b316.png

Kliknij Uruchom, aby utworzyć serwer notatników.

28c024bcc55cc70a.png

Gdy serwer notatników będzie dostępny, kliknij Połącz, aby się z nim połączyć.

52f1f8234988ceaa.png

Pobierz dane i notatnik

Otworzy się nowa karta ze stroną docelową JupyterLab. Utwórz nowy terminal w JupyterLab.

ab9ac96f1a1f0d09.png

W oknie terminala uruchom te polecenia, aby przejść do folderu data i pobrać notatnik oraz dane, których będziesz używać do końca tego modułu:

cd data/
git clone https://github.com/kubeflow-kale/kale

Sklonowane repozytorium zawiera serię wybranych przykładów z danymi i notatnikami z adnotacjami.

Na pasku bocznym przejdź do folderu data/kale/examples/dog-breed-classification/ i otwórz notatnik dog-breed.ipynb.

2bc436465522f65b.png

Zapoznaj się z kodem ML przykładowym identyfikatorem rasy psów

Na razie nie uruchamiaj komórek, które pobierają zbiory danych, ponieważ będziesz korzystać z mniejszych zbiorów danych zawartych w sklonowanym właśnie repozytorium. Jeśli wykonujesz ten przykład we własnym tempie, możesz pobrać zbiory danych.

Uruchom kod z komórki imports, aby zaimportować wszystkie niezbędne biblioteki. Pamiętaj, że kod nie działa, ponieważ brakuje biblioteki:

5e2b97ab2512f139.png

Zwykle należy utworzyć nowy obraz Dockera, aby móc uruchomić ten notatnik jako potok Kubeflow i uwzględnić nowo zainstalowane biblioteki. Na szczęście Rok i Kale dbają o to, aby wszystkie biblioteki, które instalujesz w trakcie programowania, trafiły do Twojego potoku. Jest to możliwe dzięki technologii tworzenia zrzutów Rok i montowaniu takich woluminów w ramach potoku.

Uruchom następną komórkę, aby zainstalować brakującą bibliotekę:

c483da77943a6f01.png

Uruchom ponownie jądro notatnika, klikając ikonę Uruchom ponownie:

376b5203209c2c91.png

Uruchom kod z komórki imports jeszcze raz z zainstalowanymi poprawnymi bibliotekami i obserwuj wynik.

Konwertowanie notatnika na potok w Kubeflow Pipelines

Włącz Kale, klikając ikonę Kubeflow w lewym panelu notatnika:

7b96241f2ab6c389.png

Włącz Kale, klikając suwak w panelu wdrożenia Kale:

804cfbf9d76b7e23.png

Przejrzyj zależności między komórkami w notatniku. Zobacz, jak wiele komórek notatnika może być częścią jednego kroku potoku, na co wskazują kolorowe paski po lewej stronie komórek, i zobacz, jak krok potoku może zależeć od poprzednich kroków, co zależy od etykiet nad komórkami. Na przykład na obrazie poniżej widać wiele komórek, które są częścią tego samego kroku potoku. Mają ten sam czerwony kolor i są zależne od poprzedniego kroku potoku.

fcd0fb351cdfb359.png

Kliknij przycisk Kompiluj i uruchom:

18f2f6f0e12393d5.png

Teraz Kale przejmuje i buduje notatnik, konwertując go na potok Kubeflow Pipelines. Ponieważ Kale integruje się z Rokem w celu wykonywania zrzutów danych bieżącego notatnika, możesz obserwować postęp tworzenia zrzutu. Rok zajmuje się obsługą wersji danych i odtwarzaniem całego środowiska w takiej postaci, w jakiej było w momencie kliknięcia przycisku Kompiluj i uruchom. Dzięki temu będziesz mieć wehikuł czasu dla danych i kodu, a potok będzie działać w tym samym środowisku, w którym masz opracowany kod, bez konieczności tworzenia nowych obrazów Dockera.

de1b88af76df1a9a.png

Potok został skompilowany i przesłany do Kubeflow Pipelines. Teraz kliknij link, aby przejść do interfejsu Kubeflow Pipelines i wyświetlić uruchomienie.

e0b467e2e7034b5d.png

Interfejs Kubeflow Pipelines w nowej karcie. Poczekaj na zakończenie uruchomienia.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

Gratulacje! Właśnie udało Ci się uruchomić pełny potok w Kubeflow Pipelines, zaczynając od notatnika.

5. Przenoś naukę za pomocą dostrajania hiperparametrów

Sprawdzanie wyników

Spójrz na dzienniki kroku cnn-from-scratch. (w interfejsie Kubeflow Pipelines kliknij krok na wykresie, a następnie kliknij kartę Logs). Na tym etapie udało Ci się od zera wytrenować splotową sieć neuronowa (CNN). Zwróć uwagę, że wytrenowany model ma bardzo niską dokładność, a poza tym ten krok zajął dużo czasu.

62bf0835e9896c67.png

Przyjrzyj się logom wykonania kroku cnn-vgg16. W tym kroku wykorzystaliśmy uczenie się transferów na wytrenowanym modelu VGG-16 – sieci neuronowej wytrenowanej przez grupę Visual Geometry Group (VGG). Dokładność jest znacznie większa niż w poprzednim modelu, ale i tak możemy ją poprawić.

2b45072da65e20ae.png

Spójrz na dzienniki kroku cnn-resnet50. W tym kroku użyliśmy systemów uczących się na podstawie wytrenowanego modelu ResNet-50. Dokładność jest znacznie większa. Dlatego tego modelu użyjesz w pozostałej części tego ćwiczenia z programowania.

a1dc84ea48a87820.png

Dostrajanie hiperparametrów

Wróć do serwera notatników w interfejsie Kubeflow i otwórz notatnik o nazwie dog-breed-katib.ipynb (w ścieżce data/kale/examples/dog-breed-classification/). W tym notatniku przeprowadzisz eksperymenty dostrajania hiperparametrów na modelu ResNet-50 przy użyciu Katib. Zwróć uwagę, że na początku notatnika znajduje się 1 komórka do zadeklarowania parametrów:

87b9f6c98dc1823e.png

W lewym panelu notatnika włącz HP Tuning with Katib (Dostrajanie HP z Katib), aby uruchomić dostrajanie hiperparametrów:

a518eba74d341139.png

Następnie kliknij Skonfiguruj Katib Job, aby skonfigurować Katib:

f4e34fff6a93aa60.png

Zdefiniuj przestrzeń wyszukiwania dla każdego parametru oraz zdefiniuj cel:

cfc6b7bcdc685a02.png

Kliknij przycisk Skompiluj i uruchom zadanie Katib:

f9c1ab0a6a3c5e8d.png

Zobacz postęp eksperymentu Katib:

f3514011876564db.png

Kliknij Wyświetl, aby wyświetlić eksperyment Katib:

ab2f5a5edd48e8dc.png

Kliknij Gotowe, aby wyświetlić uruchomienia w Kubeflow Pipelines (KFP):

410a843b6f044a4b.png

Na stronie eksperymentu Katib zobaczysz nowe wersje próbne:

a511dca519580133.png

W interfejsie KFP zobaczysz nowe uruchomienia:

43dd34ee2b75018d.png

Sprawdźmy, co właśnie się wydarzyło. Wcześniej Kale utworzył uruchomienie potoku z notatnika, a teraz tworzy wiele uruchomień potoku, z których każde jest zasilane za pomocą innej kombinacji argumentów.

Katib to komponent Kubeflow do uruchamiania zadań dostrajania hiperparametrów ogólnego przeznaczenia. Katib nie wie nic o zadaniach, które rzeczywiście wykonuje (w żargonie Katib jest nazywane próbami). Jedyne, na czym skupia się Kale, to przestrzeń wyszukiwania, algorytm optymalizacji i cel. Katib obsługuje uruchamianie prostych zadań (czyli podów) jako prób, ale Kale stosuje podkładkę, aby testy rzeczywiście uruchamiały potoki w Kubeflow Pipelines, a następnie zbierały wskaźniki z uruchomień potoku.

W miarę pojawiania się wersji próbnych eksperymentu Katib zobaczysz więcej wersji w interfejsie Katib:

3E854d3d4bb766c.png

I inne uruchomienia w interfejsie KFP:

ffd30dcefa739962.png

Po zakończeniu eksperymentu Katib możesz wyświetlić wszystkie wersje próbne w interfejsie Katib:

9096ae9caa77e42a.png

Wszystkie uruchomienia w interfejsie KFP:

7acc64dfee4f35a3.png

Jeśli wrócisz do notatnika, zobaczysz przycisk informacji obok eksperymentu Katib w panelu Kale:

95b092180d71dc80.png

Kliknij ją, aby zapoznać się z najlepszym wynikiem oraz parametrami, które go wygenerowały:

3b0ce47e548e5afb.png

6. Czyszczenie danych

Zniszcz maszynę wirtualną MiniKF

W konsoli GCP otwórz menedżera wdrażania i usuń wdrożenie minikf-on-gcp.

7. Gratulacje

Gratulujemy! Udało Ci się ukończyć kompleksowy przepływ pracy związany z badaniem danych za pomocą Kubeflow (MiniKF), Kale i Rok.

Co dalej?

Dołącz do społeczności Kubeflow:

Więcej informacji