1. Wprowadzenie
| Kubeflow to zestaw narzędzi do uczenia maszynowego w Kubernetes. Projekt ten ma na celu uproszczenie, przenośność i skalowalność wdrażania przepływów pracy związanych z uczeniem maszynowym (ML) w Kubernetes. Celem jest zapewnienie prostego sposobu wdrażania najlepszych w swojej klasie systemów open source do uczenia maszynowego w różnych infrastrukturach. |
Jak wygląda wdrożenie Kubeflow?
Wdrożenie Kubeflow to:
- Przenośność – działa w dowolnym klastrze Kubernetes, niezależnie od tego, czy znajduje się on w Google Cloud Platform (GCP), lokalnie czy u innych dostawców.
- Skalowalność – może korzystać z różnych zasobów i jest ograniczony tylko liczbą zasobów przydzielonych do klastra Kubernetes.
- Modułowość – umożliwia skonfigurowanie niezależnych kroków w pełny przepływ pracy ML, wybierając z wyselekcjonowanego zestawu platform i bibliotek ML.
Kubeflow umożliwia organizowanie luźno powiązanych mikroserwisów jako pojedynczej jednostki i wdrażanie ich w różnych lokalizacjach, w tym na laptopie, lokalnie lub w chmurze.
W ramach tych ćwiczeń z programowania 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, aby wytrenować i obsługiwać model. Wszystko to możesz zrobić w notatniku Jupyter.
Co utworzysz
W tym module dowiesz się, jak utworzyć złożony potok do analizy danych z dostrajaniem hiperparametrów w Kubeflow Pipelines bez używania poleceń CLI ani pakietów SDK. Nie musisz mieć żadnej wiedzy o Kubernetes ani Dockerze. Po zakończeniu tego procesu Twoja infrastruktura będzie zawierać:
- Maszyna wirtualna MiniKF (Mini Kubeflow), która automatycznie instaluje:
- Kubernetes (z użyciem Minikube)
- Kubeflow
- Kale, narzędzie do konwertowania ogólnych notatników Jupyter na przepływy pracy Kubeflow Pipelines ( GitHub).
- Arrikto Rok do wersjonowania danych i odtwarzalności
Czego się nauczysz
- Jak zainstalować Kubeflow za pomocą MiniKF
- Jak przekonwertować notatniki Jupyter na potoki Kubeflow bez używania poleceń interfejsu wiersza poleceń ani pakietów SDK
- Jak uruchamiać potoki Kubeflow z dostrajaniem hiperparametrów z poziomu notatnika za pomocą jednego kliknięcia
- Automatyczne wersjonowanie danych w notatniku i na każdym etapie potoku
Czego potrzebujesz
- aktywny projekt GCP, do którego masz uprawnienia właściciela;
To zaawansowane ćwiczenie z programowania poświęcone Kubeflow. Więcej informacji i wprowadzenie do platformy znajdziesz w dokumentacji Wprowadzenie do Kubeflow. Nieistotne koncepcje i bloki kodu zostały pominięte. Można je po prostu skopiować i wkleić.
2. Konfigurowanie środowiska
Konfigurowanie projektu GCP
Aby utworzyć projekt GCP lub skonfigurować istniejący projekt GCP, wykonaj podane niżej czynności. Jeśli planujesz użyć istniejącego projektu GCP, upewnij się, że spełnia on minimalne wymagania opisane poniżej. Najpierw otwórz menedżera zasobów w konsoli GCP.
Utwórz nowy projekt lub wybierz już utworzony:

Sprawdź, czy spełniasz te wymagania minimalne:
- Sprawdź, czy masz rolę właściciela w projekcie.
- Sprawdź, czy w projekcie włączone są płatności.
- Jeśli korzystasz z bezpłatnego poziomu GCP lub 12-miesięcznego okresu próbnego z kredytem w wysokości 300 USD, pamiętaj, że nie możesz uruchomić domyślnej instalacji MiniKF w GCP, ponieważ bezpłatny poziom nie oferuje 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 instalacji MiniKF.
Otwórz wstępnie przydzielony projekt GCP
Aby otworzyć wstępnie przydzielony projekt GCP, kliknij przycisk poniżej, aby przejść do konsoli GCP i otworzyć panel Główna, który znajdziesz w menu z 3 kreskami u góry po lewej stronie. Jeśli ekran jest pusty, kliknij Tak w odpowiedzi na pytanie, czy chcesz utworzyć panel.

Jeśli projekt nie jest jeszcze wybrany, kliknij Wybierz projekt:

Wybierz projekt. Powinno być tylko jedno:

3. Instalowanie MiniKF
Tworzenie instancji obliczeniowej z MiniKF
W GCP Marketplace wyszukaj „MiniKF”.
Wybierz maszynę wirtualną MiniKF od Arrikto:

Kliknij przycisk URUCHOM i wybierz projekt:

W oknie Skonfiguruj i wdróż wybierz nazwę i strefę dla instancji MiniKF i pozostaw opcje domyślne. Następnie kliknij przycisk Wdróż:

Poczekaj na uruchomienie instancji obliczeniowej MiniKF:

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

Zaloguj się w Kubeflow
Po zakończeniu instalacji i przygotowaniu wszystkich zasobników otwórz panel MiniKF. Zaloguj się w Kubeflow, podając nazwę użytkownika i hasło MiniKF:


Użytkownicy Chrome zobaczą ten ekran:

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

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

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


Gratulacje! Udało Ci się wdrożyć MiniKF w GCP. Możesz teraz tworzyć notatniki, pisać kod ML, uruchamiać potoki Kubeflow i używać Rok do wersjonowania danych i odtwarzalności.
4. Uruchamianie potoku z poziomu notatnika
W tej sekcji uruchomisz przykład identyfikacji rasy psa, czyli projekt w ramach programu Udacity AI Nanodegree. Na podstawie zdjęcia psa model końcowy poda szacunkową rasę psa.
Tworzenie serwera notatnika w klastrze Kubeflow
Na centralnym panelu Kubeflow kliknij link Notatniki.

Kliknij Nowy serwer.

Podaj nazwę serwera notatnika.

Sprawdź, czy wybrany obraz Dockera jest następujący (tag obrazu może się różnić):
gcr.io/arrikto/jupyter-kale:f20978e
Dodaj nowy, pusty wolumin danych o rozmiarze 5 GB i nazwij go data.

Aby utworzyć serwer notatnika, kliknij Uruchom.

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

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

W oknie terminala uruchom te polecenia, aby przejść do folderu data i pobrać notatnik oraz dane, których będziesz używać w dalszej części tego modułu:
cd data/ git clone https://github.com/kubeflow-kale/kale
Sklonowane repozytorium zawiera serię wyselekcjonowanych przykładów z danymi i adnotowanymi notatnikami.
Na pasku bocznym przejdź do folderu data/kale/examples/dog-breed-classification/ i otwórz notatnik dog-breed.ipynb.

Poznaj kod ML w przykładzie identyfikacji rasy psa
Na razie nie uruchamiaj komórek, które pobierają zbiory danych, ponieważ użyjesz mniejszych zbiorów danych znajdujących się w repozytorium, które właśnie sklonowałeś(-aś). Jeśli wykonujesz ten przykład we własnym tempie w domu, możesz pobrać zbiory danych.
Uruchom komórkę imports, aby zaimportować wszystkie niezbędne biblioteki. Zwróć uwagę, że kod nie działa, ponieważ brakuje biblioteki:

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 zainstalowane podczas programowania trafiły do potoku dzięki technologii tworzenia migawek Roka i podłączaniu tych migawek w kolejnych krokach potoku przez Kale.
Uruchom następną komórkę, aby zainstalować brakującą bibliotekę:

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

Ponownie uruchom komórkę imports z zainstalowanymi prawidłowymi bibliotekami i sprawdź, czy działa.
Konwertowanie notatnika na potok w Kubeflow Pipelines
Włącz Kale, klikając ikonę Kubeflow w panelu po lewej stronie notatnika:

Włącz Kale, klikając suwak w panelu wdrażania Kale:

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

Kliknij przycisk Skompiluj i uruchom:

Teraz Kale przejmuje kontrolę i kompiluje notatnik, przekształcając go w potok Kubeflow Pipelines. Kale jest też zintegrowany z Rokiem, aby robić migawki bieżącej ilości danych w notatniku, więc możesz śledzić postępy w tworzeniu migawki. Rok dba o wersjonowanie danych i odtwarzanie całego środowiska w stanie, w jakim było ono w momencie kliknięcia przycisku Skompiluj i uruchom. Dzięki temu masz wehikuł czasu dla danych i kodu, a potok będzie działać w tym samym środowisku, w którym został opracowany kod, bez konieczności tworzenia nowych obrazów Dockera.

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

Interfejs Kubeflow Pipelines otworzy się w nowej karcie. Poczekaj na zakończenie działania.


Gratulacje! Udało Ci się uruchomić cały potok w potokach Kubeflow, zaczynając od notatnika.
5. Uczenie transferowe z dostrajaniem hiperparametrów
Sprawdzanie wyników
Sprawdź logi kroku cnn-from-scratch. (Kliknij krok na wykresie w interfejsie Kubeflow Pipelines, a potem kliknij kartę Dzienniki). Na tym etapie wytrenowano od podstaw konwolucyjną sieć neuronową (CNN). Zwróć uwagę, że wytrenowany model ma bardzo niską dokładność, a ten krok zajął dużo czasu.

Sprawdź logi kroku cnn-vgg16. W tym kroku wykorzystaliśmy uczenie przez przeniesienie na wytrenowanym modelu VGG-16, czyli sieci neuronowej wytrenowanej przez Visual Geometry Group (VGG). Dokładność jest znacznie większa niż w przypadku poprzedniego modelu, ale wciąż możemy ją poprawić.

Teraz przyjrzyj się logom kroku cnn-resnet50. W tym kroku zastosowano uczenie przez przenoszenie na wytrenowanym modelu ResNet-50. Dokładność jest znacznie większa. Dlatego będziesz używać tego modelu w pozostałej części tych warsztatów.

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

W okienku po lewej stronie notatnika włącz Dostrajanie hiperparametrów za pomocą Katiba, aby uruchomić dostrajanie hiperparametrów:

Następnie kliknij Set up Katib Job (Skonfiguruj zadanie Katib), aby skonfigurować Katib:

Określ przestrzeń wyszukiwania dla każdego parametru i zdefiniuj cel:

Kliknij przycisk Compile and Run Katib Job (Skompiluj i uruchom zadanie Katib):

Obserwuj postępy eksperymentu Katib:

Aby wyświetlić eksperyment Katib, kliknij Wyświetl:

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

Na stronie eksperymentu Katib zobaczysz nowe próby:

W interfejsie KFP zobaczysz nowe uruchomienia:

Przyjrzyjmy się temu, co się właśnie wydarzyło. Wcześniej Kale uruchamiał potok z notatnika, a teraz tworzy wiele uruchomień potoku, z których każde jest zasilane inną kombinacją argumentów.
Katib to komponent Kubeflow służący do uruchamiania zadań dostrajania hiperparametrów ogólnego przeznaczenia. Katib nie ma żadnych informacji o zadań, które są w toku (w terminologii Katiba nazywa się je wersjami próbnymi). Kale interesuje tylko przestrzeń wyszukiwania, algorytm optymalizacji i cel. Katib obsługuje uruchamianie prostych zadań (czyli zasobników) jako prób, ale Kale implementuje warstwę pośrednią, aby próby faktycznie uruchamiały potoki w Kubeflow Pipelines, a następnie zbierały z nich dane.
W miarę jak eksperyment Katib będzie generować próby, w interfejsie Katib będzie ich przybywać:

Więcej uruchomień w interfejsie KFP:

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

i wszystkie uruchomienia w interfejsie KFP:

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

Kliknij go, aby zobaczyć najlepszy wynik i parametry, które go wygenerowały:

6. Czyszczenie danych
Usuwanie maszyny wirtualnej MiniKF
W konsoli GCP otwórz Menedżera wdrażania i usuń wdrożenie minikf-on-gcp.
7. Gratulacje
Gratulacje! Udało Ci się uruchomić kompleksowy proces pracy związany z nauką o danych przy użyciu Kubeflow (MiniKF), Kale i Rok.
Co dalej?
Dołącz do społeczności Kubeflow:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- Cotygodniowe spotkanie społeczności, Slack i inne informacje o społeczności
