From e07c4f7cd95f30847fb33d3ca8330723c565f991 Mon Sep 17 00:00:00 2001 From: Clive Cox Date: Sat, 17 Feb 2018 11:18:24 +0000 Subject: [PATCH] clean jupyter notebooks --- notebooks/ksonnet_ambassador_minikube.ipynb | 364 ++-------- notebooks/kubectl_demo_minikube.ipynb | 721 ++------------------ 2 files changed, 117 insertions(+), 968 deletions(-) diff --git a/notebooks/ksonnet_ambassador_minikube.ipynb b/notebooks/ksonnet_ambassador_minikube.ipynb index 49fb22c251..4e97449a87 100644 --- a/notebooks/ksonnet_ambassador_minikube.ipynb +++ b/notebooks/ksonnet_ambassador_minikube.ipynb @@ -45,17 +45,9 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace \"seldon\" created\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl create namespace seldon" ] @@ -70,35 +62,18 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "service \"ambassador\" created\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl apply -f resources/ambassador-service-minikube.yaml -n seldon" ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "service \"ambassador-admin\" created\r\n", - "deployment \"ambassador\" created\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl apply -f https://getambassador.io/yaml/ambassador/ambassador-no-rbac.yaml -n seldon" ] @@ -113,43 +88,18 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[34mINFO \u001b[0mUsing context 'minikube' from the kubeconfig file specified at the environment variable $KUBECONFIG\n", - "\u001b[34mINFO \u001b[0mCreating a new app 'my-ml-deployment' at path '/home/clive/work/seldon/fork-seldon-core/notebooks/my-ml-deployment'\n", - "\u001b[33mWARNING \u001b[0m!\n", - "============================================================================================\n", - "Kubernetes version v1.8.0 is currently supported as Beta; you may encounter unexpected behavior\n", - "============================================================================================\n", - "\u001b[34mINFO \u001b[0mCreating environment 'default' with namespace 'seldon', pointing at server at address 'https://192.168.99.100:8443'\n", - "\u001b[34mINFO \u001b[0mGenerating environment metadata at path '/home/clive/work/seldon/fork-seldon-core/notebooks/my-ml-deployment/environments/default'\n", - "\u001b[34mINFO \u001b[0mksonnet app successfully created! Next, try creating a component with `ks generate`.\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!ks init my-ml-deployment --api-spec=version:v1.8.0" ] }, { "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[34mINFO \u001b[0mRetrieved 12 files\n", - "\u001b[34mINFO \u001b[0mWriting component at 'components/seldon-core'\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!cd my-ml-deployment && \\\n", " ks registry add seldon-core github.com/SeldonIO/seldon-core/tree/master/seldon-core && \\\n", @@ -159,23 +109,9 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[34mINFO \u001b[0mUpdating deployments seldon.seldon-cluster-manager\n", - "\u001b[34mINFO \u001b[0mCreating non-existent deployments seldon.seldon-cluster-manager\n", - "\u001b[34mINFO \u001b[0mUpdating deployments seldon.redis\n", - "\u001b[34mINFO \u001b[0mCreating non-existent deployments seldon.redis\n", - "\u001b[34mINFO \u001b[0mUpdating services seldon.redis\n", - "\u001b[34mINFO \u001b[0mCreating non-existent services seldon.redis\n", - "\u001b[34mINFO \u001b[0mUpdating customresourcedefinitions seldondeployments.machinelearning.seldon.io\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!cd my-ml-deployment && \\\n", " ks apply default" @@ -197,7 +133,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -214,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -279,40 +215,18 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME READY STATUS RESTARTS AGE\r\n", - "ambassador-5c785b76f7-9wfxl 2/2 Running 0 3m\r\n", - "ambassador-5c785b76f7-cqszt 2/2 Running 0 3m\r\n", - "ambassador-5c785b76f7-ftfdj 2/2 Running 0 3m\r\n", - "redis-df886d999-4zgqm 1/1 Running 0 35s\r\n", - "seldon-cluster-manager-764c84b5bf-6m9cz 1/1 Running 0 35s\r\n", - "test-deployment-fx-market-predictor-779b869d5b-62sqz 0/2 ContainerCreating 0 19s\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl get pods -n seldon" ] }, { "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "seldondeployment \"seldon-deployment-example\" created\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl apply -f resources/model.json -n seldon" ] @@ -326,17 +240,9 @@ }, { "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "map[predictorStatus:[map[name:test-deployment-fx-market-predictor replicas:1 replicasAvailable:1]]]" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl get seldondeployments seldon-deployment-example -o jsonpath='{.status}' -n seldon" ] @@ -357,33 +263,9 @@ }, { "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "200\n", - "{\n", - " \"meta\": {\n", - " \"puid\": \"f371jv27kmnl8btstc55h8llhp\",\n", - " \"tags\": {\n", - " },\n", - " \"routing\": {\n", - " }\n", - " },\n", - " \"data\": {\n", - " \"names\": [\"proba\"],\n", - " \"tensor\": {\n", - " \"shape\": [2, 1],\n", - " \"values\": [0.05133579311531625, 0.12823373759251927]\n", - " }\n", - " }\n", - "}\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "rest_request(\"seldon-deployment-example\")" ] @@ -397,30 +279,9 @@ }, { "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "meta {\n", - " puid: \"aqfciqo2fke2deu60r02u6vp5a\"\n", - "}\n", - "data {\n", - " names: \"proba\"\n", - " tensor {\n", - " shape: 3\n", - " shape: 1\n", - " values: 0.128233737593\n", - " values: 0.397314662022\n", - " values: 0.829676081356\n", - " }\n", - "}\n", - "\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "grpc_request(\"seldon-deployment-example\")" ] @@ -435,18 +296,9 @@ }, { "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "service \"example-auth\" created\r\n", - "deployment \"example-auth\" created\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl apply -f resources/ambassador-auth-service-setup.yaml -n seldon" ] @@ -460,41 +312,18 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME READY STATUS RESTARTS AGE\r\n", - "ambassador-5c785b76f7-9wfxl 2/2 Running 0 9m\r\n", - "ambassador-5c785b76f7-cqszt 2/2 Running 0 9m\r\n", - "ambassador-5c785b76f7-ftfdj 2/2 Running 0 9m\r\n", - "example-auth-54df78c744-c7sbz 1/1 Running 0 38s\r\n", - "redis-df886d999-4zgqm 1/1 Running 0 6m\r\n", - "seldon-cluster-manager-764c84b5bf-6m9cz 1/1 Running 0 6m\r\n", - "test-deployment-fx-market-predictor-5845c9cb-lxf52 2/2 Running 0 2m\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl get pods -n seldon" ] }, { "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "service \"example-auth\" configured\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl apply -f resources/ambassador-auth-service-config.yaml -n seldon" ] @@ -508,18 +337,9 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "401\n", - "\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "rest_request(\"seldon-deployment-example\")" ] @@ -533,33 +353,9 @@ }, { "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "200\n", - "{\n", - " \"meta\": {\n", - " \"puid\": \"j5e9umnsmpg7nd0jo921hvlao4\",\n", - " \"tags\": {\n", - " },\n", - " \"routing\": {\n", - " }\n", - " },\n", - " \"data\": {\n", - " \"names\": [\"proba\"],\n", - " \"tensor\": {\n", - " \"shape\": [2, 1],\n", - " \"values\": [0.05133579311531625, 0.12823373759251927]\n", - " }\n", - " }\n", - "}\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "rest_request_auth(\"seldon-deployment-example\",\"username\",\"password\")" ] @@ -573,77 +369,43 @@ }, { "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "service \"example-auth\" deleted\n", - "deployment \"example-auth\" deleted\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl delete -f resources/ambassador-auth-service-setup.yaml -n seldon" ] }, { "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "service \"ambassador-admin\" deleted\n", - "deployment \"ambassador\" deleted\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl delete -f https://getambassador.io/yaml/ambassador/ambassador-no-rbac.yaml -n seldon" ] }, { "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "seldondeployment \"seldon-deployment-example\" deleted\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!kubectl delete -f resources/model.json" ] }, { "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[31mERROR \u001b[0mstrconv.Atoi: parsing \"\": invalid syntax\r\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "!cd my-ml-deployment && ks delete default" ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": { "collapsed": true }, diff --git a/notebooks/kubectl_demo_minikube.ipynb b/notebooks/kubectl_demo_minikube.ipynb index 506b4620e0..663135f633 100644 --- a/notebooks/kubectl_demo_minikube.ipynb +++ b/notebooks/kubectl_demo_minikube.ipynb @@ -47,30 +47,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating /home/clive/.helm \n", - "Creating /home/clive/.helm/repository \n", - "Creating /home/clive/.helm/repository/cache \n", - "Creating /home/clive/.helm/repository/local \n", - "Creating /home/clive/.helm/plugins \n", - "Creating /home/clive/.helm/starters \n", - "Creating /home/clive/.helm/cache/archive \n", - "Creating /home/clive/.helm/repository/repositories.yaml \n", - "Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com \n", - "Adding local repo with URL: http://127.0.0.1:8879/charts \n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "Happy Helming!\n" - ] - } - ], + "outputs": [], "source": [ "!helm init" ] @@ -84,17 +63,9 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "node \"minikube\" labeled\r\n" - ] - } - ], + "outputs": [], "source": [ "!kubectl label nodes `kubectl get nodes -o jsonpath='{.items[0].metadata.name}'` role=locust --overwrite" ] @@ -115,92 +86,27 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-crd\n", - "LAST DEPLOYED: Sat Feb 17 09:48:19 2018\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "!helm install ../helm-charts/seldon-core-crd --name seldon-core-crd" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace \"seldon\" created\r\n" - ] - } - ], + "outputs": [], "source": [ "!kubectl create namespace seldon" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Sat Feb 17 09:48:57 2018\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-apiserver 1 1 1 0 0s\n", - "seldon-cluster-manager 1 0 0 0 0s\n", - "redis 1 0 0 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-apiserver NodePort 10.108.253.147 8080:30370/TCP,5000:31436/TCP 0s\n", - "redis ClusterIP 10.102.153.105 6379/TCP 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-apiserver-5596577b55-d29zg 0/1 ContainerCreating 0 0s\n", - "seldon-cluster-manager-576c6ddf5-b7s6w 0/1 ContainerCreating 0 0s\n", - "redis-df886d999-6fvfx 0/1 ContainerCreating 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "!helm install ../helm-charts/seldon-core --name seldon-core --namespace seldon" ] @@ -214,67 +120,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-analytics\n", - "LAST DEPLOYED: Sat Feb 17 09:51:20 2018\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "grafana-prom-secret Opaque 1 1s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "alertmanager-server-conf 1 1s\n", - "grafana-import-dashboards 5 1s\n", - "prometheus-rules 4 1s\n", - "prometheus-server-conf 1 1s\n", - "\n", - "==> v1/Job\n", - "NAME DESIRED SUCCESSFUL AGE\n", - "grafana-prom-import-dashboards 1 0 1s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "alertmanager-deployment 1 1 1 0 1s\n", - "grafana-prom-deployment 1 1 1 0 1s\n", - "prometheus-deployment 1 1 1 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "alertmanager ClusterIP 10.110.34.128 80/TCP 1s\n", - "grafana-prom NodePort 10.104.31.240 80:30579/TCP 1s\n", - "prometheus-node-exporter ClusterIP None 9100/TCP 1s\n", - "prometheus-seldon ClusterIP 10.105.137.48 80/TCP 1s\n", - "\n", - "==> v1beta1/DaemonSet\n", - "NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE\n", - "prometheus-node-exporter 1 1 0 1 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "grafana-prom-import-dashboards-5vpsx 0/1 ContainerCreating 0 1s\n", - "alertmanager-deployment-7fbfdfdfb6-lpqrm 0/1 ContainerCreating 0 1s\n", - "grafana-prom-deployment-7b45fb85d4-prswq 0/1 ContainerCreating 0 1s\n", - "prometheus-node-exporter-smq4c 0/1 ContainerCreating 0 1s\n", - "prometheus-deployment-5749d9db5-bmb5n 0/1 ContainerCreating 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "!helm install ../helm-charts/seldon-core-analytics --name seldon-core-analytics \\\n", " --set grafana_prom_admin_password=password \\\n", @@ -291,24 +139,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME READY STATUS RESTARTS AGE\r\n", - "alertmanager-deployment-7fbfdfdfb6-lpqrm 1/1 Running 0 1m\r\n", - "grafana-prom-deployment-7b45fb85d4-prswq 1/1 Running 0 1m\r\n", - "prometheus-deployment-5749d9db5-bmb5n 1/1 Running 0 1m\r\n", - "prometheus-node-exporter-smq4c 1/1 Running 0 1m\r\n", - "redis-df886d999-6fvfx 1/1 Running 0 4m\r\n", - "seldon-apiserver-5596577b55-d29zg 1/1 Running 0 4m\r\n", - "seldon-cluster-manager-576c6ddf5-b7s6w 1/1 Running 0 4m\r\n" - ] - } - ], + "outputs": [], "source": [ "!kubectl get pods -n seldon" ] @@ -329,7 +162,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "collapsed": true }, @@ -348,7 +181,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": { "collapsed": true }, @@ -426,18 +259,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The SeldonDeployment \"seldon-deployment-example\" is invalid: []: Invalid value: map[string]interface {}{\"apiVersion\":\"machinelearning.seldon.io/v1alpha1\", \"kind\":\"SeldonDeployment\", \"metadata\":map[string]interface {}{\"labels\":map[string]interface {}{\"app\":\"seldon\"}, \"name\":\"seldon-deployment-example\", \"namespace\":\"seldon\", \"creationTimestamp\":\"2018-02-17T09:53:36Z\", \"uid\":\"6c135aca-13c8-11e8-93d3-0800277d1140\", \"selfLink\":\"\", \"clusterName\":\"\"}, \"spec\":map[string]interface {}{\"predictors\":[]interface {}{map[string]interface {}{\"annotations\":map[string]interface {}{\"predictor_version\":\"v1\"}, \"componentSpec\":map[string]interface {}{\"spec\":map[string]interface {}{\"containers\":[]interface {}{map[string]interface {}{\"image\":\"seldonio/mean_classifier:0.6\", \"imagePullPolicy\":22, \"name\":\"mean-classifier\", \"resources\":map[string]interface {}{\"requests\":map[string]interface {}{\"memory\":\"1Mi\"}}}}, \"terminationGracePeriodSeconds\":20}}, \"graph\":map[string]interface {}{\"children\":[]interface {}{}, \"endpoint\":map[string]interface {}{\"type\":\"REST\"}, \"name\":\"mean-classifier\", \"type\":\"MODEL\"}, \"name\":\"fx-market-predictor\", \"replicas\":1}}, \"annotations\":map[string]interface {}{\"deployment_version\":\"v1\", \"project_name\":\"FX Market Prediction\"}, \"name\":\"test-deployment\", \"oauth_key\":1234, \"oauth_secret\":\"oauth-secret\"}}: validation failure list:\r\n", - "spec.oauth_key in body must be of type string: \"integer\"\r\n" - ] - } - ], + "outputs": [], "source": [ "!kubectl create -f resources/model_invalid1.json" ] @@ -452,70 +276,9 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\r\n", - " \u001b[34;01m\"apiVersion\"\u001b[39;49;00m: \u001b[33m\"machinelearning.seldon.io/v1alpha1\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"kind\"\u001b[39;49;00m: \u001b[33m\"SeldonDeployment\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"metadata\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"labels\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"app\"\u001b[39;49;00m: \u001b[33m\"seldon\"\u001b[39;49;00m\r\n", - " },\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"seldon-deployment-example\"\u001b[39;49;00m,\r\n", - "\t\u001b[34;01m\"namespace\"\u001b[39;49;00m: \u001b[33m\"seldon\"\u001b[39;49;00m\r\n", - " },\r\n", - " \u001b[34;01m\"spec\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"annotations\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"project_name\"\u001b[39;49;00m: \u001b[33m\"FX Market Prediction\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"deployment_version\"\u001b[39;49;00m: \u001b[33m\"v1\"\u001b[39;49;00m\r\n", - " },\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"test-deployment\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"oauth_key\"\u001b[39;49;00m: \u001b[33m\"oauth-key\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"oauth_secret\"\u001b[39;49;00m: \u001b[33m\"oauth-secret\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"predictors\"\u001b[39;49;00m: [\r\n", - " {\r\n", - " \u001b[34;01m\"componentSpec\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"spec\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"containers\"\u001b[39;49;00m: [\r\n", - " {\r\n", - " \u001b[34;01m\"image\"\u001b[39;49;00m: \u001b[33m\"seldonio/mock_classifier:1.0\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"imagePullPolicy\"\u001b[39;49;00m: \u001b[33m\"IfNotPresent\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"classifier\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"resources\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"requests\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"memory\"\u001b[39;49;00m: \u001b[33m\"1Mi\"\u001b[39;49;00m\r\n", - " }\r\n", - " }\r\n", - " }\r\n", - " ],\r\n", - " \u001b[34;01m\"terminationGracePeriodSeconds\"\u001b[39;49;00m: \u001b[34m20\u001b[39;49;00m\r\n", - " }\r\n", - " },\r\n", - " \u001b[34;01m\"graph\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"children\"\u001b[39;49;00m: [],\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"classifier\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"endpoint\"\u001b[39;49;00m: {\r\n", - "\t\t\t\u001b[34;01m\"type\"\u001b[39;49;00m : \u001b[33m\"REST\"\u001b[39;49;00m\r\n", - "\t\t },\r\n", - " \u001b[34;01m\"type\"\u001b[39;49;00m: \u001b[33m\"MODEL\"\u001b[39;49;00m\r\n", - " },\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"fx-market-predictor\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"replicas\"\u001b[39;49;00m: \u001b[34m1\u001b[39;49;00m,\r\n", - "\t\t\u001b[34;01m\"annotations\"\u001b[39;49;00m: {\r\n", - "\t\t \u001b[34;01m\"predictor_version\"\u001b[39;49;00m : \u001b[33m\"v1\"\u001b[39;49;00m\r\n", - "\t\t}\r\n", - " }\r\n", - " ]\r\n", - " }\r\n", - "}\r\n" - ] - } - ], + "outputs": [], "source": [ "!pygmentize resources/model.json" ] @@ -536,135 +299,27 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "seldondeployment \"seldon-deployment-example\" created\r\n" - ] - } - ], + "outputs": [], "source": [ "!kubectl apply -f resources/model.json" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME AGE\r\n", - "seldon-deployment-example 9s\r\n" - ] - } - ], + "outputs": [], "source": [ "!kubectl get seldondeployments -n seldon" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Name: seldon-deployment-example\r\n", - "Namespace: seldon\r\n", - "Labels: app=seldon\r\n", - "Annotations: kubectl.kubernetes.io/last-applied-configuration={\"apiVersion\":\"machinelearning.seldon.io/v1alpha1\",\"kind\":\"SeldonDeployment\",\"metadata\":{\"name\":\"seldon-deployment-example\",\"namespace\":\"seldon\",\"selfL...\r\n", - "API Version: machinelearning.seldon.io/v1alpha1\r\n", - "Kind: SeldonDeployment\r\n", - "Metadata:\r\n", - " Cluster Name: \r\n", - " Creation Timestamp: 2018-02-17T09:54:46Z\r\n", - " Generation: 0\r\n", - " Resource Version: 1871\r\n", - " Self Link: /apis/machinelearning.seldon.io/v1alpha1/namespaces/seldon/seldondeployments/seldon-deployment-example\r\n", - " UID: 960dabba-13c8-11e8-93d3-0800277d1140\r\n", - "Spec:\r\n", - " Annotations:\r\n", - " Deployment _ Version: v1\r\n", - " Project _ Name: FX Market Prediction\r\n", - " Name: test-deployment\r\n", - " Oauth _ Key: oauth-key\r\n", - " Oauth _ Secret: oauth-secret\r\n", - " Predictors:\r\n", - " Annotations:\r\n", - " Predictor _ Version: v1\r\n", - " Component Spec:\r\n", - " Metadata:\r\n", - " Labels:\r\n", - " Seldon - App: test-deployment\r\n", - " Spec:\r\n", - " Containers:\r\n", - " Env:\r\n", - " Name: PREDICTIVE_UNIT_SERVICE_PORT\r\n", - " Value: 9000\r\n", - " Name: PREDICTIVE_UNIT_PARAMETERS\r\n", - " Value: []\r\n", - " Name: PREDICTIVE_UNIT_ID\r\n", - " Value: classifier\r\n", - " Name: PREDICTOR_ID\r\n", - " Value: fx-market-predictor\r\n", - " Name: SELDON_DEPLOYMENT_ID\r\n", - " Value: seldon-deployment-example\r\n", - " Image: seldonio/mock_classifier:1.0\r\n", - " Image Pull Policy: IfNotPresent\r\n", - " Lifecycle:\r\n", - " Pre Stop:\r\n", - " Exec:\r\n", - " Command:\r\n", - " /bin/sh\r\n", - " -c\r\n", - " /bin/sleep 5\r\n", - " Liveness Probe:\r\n", - " Handler:\r\n", - " Tcp Socket:\r\n", - " Port: http\r\n", - " Initial Delay Seconds: 10\r\n", - " Period Seconds: 5\r\n", - " Name: classifier\r\n", - " Ports:\r\n", - " Container Port: 9000\r\n", - " Name: http\r\n", - " Readiness Probe:\r\n", - " Handler:\r\n", - " Tcp Socket:\r\n", - " Port: http\r\n", - " Initial Delay Seconds: 10\r\n", - " Period Seconds: 5\r\n", - " Resources:\r\n", - " Requests:\r\n", - " Memory: 1Mi\r\n", - " Termination Grace Period Seconds: 20\r\n", - " Graph:\r\n", - " Endpoint:\r\n", - " Service _ Host: 0.0.0.0\r\n", - " Service _ Port: 9000\r\n", - " Type: REST\r\n", - " Name: classifier\r\n", - " Type: MODEL\r\n", - " Name: fx-market-predictor\r\n", - " Replicas: 1\r\n", - "Status:\r\n", - " Predictor Status:\r\n", - " Name: test-deployment-fx-market-predictor\r\n", - " Replicas: 1\r\n", - " Replicas Available: 1\r\n", - "Events: \r\n" - ] - } - ], + "outputs": [], "source": [ "!kubectl describe seldondeployments seldon-deployment-example -n seldon" ] @@ -678,17 +333,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "map[predictorStatus:[map[name:test-deployment-fx-market-predictor replicas:1 replicasAvailable:1]]]" - ] - } - ], + "outputs": [], "source": [ "!kubectl get seldondeployments seldon-deployment-example -o jsonpath='{.status}' -n seldon" ] @@ -709,33 +356,9 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\"access_token\":\"28de63ce-0001-47a8-ad76-54e00f6ad300\",\"token_type\":\"bearer\",\"expires_in\":43199,\"scope\":\"read write\"}\n", - "{\n", - " \"meta\": {\n", - " \"puid\": \"9uhc299436fhfa4tdpa8l8gnph\",\n", - " \"tags\": {\n", - " },\n", - " \"routing\": {\n", - " }\n", - " },\n", - " \"data\": {\n", - " \"names\": [\"proba\"],\n", - " \"tensor\": {\n", - " \"shape\": [2, 1],\n", - " \"values\": [0.05133579311531625, 0.12823373759251927]\n", - " }\n", - " }\n", - "}\n" - ] - } - ], + "outputs": [], "source": [ "rest_request()" ] @@ -749,31 +372,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\"access_token\":\"28de63ce-0001-47a8-ad76-54e00f6ad300\",\"token_type\":\"bearer\",\"expires_in\":43198,\"scope\":\"read write\"}\n", - "meta {\n", - " puid: \"o3l8k9c0up05vu5g8orshpp7pd\"\n", - "}\n", - "data {\n", - " names: \"proba\"\n", - " tensor {\n", - " shape: 3\n", - " shape: 1\n", - " values: 0.128233737593\n", - " values: 0.397314662022\n", - " values: 0.829676081356\n", - " }\n", - "}\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "grpc_request()" ] @@ -798,110 +399,18 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\r\n", - " \u001b[34;01m\"apiVersion\"\u001b[39;49;00m: \u001b[33m\"machinelearning.seldon.io/v1alpha1\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"kind\"\u001b[39;49;00m: \u001b[33m\"SeldonDeployment\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"metadata\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"labels\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"app\"\u001b[39;49;00m: \u001b[33m\"seldon\"\u001b[39;49;00m\r\n", - " },\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"seldon-deployment-example\"\u001b[39;49;00m,\r\n", - "\t\u001b[34;01m\"namespace\"\u001b[39;49;00m : \u001b[33m\"seldon\"\u001b[39;49;00m\r\n", - " },\r\n", - " \u001b[34;01m\"spec\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"annotations\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"project_name\"\u001b[39;49;00m: \u001b[33m\"FX Market Prediction\"\u001b[39;49;00m\r\n", - " },\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"test-deployment\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"oauth_key\"\u001b[39;49;00m: \u001b[33m\"oauth-key\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"oauth_secret\"\u001b[39;49;00m: \u001b[33m\"oauth-secret\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"predictors\"\u001b[39;49;00m: [\r\n", - " {\r\n", - " \u001b[34;01m\"componentSpec\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"spec\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"containers\"\u001b[39;49;00m: [\r\n", - " {\r\n", - " \u001b[34;01m\"image\"\u001b[39;49;00m: \u001b[33m\"seldonio/mean_classifier:0.6\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"imagePullPolicy\"\u001b[39;49;00m: \u001b[33m\"IfNotPresent\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"mean-classifier\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"resources\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"requests\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"memory\"\u001b[39;49;00m: \u001b[33m\"1Mi\"\u001b[39;49;00m\r\n", - " }\r\n", - " }\r\n", - " }\r\n", - " ]\r\n", - " }\r\n", - " },\r\n", - " \u001b[34;01m\"graph\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"children\"\u001b[39;49;00m: [],\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"mean-classifier\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"endpoint\"\u001b[39;49;00m: {\r\n", - "\t\t\t\u001b[34;01m\"type\"\u001b[39;49;00m : \u001b[33m\"REST\"\u001b[39;49;00m\r\n", - "\t\t },\r\n", - " \u001b[34;01m\"type\"\u001b[39;49;00m: \u001b[33m\"MODEL\"\u001b[39;49;00m\r\n", - " },\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"fx-market-predictor\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"replicas\"\u001b[39;49;00m: \u001b[34m1\u001b[39;49;00m\r\n", - " },\r\n", - " {\r\n", - " \u001b[34;01m\"componentSpec\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"spec\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"containers\"\u001b[39;49;00m: [\r\n", - " {\r\n", - " \u001b[34;01m\"image\"\u001b[39;49;00m: \u001b[33m\"seldonio/mean_classifier:0.6\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"imagePullPolicy\"\u001b[39;49;00m: \u001b[33m\"IfNotPresent\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"mean-classifier\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"resources\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"requests\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"memory\"\u001b[39;49;00m: \u001b[33m\"1Mi\"\u001b[39;49;00m\r\n", - " }\r\n", - " }\r\n", - " }\r\n", - " ]\r\n", - " }\r\n", - " },\r\n", - " \u001b[34;01m\"graph\"\u001b[39;49;00m: {\r\n", - " \u001b[34;01m\"children\"\u001b[39;49;00m: [],\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"mean-classifier\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"endpoint\"\u001b[39;49;00m: {\r\n", - "\t\t\t\u001b[34;01m\"type\"\u001b[39;49;00m : \u001b[33m\"REST\"\u001b[39;49;00m\r\n", - "\t\t },\r\n", - " \u001b[34;01m\"type\"\u001b[39;49;00m: \u001b[33m\"MODEL\"\u001b[39;49;00m\r\n", - " },\r\n", - " \u001b[34;01m\"name\"\u001b[39;49;00m: \u001b[33m\"fx-market-predictor-canary\"\u001b[39;49;00m,\r\n", - " \u001b[34;01m\"replicas\"\u001b[39;49;00m: \u001b[34m1\u001b[39;49;00m\r\n", - " }\r\n", - " ]\r\n", - " }\r\n", - "}\r\n" - ] - } - ], + "outputs": [], "source": [ "!pygmentize resources/model_with_canary.json" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "seldondeployment \"seldon-deployment-example\" configured\r\n" - ] - } - ], + "outputs": [], "source": [ "!kubectl apply -f resources/model_with_canary.json" ] @@ -915,17 +424,9 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "map[predictorStatus:[map[name:test-deployment-fx-market-predictor replicas:1 replicasAvailable:1] map[replicasAvailable:1 name:test-deployment-fx-market-predictor-canary replicas:1]]]" - ] - } - ], + "outputs": [], "source": [ "!kubectl get seldondeployments seldon-deployment-example -o jsonpath='{.status}' -n seldon" ] @@ -939,33 +440,9 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\"access_token\":\"28de63ce-0001-47a8-ad76-54e00f6ad300\",\"token_type\":\"bearer\",\"expires_in\":43006,\"scope\":\"read write\"}\n", - "{\n", - " \"meta\": {\n", - " \"puid\": \"tjsp6p2etelhl78a0b5ajuheq6\",\n", - " \"tags\": {\n", - " },\n", - " \"routing\": {\n", - " }\n", - " },\n", - " \"data\": {\n", - " \"names\": [\"proba\"],\n", - " \"tensor\": {\n", - " \"shape\": [2, 1],\n", - " \"values\": [0.05133579311531625, 0.12823373759251927]\n", - " }\n", - " }\n", - "}\n" - ] - } - ], + "outputs": [], "source": [ "rest_request()" ] @@ -979,31 +456,9 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\"access_token\":\"28de63ce-0001-47a8-ad76-54e00f6ad300\",\"token_type\":\"bearer\",\"expires_in\":43002,\"scope\":\"read write\"}\n", - "meta {\n", - " puid: \"8g0nuebc55mh5f3gm55hj3pfmu\"\n", - "}\n", - "data {\n", - " names: \"proba\"\n", - " tensor {\n", - " shape: 3\n", - " shape: 1\n", - " values: 0.128233737593\n", - " values: 0.397314662022\n", - " values: 0.829676081356\n", - " }\n", - "}\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "grpc_request()" ] @@ -1024,37 +479,9 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: loadtest\r\n", - "LAST DEPLOYED: Sat Feb 17 10:03:54 2018\r\n", - "NAMESPACE: seldon\r\n", - "STATUS: DEPLOYED\r\n", - "\r\n", - "RESOURCES:\r\n", - "==> v1/ReplicationController\r\n", - "NAME DESIRED CURRENT READY AGE\r\n", - "locust-slave-1 1 1 0 0s\r\n", - "locust-master-1 1 1 0 0s\r\n", - "\r\n", - "==> v1/Service\r\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\r\n", - "locust-master-1 NodePort 10.101.224.162 5557:30526/TCP,5558:30920/TCP,8089:30915/TCP 0s\r\n", - "\r\n", - "==> v1/Pod(related)\r\n", - "NAME READY STATUS RESTARTS AGE\r\n", - "locust-slave-1-ppx8s 0/1 Pending 0 0s\r\n", - "locust-master-1-pvsr2 0/1 Pending 0 0s\r\n", - "\r\n", - "\r\n" - ] - } - ], + "outputs": [], "source": [ "!helm install seldon-core-loadtesting --name loadtest \\\n", " --set oauth.key=oauth-key \\\n", @@ -1092,85 +519,45 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "release \"loadtest\" deleted\r\n" - ] - } - ], + "outputs": [], "source": [ "!helm delete loadtest --purge" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "seldondeployment \"seldon-deployment-example\" deleted\r\n" - ] - } - ], + "outputs": [], "source": [ "!kubectl delete -f resources/model_with_canary.json" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "release \"seldon-core-analytics\" deleted\r\n" - ] - } - ], + "outputs": [], "source": [ "!helm delete seldon-core-analytics --purge" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "release \"seldon-core\" deleted\r\n" - ] - } - ], + "outputs": [], "source": [ "!helm delete seldon-core --purge" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "release \"seldon-core-crd\" deleted\r\n" - ] - } - ], + "outputs": [], "source": [ "!helm delete seldon-core-crd --purge" ]