Od notatnika do Kubeflow Pipelines z MinKF i jarmużem

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.

Otwórz konsolę GCP

3fdc4329995406a0.png

Jeśli projekt nie został jeszcze wybrany, kliknij Select a project (Wybierz projekt):

e8952c0b96067dea.png

I wybierz projekt. Powinien być tylko jeden:

fe25c1925487142.png

3. Zainstaluj MiniKF

Tworzenie instancji Compute

W GCP Marketplace wyszukaj „MiniKF”.

Wybierz maszynę wirtualną MiniKF firmy Arrikto.

d6b423c1911ea85a.png

Kliknij przycisk Uruchom w Compute Engine i wybierz projekt.

b5eeba43053db4bd.png

W sekcji Konfiguracja & W oknie wdrażania wybierz nazwę instancji MiniKF i pozostaw opcje domyślne. Następnie kliknij przycisk Wdróż.

dc401e2bb5a884d9.png

Poczekaj na uruchomienie instancji MiniKF Compute.

5228086caadc44c6.png

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.

774e83c3e96cf7b3.png

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.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Użytkownicy Chrome zobaczą ten ekran:

6258e0f09e46a6c2.png

Użytkownicy Firefoksa zobaczą ten ekran:

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

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.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

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).

4115cac8d8474d73.png

Kliknij New Server (Nowy serwer).

f9303c0a182e47f5.png

Podaj nazwę serwera notatników.

a2343f30bc9522ab.png

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.

8544d9b05826b316.png

Kliknij Uruchom, aby utworzyć serwer notatników.

28c024bcc55cc70a.png

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

2f06041475f45d3

Pobierz dane i notatnik

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

2482011174f7bc75.png

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.

c85baf68b36c63b2.png

Poznaj kod ML wyzwania Titanic

Uruchom notatnik krok po kroku. Pamiętaj, że kod nie zadziała, ponieważ brakuje biblioteki.

bf2451fd7407e334.png

Wróć do terminala i zainstaluj brakującą bibliotekę.

pip3 install --user seaborn

d90593b21425dd12.png

Uruchom ponownie jądro notatnika, klikając ikonę Odśwież.

a21f5f563b36ce4d.png

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.

3f4f9c93b187b105.png

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.

15cca32444c1f12e.png

Kliknij przycisk Skompiluj i uruchom.

bde5cef34f00e258.png

Obserwuj postęp tworzenia zrzutu.

9408f46abb2493f5.png

Obserwuj postęp uruchomienia potoku.

9EDbde68032f5e4b.png

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

a81646a22584e1b9.png

Poczekaj na jej zakończenie.

44bee7dc0d24ec21.png

d377b6d574a4970.png

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.

2a594032c2dd6ff6.png

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.

4f25ca4560711b23.png

Wykonaj czynności opisane w sekcji Znacznik, czyli wyświetl podsumowanie w interfejsie Rok, klikając odpowiedni link.

e533bc781da9355a.png

Skopiuj URL Rok.

d155d19731b5cedd.png

Kliknij link Notebook Servers (Serwery notatników).

aafeab01f3ef0863.png

Kliknij New Server (Nowy serwer).

f2265a64e8f9d094.png

Wklej skopiowany wcześniej adres URL Rok i kliknij przycisk Autouzupełnianie.

9ba4d4128a3bdeea.png

Podaj nazwę notatnika.

7685c3bf35fc74b2.png

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.

28c024bcc55cc70a.png

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

34955a64ae316de1.png

Pamiętaj, że notatnik otwiera się w dokładnie takiej komórce utworzonego kroku potoku.

a1f7c81f349e0364.png

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.

e2a8a3b5465fcb5d.png

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 (+).

d1077f32dff9620f.png

Dodaj poniższy tekst i uruchom komórkę, aby wydrukować zbiór treningowy.

train_df

2854798ff01aed4e.png

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

9e76c16a862b566.png

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.

8c6a9676b49e5be8.png

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:

Więcej informacji