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 wykorzystywać zmieniające się zasoby i jest ograniczony tylko liczbą zasobów przydzielonych do klastra Kubernetes.
- Kompozycyjne – ulepszone dzięki technologii service worker, która umożliwia działanie offline lub w sieciach o niskiej jakości.
Jest to sposób na organizowanie luźno powiązanych mikroserwisów jako jednej jednostki i wdrażanie ich w różnych lokalizacjach, np. na laptopie lub w chmurze.
W tym ćwiczeniu dowiesz się, jak utworzyć własne wdrożenie Kubeflow za pomocą MiniKF i uruchomić przepływ pracy Kubeflow Pipelines w notatniku Jupyter.
Co utworzysz
W tym module dowiesz się, jak utworzyć złożony potok do analizy danych za pomocą Kubeflow Pipelines bez używania poleceń interfejsu wiersza poleceń 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 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
Ustaw identyfikator projektu GCP i nazwę klastra
Aby znaleźć identyfikator projektu, otwórz panel Główna w konsoli GCP. Znajdziesz go w menu 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:

i wybierz projekt. Powinno być tylko jedno:

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

Kliknij przycisk Uruchom w Compute Engine i wybierz projekt.

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

Poczekaj na uruchomienie instancji obliczeniowej MiniKF.

Zaloguj się w MiniKF
Gdy maszyna wirtualna MiniKF będzie gotowa, 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. Otwórz Snapshot Store 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 i uruchamiać Kubeflow Pipelines. Używaj Rok do tworzenia wersji danych i zapewniania powtarzalności.
4. Uruchamianie potoku z poziomu notatnika
W tej sekcji uruchomisz przykład Titanic, czyli konkurs Kaggle, w którym przewiduje się, którzy pasażerowie przeżyli katastrofę Titanica.
Tworzenie serwera notatnika
Na centralnym panelu Kubeflow kliknij link Serwery notatników.

Kliknij Nowy serwer.

Podaj nazwę serwera notatnika.

Sprawdź, czy wybrano 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ę data.

Kliknij Uruchom, aby utworzyć serwer notatnika.

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 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 adnotowanymi notatnikami. Na pasku bocznym przejdź do folderu data/examples/titanic-ml-dataset/ i otwórz notatnik titanic_dataset_ml.ipynb.

Poznaj kod ML wyzwania Titanic
Uruchom notatnik krok po kroku. Zwróć uwagę, że kod nie dział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 ponownie komórkę z zainstalowanymi prawidłowymi bibliotekami i sprawdź, czy działa.
Konwertowanie notatnika na potok Kubeflow
Włącz Kale, klikając ikonę Kubeflow w lewym panelu.

Sprawdź zależności poszczególnych komórek. Dowiedz się, jak wiele komórek może być częścią jednego etapu potoku i jak etap potoku może zależeć od poprzednich etapów.

Kliknij przycisk Skompiluj i uruchom.

Obserwuj postęp tworzenia migawki.

Obserwuj postęp uruchomienia potoku.

Kliknij link, aby przejść do interfejsu Kubeflow Pipelines i wyświetlić uruchomienie.

Poczekaj na zakończenie.


Gratulacje! Właśnie uruchomiono kompleksowy potok Kubeflow, zaczynając od notatnika.
5. Powtarzalność dzięki zrzutom woluminów
Sprawdzanie wyników
Sprawdź logi przedostatniego kroku potoku Results (Wyniki). Zwróć uwagę, że wszystkie predyktory mają wynik 100%. Doświadczony analityk danych od razu uznałby to za podejrzane. To dobry znak, że nasze modele nie uogólniają, ale zamiast tego dopasowują się do zbioru danych treningowych. Jest to prawdopodobnie spowodowane problemem z danymi wykorzystywanymi przez modele.

Przywróć poprzedni stan
Na szczęście Rok dba o obsługę wersji danych i odtwarzanie całego środowiska w momencie, gdy klikniesz przycisk Compile and Run (Skompiluj i uruchom). Dzięki temu masz wehikuł czasu dla swoich danych i kodu. Przywróćmy stan potoku sprzed trenowania jednego z modeli i sprawdźmy, co się dzieje. Przyjrzyj się krokowi randomforest, a następnie kliknij Artefakty.

Postępuj zgodnie z instrukcjami w sekcji Markdown, czyli wyświetl migawkę w interfejsie Rok, klikając odpowiedni link.

Skopiuj adres URL Rok.

Kliknij link Serwery notatników.

Kliknij Nowy serwer.

Wklej skopiowany wcześniej adres URL Rok i kliknij przycisk Wstaw.

Podaj nazwę notatnika.

Sprawdź, czy wybrano ten obraz:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
Kliknij Uruchom, aby utworzyć serwer notatnika.

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

Zwróć uwagę, że notatnik otwiera się w dokładnie tej komórce kroku potoku, z której został utworzony.

W tle Kale przywróciło stan notatnika, importując wszystkie biblioteki i wczytując zmienne z poprzednich kroków.
Debugowanie poprzedniego stanu
Dodaj do tej komórki polecenie drukowania:
print(acc_random_forest)
Uruchom aktywną komórkę, naciskając Shift + Return, aby ponownie wytrenować las losowy i wydrukować wynik. Wynosi 100.

Teraz sprawdźmy, czy w danych treningowych nie ma niczego dziwnego. Aby zbadać i rozwiązać ten problem, dodaj komórkę nad komórką Markdown z algorytmem Random Forest. W tym celu wybierz poprzednią komórkę i kliknij ikonę plusa (+).

Dodaj ten tekst i wykonaj komórkę, aby wydrukować zbiór treningowy.
train_df

Ups! Kolumna z etykietami trenowania („Survived”) została błędnie uwzględniona jako cechy wejściowe. Model nauczył się skupiać na cechach „Survived” i ignorować pozostałe, co zanieczyszcza dane wejściowe. Ta kolumna dokładnie odpowiada celowi modelu i nie występuje podczas prognozowania, więc należy ją usunąć ze zbioru danych treningowych, aby umożliwić modelowi uczenie się na podstawie innych cech.
Dodawanie poprawki
Aby usunąć tę kolumnę, zmodyfikuj komórkę, dodając 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 featureengineering (powinna mieć ten sam kolor obramowania).
Uruchom potok ponownie, klikając przycisk Compile and Run (Skompiluj i uruchom).
Kliknij link, aby przejść do interfejsu Kubeflow Pipelines i wyświetlić uruchomienie.
Poczekaj, aż zakończy się krok results, i wyświetl logi, aby zobaczyć ostateczne wyniki. Teraz masz realistyczne wyniki prognozowania.

6. Czyszczenie danych
Usuwanie maszyny wirtualnej MiniKF
W konsoli GCP otwórz Menedżera wdrażania i usuń wdrożenie minikf-1.
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
- Połączenie z zespołem ds. społeczności we wtorki
