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 ze zmiennych zasobów jest ograniczona tylko przez liczbę zasobów przydzielonych do klastra Kubernetes.
- Kompozycja – ulepszona z wykorzystaniem mechanizmów Service Worker do pracy w trybie offline lub w sieciach niskiej jakości.
Umożliwia uporządkowanie luźno połączonych mikroserwisów w jedną jednostkę i wdrożenie ich w różnych lokalizacjach, niezależnie od tego, czy jest to laptop czy chmura.
Dzięki temu ćwiczeniu w Codelabs dowiesz się, jak utworzyć własne wdrożenie Kubeflow za pomocą MiniKF i uruchomić przepływ pracy Kubeflow Pipelines z poziomu notatnika Jupyter.
Co utworzysz
W ramach tego ćwiczenia w Codelabs utworzysz złożony potok badania danych przy użyciu 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 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
Ustawianie identyfikatora projektu i nazwy klastra GCP
Aby znaleźć identyfikator projektu, otwórz panel główny konsoli GCP, który znajduje się 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):
I wybierz projekt. Powinien być tylko jeden:
3. Zainstaluj MiniKF
Tworzenie instancji Compute
W GCP Marketplace wyszukaj „MiniKF”.
Wybierz maszynę wirtualną MiniKF firmy Arrikto.
Kliknij przycisk Uruchom w Compute Engine i wybierz projekt.
W sekcji Konfiguracja & W oknie wdrażania wybierz nazwę instancji MiniKF i 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 za pomocą 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. Otwórz Snapshot Store i zaloguj się w Roku, podając nazwę użytkownika i hasło MiniKF.
Gratulacje! Udało Ci się wdrożyć MiniKF w GCP. Możesz teraz tworzyć notatniki, pisać kod ML i uruchamiać Kubeflow Pipelines. Używaj Rok do obsługi wersji i odtwarzania danych.
4. Uruchamianie potoku z poziomu notatnika
W tej sekcji przeprowadzisz przykładową aplikację Kaggle, która polega na uczestnictwie w konkursie Kaggle i o tym, którzy pasażerowie przeżyli rozbicie statku Titanica.
Tworzenie serwera notatników
W panelu centralnym Kubeflow kliknij link Notebook Servers (Serwery notatników).
Kliknij New Server (Nowy serwer).
Podaj nazwę serwera notatników.
Upewnij się, że został wybrany ten obraz:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
Dodaj nowy, pusty wolumin danych 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 modułu.
cd data/ git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples
To repozytorium zawiera serię wyselekcjonowanych przykładów z danymi i notatnikami z adnotacjami. Przejdź do folderu data/examples/titanic-ml-dataset/
na pasku bocznym i otwórz notatnik titanic_dataset_ml.ipynb
.
Poznaj kod ML wyzwania Titanic
Uruchom notatnik krok po kroku. Pamiętaj, że kod nie zadziała, ponieważ brakuje biblioteki.
Wróć do terminala i zainstaluj brakującą bibliotekę.
pip3 install --user seaborn
Uruchom ponownie jądro notatnika, klikając ikonę Odśwież.
Uruchom kod z komórki jeszcze raz z zainstalowanymi poprawnymi bibliotekami i obserwuj wynik.
Konwertowanie notatnika na potok Kubeflow
Włącz Kale, klikając ikonę Kubeflow w panelu po lewej stronie.
Zapoznaj się z zależnościami według komórek. Zobacz, jak w jednym kroku potoku może być dostępnych wiele komórek i jak ten krok może zależeć od poprzednich kroków.
Kliknij przycisk Skompiluj i uruchom.
Obserwuj postęp tworzenia zrzutu.
Obserwuj postęp uruchomienia potoku.
Kliknij link, aby przejść do interfejsu Kubeflow Pipelines i wyświetlić uruchomienie.
Poczekaj na jej zakończenie.
Gratulacje! Właśnie udało Ci się uruchomić cały potok Kubeflow, zaczynając od notatnika.
5. Odtwarzalność w przypadku zrzutów woluminów
Sprawdzanie wyników
Przejrzyj logi Wyniki ostatniego kroku potoku. Zwróć uwagę, że wszystkie prognozy mają wynik 100%. Doświadczony badacz danych od razu uznałby to za podejrzane. Jest to dobra wskazówka, że nasze modele nie uogólniają i zamiast tego zbytnio pasują do zbioru danych treningowych. Jest to prawdopodobnie spowodowane problemem z danymi wykorzystywanymi przez modele.
Odtwórz poprzedni stan
Na szczęście Rok zajmuje się obsługą wersji danych i odtwarzaniem całego środowiska, bo do momentu kliknięcia przycisku Kompiluj i uruchom. W ten sposób uzyskasz wehikuł czasu dla danych i kodu. Wznówmy więc stan potoku, zanim wytrenujemy jeden z modeli i zobaczmy, co się dzieje. Wybierz losowy las i kliknij Artefakty.
Wykonaj czynności opisane w sekcji Znacznik, czyli wyświetl podsumowanie w interfejsie Rok, klikając odpowiedni link.
Skopiuj URL Rok.
Kliknij link Notebook Servers (Serwery notatników).
Kliknij New Server (Nowy serwer).
Wklej skopiowany wcześniej adres URL Rok i kliknij przycisk Autouzupełnianie.
Podaj nazwę notatnika.
Upewnij się, że został wybrany ten obraz:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
Kliknij Uruchom, aby utworzyć serwer notatników.
Gdy serwer notatników będzie dostępny, kliknij Połącz, aby się z nim połączyć.
Pamiętaj, że notatnik otwiera się w dokładnie takiej komórce utworzonego kroku potoku.
W tle program Kale wznowił stan notatnika, importując wszystkie biblioteki i wczytując zmienne z poprzednich kroków.
Debuguj wcześniejszy stan
Dodaj do tej komórki polecenie drukowania:
print(acc_random_forest)
Uruchom aktywną komórkę, naciskając Shift + Return, aby ponownie wytrenować losowy las i wydrukować wynik. Wynosi 100.
Teraz sprawdź, czy w danych treningowych nie ma czegoś dziwnego. Aby zbadać i rozwiązać ten problem, dodaj komórkę nad znacznikiem „Losowy las”, wybierając poprzednią komórkę i klikając ikonę plusa (+).
Dodaj poniższy tekst i uruchom komórkę, aby wydrukować zbiór treningowy.
train_df
Ups… Kolumna z etykietami trenowania („Survived”) została przez pomyłkę dodana jako funkcje wejściowe. Model nauczył się skupiać na filmie, który przetrwał i ignoruj pozostałe, zanieczyszczając dane wejściowe. Ta kolumna dokładnie odpowiada celowi modelu i nie występuje podczas prognozy, więc należy ją usunąć ze zbioru danych treningowych, aby model mógł uczyć się od innych funkcji.
Dodaj poprawkę
Aby usunąć tę kolumnę, dodaj do niej to polecenie:
train_df.drop('Survived', axis=1, inplace=True) train_df
Włącz Kale i upewnij się, że komórka, która usuwa etykiety Survived, jest częścią kroku potoku Feature Engineering (powinna mieć ten sam kolor konturu).
Uruchom potok jeszcze raz, klikając przycisk Kompiluj i uruchom.
Kliknij link, aby przejść do interfejsu Kubeflow Pipelines i wyświetlić uruchomienie.
Poczekaj na zakończenie kroku results (wyniki) i wyświetl dzienniki, by zobaczyć ostateczne wyniki. Masz już realistyczne wyniki prognoz.
6. Czyszczenie danych
Zniszcz maszynę wirtualną MiniKF
W konsoli GCP otwórz menedżera wdrażania i usuń wdrożenie minikf-1
.
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
- Spotkania społeczności we wtorki