Od notatnika do Kubeflow Pipelines z MinKF i jarmużem

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.

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, aż instancja obliczeniowa MiniKF się uruchomi.

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

Użytkownicy Chrome zobaczą ten ekran:

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

Użytkownicy Safari zobaczą ten ekran:

1c6fd768d71c0a92.png

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.

a683198ac4ba900d.png80aad6ba5d298a7e.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 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 nazwij go data.

8544d9b05826b316.png

Aby utworzyć serwer notatnika, kliknij Uruchom.

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

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

3f4f9c93b187b105.png

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.

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

44bee7dc0d24ec21.pngd377b6d574a4970.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 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.

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

Aby utworzyć serwer notatnika, kliknij Uruchom.

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

d1077f32dff9620f.png

Dodaj ten tekst i uruchom 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. Masz teraz 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