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:
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.
Jeśli projekt nie został jeszcze wybrany, kliknij Select a project (Wybierz projekt):
Wybierz projekt. Powinien być tylko jeden:
3. Zainstaluj MiniKF
Tworzenie instancji Compute zawierającej MiniKF
W GCP Marketplace wyszukaj „MiniKF”.
Wybierz maszynę wirtualną MiniKF firmy Arrikto:
Kliknij przycisk URUCHOM i wybierz projekt:
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óż:
Poczekaj na uruchomienie instancji MiniKF Compute:
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.
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:
Użytkownicy Chrome zobaczą ten ekran:
Użytkownicy Firefoksa zobaczą ten ekran:
Użytkownicy przeglądarki Safari zobaczą ten ekran:
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.
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.
Kliknij New Server (Nowy serwer).
Podaj nazwę serwera notatników.
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.
Kliknij Uruchom, aby utworzyć serwer notatników.
Gdy serwer notatników będzie dostępny, kliknij Połącz, aby się z nim połączyć.
Pobierz dane i notatnik
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ć 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
.
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:
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ę:
Uruchom ponownie jądro notatnika, klikając ikonę Uruchom ponownie:
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:
Włącz Kale, klikając suwak w panelu wdrożenia Kale:
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.
Kliknij przycisk Kompiluj i uruchom:
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.
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 w nowej karcie. Poczekaj na zakończenie uruchomienia.
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.
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ć.
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.
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:
W lewym panelu notatnika włącz HP Tuning with Katib (Dostrajanie HP z Katib), aby uruchomić dostrajanie hiperparametrów:
Następnie kliknij Skonfiguruj Katib Job, aby skonfigurować Katib:
Zdefiniuj przestrzeń wyszukiwania dla każdego parametru oraz zdefiniuj cel:
Kliknij przycisk Skompiluj i uruchom zadanie Katib:
Zobacz postęp eksperymentu Katib:
Kliknij Wyświetl, aby wyświetlić eksperyment Katib:
Kliknij Gotowe, aby wyświetlić uruchomienia w Kubeflow Pipelines (KFP):
Na stronie eksperymentu Katib zobaczysz nowe wersje próbne:
W interfejsie KFP zobaczysz nowe uruchomienia:
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:
I inne uruchomienia w interfejsie KFP:
Po zakończeniu eksperymentu Katib możesz wyświetlić wszystkie wersje próbne w interfejsie Katib:
Wszystkie uruchomienia w interfejsie KFP:
Jeśli wrócisz do notatnika, zobaczysz przycisk informacji obok eksperymentu Katib w panelu Kale:
Kliknij ją, aby zapoznać się z najlepszym wynikiem oraz parametrami, które go wygenerowały:
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:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- Cotygodniowe rozmowy na temat społeczności, Slack i inne informacje o społeczności