1. Wprowadzenie
| Kubeflow to zestaw narzędzi do uczenia maszynowego dla 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 za pomocą service workerów, dzięki czemu działają 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.
Z tego ćwiczenia 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 ćwiczeniu utworzysz złożony potok analizy danych za pomocą Kubeflow Pipelines bez używania poleceń CLI ani pakietów SDK. Nie musisz mieć żadnej wiedzy o Kubernetes ani Dockerze. Po zakończeniu 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 obsługi wersji danych i odtwarzalności
Czego się nauczysz
- Jak zainstalować Kubeflow za pomocą MiniKF
- Jak przekonwertować notatniki Jupyter na Kubeflow Pipelines bez używania poleceń interfejsu wiersza poleceń ani pakietów SDK
- Jak uruchamiać Kubeflow Pipelines 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 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łówny 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, aż instancja obliczeniowa MiniKF się uruchomi.

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 Safari zobaczą ten ekran:

Zaloguj się w usłudze 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 obsługi 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 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 laboratorium.
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 prawidłowo zainstalowanymi bibliotekami i sprawdź, czy działa.
Konwertowanie notatnika na potok Kubeflow
Włącz Kale, klikając ikonę Kubeflow w panelu po lewej stronie.

Sprawdź zależności między komórkami. Zobacz, 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 procesu.


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 wersjonowanie danych i odtwarzanie całego środowiska w momencie, gdy klikniesz przycisk Skompiluj i uruchom. Dzięki temu masz wehikuł czasu dla swoich danych i kodu. Przywróćmy stan potoku sprzed trenowania jednego z modeli i zobaczmy, 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
Aby utworzyć serwer notatnika, kliknij Uruchom.

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 modelem Random Forest. W tym celu wybierz poprzednią komórkę i kliknij ikonę plusa (+).

Dodaj ten tekst i uruchom 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. Masz teraz 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 społecznościowe we wtorki
