――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).
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.)
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.
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.
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.
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.
Wenn das Dashboard angezeigt wird, ist es in Ordnung.
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.)
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
#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"
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.
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.
Wenn Sie fortfahren, werden Sie zum Erstellungsbildschirm "Namespace" weitergeleitet. Stellen Sie ihn daher entsprechend ein (ich habe "kf-yums" gewählt).
Sie können mit Fertig stellen auf das Kubeflow-Dashboard zugreifen.
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.
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
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.
Gehen Sie im Kubeflow-Dashboard zu "Notebook-Server" -> "NEUER SERVER".
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.
Ist entsprechend eingestellt.
Geben Sie im Element DataVolumes das zuvor erstellte PVC an.
Nachdem Sie die obigen Einstellungen vorgenommen haben, drücken Sie unten "CREATE"
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.
Erstellen Sie danach wie gewohnt ein Notizbuch und analysieren Sie verschiedene Daten.
Nachdem Sie Ihren Notebook-Server gehostet haben, bietet Kubeflow viele weitere Funktionen.
Von besonderem Interesse
Kalib
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