[PYTHON] Spielen Sie mit Kubeflow v0.71 mit einem benutzerdefinierten Bildnotizbuch

Eine Art schönes Timing

――Kubeflow v1.0 RC wurde zum Zeitpunkt des Schreibens dieses Artikels veröffentlicht. ――In meiner Umgebung v0.71 funktionieren einige Funktionen wie Pipeline und Kalib nicht, daher möchte ich v1.0RC so schnell wie möglich ausprobieren ... ――Aber ich habe einen Artikel über v0.71 geschrieben, der auch als Gedenkgottesdienst dient (die meisten Schritte können in v1.0 konvertiert werden).

Was ist dieser Artikel?

Es ist ein Doppelstand. Pipelines und Kalib, die ich zu Beginn erwartet hatte, funktionierten nicht gut. Verwenden wir also beim nächsten Mal v1.0RC, es endet mit (Ich wollte die Pipeline-Erstellung und Parametereinstellung mit Kaggles Titanic-Daten vorverarbeiten.)

Hintergrund des Versuchs, Kubeflow zu verwenden

Ich arbeite irgendwann an einem maschinellen Lernprojekt.

Ich hatte ein Problem mit solchen Dingen. Zuerst habe ich die Tools selbst vorbereitet und mich mit ihnen befasst, aber jetzt muss ich mehr Zeit für die Datenanalyse (Hauptgeschäft) aufwenden, und schließlich bleiben die Tools unbeaufsichtigt. Niemand konnte die veralteten Tools verwenden, und niemand sonst konnte die Genauigkeit überprüfen oder Daten für das Lernen vorverarbeiten.

Ich entschied mich für Kubeflow und fragte mich, ob "Kubeflow", das ich oft im Zusammenhang mit MLOps höre, die obige Situation verbessern könnte.

Verfahren

In diesem Artikel werden wir die Kubernet- und Kubeflow-Umgebung in der Ubuntu 18.04-Umgebung vorbereiten. Außerdem wird davon ausgegangen, dass Docker separat eingerichtet wurde.

Installieren Sie k8s mit microk8s

Bereiten Sie vor Kubeflow die kubernetes (k8s) -Umgebung vor. Es gibt verschiedene Möglichkeiten, es zu erstellen, aber dieses Mal habe ich es mit den einfachsten "microk8s" erstellt.

(Abgesehen davon wird Kubeflow ab Kubeflow v1.0 RC als Add-On zu microk8s bereitgestellt. Es war gut, microk8s auszuwählen.)

Informationen zur Installation finden Sie auf der folgenden Website. https://v0-7.kubeflow.org/docs/other-guides/virtual-dev/getting-started-multipass/

Es ist in Skripten geschrieben und endet in nur 6 Zeilen.

git clone https://github.com/canonical-labs/kubernetes-tools
cd kubernetes-tools
git checkout eb91df0 # v1.Kasse, da es für 0 aktualisiert werden kann
sudo ./setup-microk8s.sh
microk8s.enable registry #Erforderlich, um Ihr eigenes Notebook-Bild zu verwenden
microk8s.enable gpu #Wenn Sie eine GPU haben

Dieses Skript installiert das microk8s v1.15 Bitte beachten Sie, dass die neueste von snap install eingegebene microk8s-Version v.1.17 ist und Kubeflow v0.7 nicht unterstützt wird.

Nach der Installation,

kubectl get pod --all-namespaces

Stellen Sie sicher, dass alle Pods "Running" sind.

(Optional) Zugriff auf Kubernetes Dashborad

Greifen Sie auf das k8s-Dashboard zu, um beim Debuggen zu helfen:

Geben Sie den folgenden Befehl ein und zeichnen Sie die Ausgabe-TOKEN auf

token=$(microk8s.kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
microk8s.kubectl -n kube-system describe secret $token

Port-Weiterleitung

microk8s.kubectl port-forward -n kube-system service/kubernetes-dashboard 10443:443 --address=0.0.0.0

Gehen Sie zu https: // <Hostname>: 10443 und melden Sie sich mit dem vorherigen TOKEN an.

サインイン_-_Kubernetes_Dashboard.png

Wenn das Dashboard angezeigt wird, ist es in Ordnung.

kubeflow Installation

https://v0-7.kubeflow.org/docs/started/k8s/kfctl-k8s-istio/ Befolgen Sie die Schritte in.

(Es gibt auch ein Skript namens "kubeflow-tools" wie die zuvor verwendeten "kubernetes-tools", aber ich habe es nicht verwendet, weil die installierte Version von kubeflow alt ist.)

kfctl binärer Download

wget https://github.com/kubeflow/kubeflow/releases/download/v0.7.1/kfctl_v0.7.1-2-g55f9b2a_linux.tar.gz
tar -xvf kfctl_v0.7.1-2-g55f9b2a_linux.tar.gz

Umgebungsvariablen festlegen


#Fügen Sie die ausführbare Datei kfctl in den Pfad ein
export PATH=$PATH:"<path-to-kfctl>"

#Benennen Sie die Bereitstellung entsprechend(Der Autor ist ’kf-yums')
export KF_NAME=<your choice of name for the Kubeflow deployment>

#Verzeichnis zum Platzieren von Yaml-Dateien usw.(Der Schriftsteller ist`~/.local/`)
export BASE_DIR=<path to a base directory>

export KF_DIR=${BASE_DIR}/${KF_NAME}
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v0.7-branch/kfdef/kfctl_k8s_istio.0.7.1.yaml"

Installation

mkdir -p ${KF_DIR}
cd ${KF_DIR}
#Es kann sein, dass es nicht gleichzeitig erfolgreich ist. Wiederholen Sie den Vorgang mehrmals.
kfctl apply -V -f ${CONFIG_URI}

Wenn Sie kubectl get pod --all-namespaces ausführen, werden Sie feststellen, dass viele Container erstellt wurden. Warten Sie eine Weile, bis alles läuft.

Greifen Sie auf das Kubeflow-Dashboard zu

Port-Weiterleitung

#Jeder kann darauf zugreifen, daher ist es besser, den Zugriff entsprechend einzuschränken.
kubectl port-forward -n istio-system svc/istio-ingressgateway 10080:80 --address 0.0.0.0

Wenn Sie über http auf Port 10080 zugreifen, wird das Dashboard (Begrüßungsbildschirm) angezeigt.

Beachten Sie, dass diese Konfiguration ein Sicherheitsrisiko darstellt, da jeder, der die URL kennt, darauf zugreifen kann. Wenn Sie es intern verwenden, ist es möglicherweise besser, "Dex" usw. zu verwenden, um das Kennwort zu schützen oder Zugriffsbeschränkungen durch Portweiterleitung zu berücksichtigen.

Kubeflow_Central_Dashboard.png

Wenn Sie fortfahren, werden Sie zum Erstellungsbildschirm "Namespace" weitergeleitet. Stellen Sie ihn daher entsprechend ein (ich habe "kf-yums" gewählt).

Kubeflow_Central_Dashboard.png

Sie können mit Fertig stellen auf das Kubeflow-Dashboard zugreifen.

Kubeflow_Central_Dashboard.png

Richten Sie Notebook Server mit Ihrem eigenen Image ein

Eine der Funktionen von Kubeflow ist die Hosting-Funktion von Jupyter Notebook. Jeder kann problemlos eine Oreore Notebook-Umgebung erstellen, indem er einfach die erforderlichen Ressourcen wie Speicher, CPU (GPU) und Umgebung (Docker-Image) angibt. Sie können den Zeitaufwand für den Aufbau einer Analyseinfrastruktur reduzieren.

Verwenden Sie diese Funktion, um Ihr eigenes Docker-Image mit Jupyter Notebook zu hosten. Es ist auch möglich, auf die Daten auf dem Terminal zu verweisen, auf dem k8s von Notebook ausgeführt wird.

Erstellen Sie Ihr eigenes Image und Push

https://www.kubeflow.org/docs/notebooks/custom-notebook/ Ich empfehle auf zu verweisen.

Vorerst habe ich eine Docker-Datei wie die folgende erstellt und gefragt, ob ich RandomForest oder etwas anderes verwenden soll.

FROM python:3.8-buster
RUN pip --no-cache-dir install pandas numpy scikit-learn jupyter

ENV NB_PREFIX /
EXPOSE 8888
CMD ["sh","-c", "jupyter notebook --notebook-dir=/home/jovyan --ip=0.0.0.0 --no-browser --allow-root --port=8888 --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.allow_origin='*' --NotebookApp.base_url=${NB_PREFIX}"]

Bauen.

docker build -t myimage .

Um dieses Bild in die Containerregistrierung von microk8s (localhost: 32000) zu verschieben, bearbeiten Sie daemon.json wie folgt.

> sudo vim /etc/docker/daemon.json

Fügen Sie Folgendes hinzu

{
    "insecure-registries" : ["localhost:32000"]
}

Starten Sie Docker nach dem Hinzufügen neu und wechseln Sie in die microk8s-Registrierung.

sudo systemctl restart docker
docker tag myimage:latest localhost:32000/myimage:latest
docker push localhost:32000/myimage:latest

Sie können das in der Registrierung gepuschte Bild wie folgt sehen:

microk8s.ctr -n k8s.io images ls | grep myimage

Machen Sie Terminaldaten in Notebook sichtbar

Das oben erstellte Notebook-Bild enthält keine Eingabedaten (normalerweise nicht). Erstellen Sie im Voraus "PV" und "PVC", damit Sie in Notebook auf die Eingabedaten auf dem Knoten verweisen können.

Lassen Sie uns hier den Titanic-Datensatz von Kaggle in / data / titanic / in Notebook sichtbar machen.

#Es wird davon ausgegangen, dass die vorab von kaggle heruntergeladenen Daten platziert werden.
> find /data/titanic

titanic/gender_submission.csv
titanic/train.csv
titanic/test.csv

Definieren Sie "PersistentVolume (PV)" und "PersistentVolumeClaim (PVC)" wie folgt.


kind: PersistentVolume
apiVersion: v1
metadata:
  name: titanic-pv
  namespace: <Namespace erstellt von kubeflow>
spec:
  storageClassName: standard
  capacity:
    storage: 1Gi
  claimRef:
    namespace: <Namespace erstellt von kubeflow>
    name: titanic-pvc
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: /data/titanic/
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: titanic-pvc
  namespace: <Namespace erstellt von kubeflow>
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Speichern Sie dies als titanic_data.yaml und

kubectl apply -f titanic_data.yaml

Das Volume wird jetzt erstellt. Wenn Sie dieses Volume beim Erstellen von Notebook Server angeben, können Sie auf die darin enthaltenen Daten aus Notebook verweisen.

Erstellen Sie einen Notebook-Server

Gehen Sie im Kubeflow-Dashboard zu "Notebook-Server" -> "NEUER SERVER". Kubeflow_Central_Dashboard.png

Wenn Sie mit dem Bildschirm zum Erstellen von Notizbüchern fortfahren, Überprüfen Sie das "Benutzerdefinierte Bild" im Element "Bild" und drücken Sie zuerst auf das Bild.

localhost:32000/myimage:latest

Konkretisieren.

Kubeflow_Central_Dashboard.png

Ist entsprechend eingestellt.

Kubeflow_Central_Dashboard.png

Geben Sie im Element DataVolumes das zuvor erstellte PVC an.

Kubeflow_Central_Dashboard.png

Nachdem Sie die obigen Einstellungen vorgenommen haben, drücken Sie unten "CREATE"

Kubeflow_Central_Dashboard.png

Der Notebook-Server wird in wenigen Sekunden gestartet. (Wenn es nicht startet, stimmt hinter den Kulissen etwas nicht. Sie können es auf dem k8s-Dashboard sehen.)

Drücken Sie CONNECT und der übliche Jupyter Notebook-Bildschirm wird angezeigt. Natürlich werden auch Titanic-Daten gemountet.

data-vol-1_.png

Erstellen Sie danach wie gewohnt ein Notizbuch und analysieren Sie verschiedene Daten.

Untitled_-_Jupyter_Notebook.png

Funktionen, die außer Notebook Server nicht ausgeführt werden konnten

Nachdem Sie Ihren Notebook-Server gehostet haben, bietet Kubeflow viele weitere Funktionen.

Von besonderem Interesse

2 Funktionen. Aber diese beiden ... haben in meiner Umgebung nicht funktioniert.

Pipeline beschwert sich, dass bei der Ausführung von Job kein Docker vorhanden ist. Die Hauptursache war, dass microk8s "Containerd" anstelle von "Docker" verwendeten, um den Container auszuführen. Ausgabe stand auch.

Wenn Kalib auch Job ausführt,

INFO:hyperopt.utils:Failed to load dill, try installing dill via "pip install dill" for enhanced pickling support.
INFO:hyperopt.fmin:Failed to load dill, try installing dill via "pip install dill" for enhanced pickling support.

Die Nachricht wird ausgegeben und der Vorgang wird nicht fortgesetzt. Obwohl es geschlossen ist, ist Problem

Beide haben einen Geruch, der durch Update gelöst zu werden scheint, daher werde ich Kubeflow v1.0 RC sofort ausprobieren.

Recommended Posts

Spielen Sie mit Kubeflow v0.71 mit einem benutzerdefinierten Bildnotizbuch
Spielen Sie mit Jupyter Notebook (IPython Notebook)
Formatieren mit autopep8 auf Jupyter Notebook
Spielen Sie mit Turtle auf Google Colab
Hinweise zum Ausführen von M5Stick V mit uPyLoader
Probieren Sie SVM mit scikit-learn auf Jupyter Notebook aus
[Erklärung mit Bild] Verwenden Sie Pickle mit Kaggles NoteBook
Aufbau von Handelsstrategien auf SmartTrade mit benutzerdefinierten Funktionen
Verwenden von MLflow mit Databricks ① - Experimentelles Tracking auf Notebooks -
Aktivieren Sie Jupyter Notebook mit conda auf dem Remote-Server
Spiel mit dem Propheten
Spiele mit PyTorch
Spielen Sie mit 2016-Python
Spielen Sie mit CentOS 8
Spiel mit der Pyramide
Spiel mit Fathom
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
Überwachen Sie das Trainingsmodell mit TensorBord auf Jupyter Notebook
EC2-Bereitstellung mit Vagrant + Jupyter (IPython Notebook) auf Docker