Od notatnika do Kubeflow Pipelines z MinKF i jarmużem

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.

Otwórz konsolę GCP

3fdc4329995406a0.png

Jeśli projekt nie jest jeszcze wybrany, kliknij Wybierz projekt:

e8952c0b96067dea.png

i wybierz projekt. Powinno być tylko jedno:

fe25c1925487142.png

3. Instalowanie MiniKF

Tworzenie instancji obliczeniowej

W GCP Marketplace wyszukaj „MiniKF”.

Wybierz maszynę wirtualną MiniKF od Arrikto.

d6b423c1911ea85a.png

Kliknij przycisk Uruchom w Compute Engine i wybierz projekt.

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.png

Poczekaj na uruchomienie instancji obliczeniowej MiniKF.

5228086caadc44c6.png

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.

774e83c3e96cf7b3.png

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.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Użytkownicy Chrome zobaczą ten ekran:

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

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.

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

4115cac8d8474d73.png

Kliknij Nowy serwer.

f9303c0a182e47f5.png

Podaj nazwę serwera notatnika.

a2343f30bc9522ab.png

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.

8544d9b05826b316.png

Kliknij Uruchom, aby utworzyć serwer notatnika.

28c024bcc55cc70a.png

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

2f06041475f45d3.png

Pobieranie danych i notatnika

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

c85baf68b36c63b2.png

Poznaj kod ML wyzwania Titanic

Uruchom notatnik krok po kroku. Zwróć uwagę, że kod nie dział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 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.

3f4f9c93b187b105.png

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.

15cca32444c1f12e.png

Kliknij przycisk Skompiluj i uruchom.

bde5cef34f00e258.png

Obserwuj postęp tworzenia migawki.

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 zakończenie.

44bee7dc0d24ec21.png

d377b6d574a4970.png

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.

2a594032c2dd6ff6.png

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.

4f25ca4560711b23.png

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

e533bc781da9355a.png

Skopiuj adres URL Rok.

d155d19731b5cedd.png

Kliknij link Serwery notatników.

aafeab01f3ef0863.png

Kliknij Nowy serwer.

f2265a64e8f9d094.png

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

9ba4d4128a3bdeea.png

Podaj nazwę notatnika.

7685c3bf35fc74b2.png

Sprawdź, czy wybrano ten obraz:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Kliknij Uruchom, aby utworzyć serwer notatnika.

28c024bcc55cc70a.png

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

34955a64ae316de1.png

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

a1f7c81f349e0364.png

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.

e2a8a3b5465fcb5d.png

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

d1077f32dff9620f.png

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

train_df

2854798ff01aed4e.png

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

9e76c16a862b566.png

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.

8c6a9676b49e5be8.png

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:

Więcej informacji