This page was generated from examples/models/sk_mnist/skmnist.ipynb.

Scikit-learn MNIST Model DeploymentΒΆ

  • Wrap a Scikit-learn MNIST python model for use as a prediction microservice in seldon-core
  • Run locally on Docker to test
  • Deploy on seldon-core running on minikube

DependenciesΒΆ

pip install sklearn
pip install seldon-core

Train locallyΒΆ

[1]:
from sklearn.ensemble import RandomForestClassifier
from sklearn import datasets, metrics
from sklearn.utils import shuffle
from sklearn.datasets import fetch_mldata
from sklearn.externals import joblib

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/")

mnist_images = mnist.train.images
mnist_labels = mnist.train.labels
 # To apply a classifier on this data, we need to flatten the image, to
    # turn the data in a (samples, feature) matrix:
n_samples = len(mnist_images)
data = mnist_images.reshape((n_samples, -1))
targets = mnist_labels

data,targets = shuffle(data,targets)
classifier = RandomForestClassifier(n_estimators=30)

# We learn the digits on the first half of the digits
classifier.fit(data[:n_samples // 2], targets[:n_samples // 2])

# Now predict the value of the digit on the second half:
expected = targets[n_samples // 2:]
test_data = data[n_samples // 2:]

print(classifier.score(test_data, expected))

predicted = classifier.predict(data[n_samples // 2:])

print("Classification report for classifier %s:\n%s\n"
          % (classifier, metrics.classification_report(expected, predicted)))
print("Confusion matrix:\n%s" % metrics.confusion_matrix(expected, predicted))

joblib.dump(classifier, 'sk.pkl')


WARNING:tensorflow:From <ipython-input-1-2e859e898107>:8: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.
Instructions for updating:
Please use alternatives such as official/mnist/dataset.py from tensorflow/models.
WARNING:tensorflow:From /home/clive/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.
Instructions for updating:
Please write your own downloading logic.
WARNING:tensorflow:From /home/clive/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.
Instructions for updating:
Please use tf.data to implement this functionality.
Extracting MNIST_data/train-images-idx3-ubyte.gz
WARNING:tensorflow:From /home/clive/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.
Instructions for updating:
Please use tf.data to implement this functionality.
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
WARNING:tensorflow:From /home/clive/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.
Instructions for updating:
Please use alternatives such as official/mnist/dataset.py from tensorflow/models.
0.9552363636363637
Classification report for classifier RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=30, n_jobs=None,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False):
              precision    recall  f1-score   support

           0       0.97      0.98      0.98      2699
           1       0.98      0.98      0.98      3121
           2       0.94      0.95      0.95      2698
           3       0.94      0.94      0.94      2816
           4       0.95      0.95      0.95      2649
           5       0.94      0.94      0.94      2491
           6       0.97      0.98      0.97      2705
           7       0.97      0.96      0.96      2889
           8       0.94      0.94      0.94      2667
           9       0.94      0.93      0.94      2765

   micro avg       0.96      0.96      0.96     27500
   macro avg       0.95      0.95      0.95     27500
weighted avg       0.96      0.96      0.96     27500


Confusion matrix:
[[2654    0    6    1    3    4   11    0   19    1]
 [   0 3067   19    5    8    3    2    7    7    3]
 [  12    6 2571   20   23    5   21   18   20    2]
 [   0    6   46 2639    1   43    7   28   34   12]
 [   7    3   13    1 2524    3   14    8   12   64]
 [  12    6    6   63   10 2337   15    3   24   15]
 [  12    5    4    2    7   28 2638    0    9    0]
 [   5   12   33    8   24    0    0 2768    5   34]
 [   8   14   20   30   15   29   16   11 2494   30]
 [  13    6   11   25   52   25    2   24   30 2577]]
[1]:
['sk.pkl']

Wrap model using s2i

[2]:
!s2i build . seldonio/seldon-core-s2i-python3:0.12 sk-mnist:0.1
---> Installing application source...
---> Installing dependencies ...
Looking in links: /whl
Collecting scipy>=0.13.3 (from -r requirements.txt (line 1))
  Url '/whl' is ignored. It is either a non-existing path or lacks a specific scheme.
Downloading https://files.pythonhosted.org/packages/7f/5f/c48860704092933bf1c4c1574a8de1ffd16bf4fde8bab190d747598844b2/scipy-1.2.1-cp36-cp36m-manylinux1_x86_64.whl (24.8MB)
Collecting scikit-learn>=0.18 (from -r requirements.txt (line 2))
  Url '/whl' is ignored. It is either a non-existing path or lacks a specific scheme.
Downloading https://files.pythonhosted.org/packages/5e/82/c0de5839d613b82bddd088599ac0bbfbbbcbd8ca470680658352d2c435bd/scikit_learn-0.20.3-cp36-cp36m-manylinux1_x86_64.whl (5.4MB)
Requirement already satisfied: numpy>=1.8.2 in /usr/local/lib/python3.6/site-packages (from scipy>=0.13.3->-r requirements.txt (line 1)) (1.16.2)
Installing collected packages: scipy, scikit-learn
Successfully installed scikit-learn-0.20.3 scipy-1.2.1
Url '/whl' is ignored. It is either a non-existing path or lacks a specific scheme.
You are using pip version 19.0.3, however version 19.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Build completed successfully
[3]:
!docker run --name "mnist_predictor" -d --rm -p 5000:5000 sk-mnist:0.1
a8adfe1e38ed793348c8889a3eb7db82602d77da14b4a9c81cb69105cc32fbf8

Send some random features that conform to the contract

[4]:
!seldon-core-tester contract.json 0.0.0.0 5000 -p
----------------------------------------
SENDING NEW REQUEST:

[[0.312 0.488 0.971 0.609 0.807 0.484 0.306 0.549 0.293 0.224 0.394 0.242
  0.447 0.501 0.642 0.975 0.627 0.775 0.575 0.062 0.206 0.249 0.848 0.126
  0.022 0.435 0.441 0.292 0.968 0.456 0.288 0.703 0.026 0.064 0.159 0.782
  0.098 0.33  0.8   0.023 0.642 0.678 0.637 0.151 0.588 0.257 0.812 0.262
  0.9   0.978 0.531 0.769 0.042 0.595 0.042 0.335 0.521 0.427 0.246 0.167
  0.602 0.081 0.845 0.664 0.98  0.215 0.331 0.439 0.754 0.649 0.525 0.685
  0.964 0.771 0.16  0.787 0.23  0.533 0.349 0.909 0.016 0.16  0.522 0.632
  0.804 0.091 0.871 0.36  0.563 0.027 0.154 0.963 0.221 0.224 0.836 0.504
  0.547 0.624 0.192 0.456 0.238 0.129 0.755 0.132 0.638 0.191 0.393 0.377
  0.985 0.425 0.634 0.577 0.567 0.446 0.083 0.673 0.757 0.834 0.93  0.32
  0.435 0.34  0.927 0.91  0.533 0.937 0.458 0.463 0.077 0.652 0.516 0.113
  0.946 0.952 0.314 0.744 0.125 0.751 0.92  0.322 0.404 0.279 0.258 0.979
  0.268 0.443 0.773 0.032 0.397 0.871 0.554 0.664 0.969 0.212 0.272 0.535
  0.417 0.756 0.733 0.545 0.818 0.081 0.406 0.268 0.47  0.151 0.316 0.161
  0.524 0.156 0.279 0.705 0.008 0.559 0.438 0.353 0.744 0.707 0.901 0.593
  0.25  0.303 0.947 0.927 0.811 0.752 0.936 0.748 0.229 0.989 0.33  0.705
  0.374 0.931 0.636 0.593 0.218 0.141 0.038 0.892 0.406 0.511 0.145 0.902
  0.82  0.391 0.556 0.245 0.315 0.734 0.691 0.62  0.339 0.744 0.523 0.445
  0.798 0.685 0.617 0.045 0.32  0.694 0.074 0.02  0.726 0.574 0.845 0.436
  0.133 0.842 0.545 0.473 0.626 0.332 0.214 0.892 0.354 0.889 0.789 0.805
  0.015 0.591 0.044 0.678 0.178 0.39  0.849 0.474 0.752 0.979 0.018 0.167
  0.604 0.092 0.805 0.475 0.627 0.851 0.371 0.41  0.439 0.588 0.83  0.753
  0.312 0.622 0.21  0.653 0.134 0.7   0.767 0.853 0.837 0.777 0.86  0.565
  0.997 0.296 0.339 0.511 0.616 0.008 0.655 0.641 0.984 0.267 0.068 0.949
  0.822 0.55  0.915 0.048 0.154 0.096 0.318 0.806 0.99  0.136 0.912 0.165
  0.154 0.451 0.792 0.302 0.596 0.908 0.384 0.317 0.305 0.18  0.437 0.759
  0.655 0.211 0.384 0.938 0.949 0.18  0.133 0.315 0.048 0.996 0.538 0.677
  0.333 0.149 0.941 0.469 0.795 0.624 0.682 0.328 0.539 0.383 0.01  0.514
  0.996 0.088 0.893 0.819 0.13  0.567 0.903 0.018 0.285 0.687 0.321 0.189
  0.032 0.712 0.778 0.902 0.741 0.628 0.937 0.344 0.51  0.112 0.463 0.855
  0.709 0.491 0.675 0.819 0.123 0.688 0.895 0.808 0.646 0.072 0.88  0.256
  0.675 0.628 0.582 0.638 0.125 0.367 0.186 0.624 0.358 0.389 0.254 0.482
  0.444 0.842 0.206 0.417 0.595 0.334 0.758 0.357 0.537 0.65  0.447 0.44
  0.777 0.454 0.947 0.05  0.544 0.106 0.722 0.269 0.633 0.832 0.372 0.115
  0.853 0.834 0.157 0.272 0.623 0.785 0.962 0.664 0.853 0.571 0.969 0.567
  0.865 0.171 0.416 0.415 0.509 0.805 0.072 0.546 0.627 0.513 0.606 0.992
  0.061 0.045 0.59  0.149 0.773 0.949 0.94  0.838 0.366 0.666 0.964 0.49
  0.343 0.543 0.679 0.327 0.071 0.138 0.315 0.367 0.378 0.297 0.474 0.545
  0.625 0.106 0.049 0.377 0.04  0.245 0.18  0.263 0.389 0.378 0.646 0.322
  0.975 0.778 0.19  0.163 0.086 0.864 0.363 0.322 0.612 0.484 0.931 0.684
  0.645 0.287 0.249 0.511 0.189 0.735 0.655 0.734 0.322 0.712 0.128 0.014
  0.556 0.39  0.101 0.365 0.179 0.252 0.103 0.719 0.966 0.639 0.761 0.141
  0.491 0.441 0.663 0.572 0.893 0.959 0.205 0.317 0.093 0.558 0.372 0.312
  0.483 0.784 0.766 0.966 0.832 0.055 0.396 0.857 0.332 0.705 0.629 0.174
  0.101 0.189 0.82  0.43  0.853 0.365 0.963 0.448 0.184 0.217 0.318 0.681
  0.298 0.992 0.205 0.741 0.628 0.207 0.474 0.95  0.684 0.981 0.601 0.719
  0.127 0.929 0.395 0.821 0.792 0.978 0.859 0.841 0.533 0.397 0.327 0.645
  0.631 0.184 0.972 0.817 0.863 0.637 0.373 0.739 0.992 0.131 0.591 0.259
  0.859 0.954 0.281 0.075 0.147 0.064 0.928 0.109 0.593 0.654 0.836 0.038
  0.141 0.089 0.048 0.64  0.975 0.72  0.61  0.418 0.174 0.412 0.028 0.863
  0.213 0.572 0.162 0.426 0.711 0.26  0.425 0.425 0.355 0.759 0.908 0.352
  0.706 0.675 0.607 0.36  0.822 0.705 0.542 0.624 0.961 0.316 0.549 0.382
  0.516 0.233 0.359 0.799 0.231 0.069 0.786 0.808 0.189 0.612 0.573 0.458
  0.817 0.636 0.478 0.233 0.104 0.924 0.129 0.141 0.233 0.124 0.392 0.426
  0.772 0.841 0.4   0.45  0.033 0.523 0.206 0.529 0.761 0.899 0.346 0.626
  0.69  0.782 0.714 0.735 0.458 0.769 0.611 0.743 0.226 0.922 0.682 0.709
  0.128 0.998 0.309 0.952 0.085 0.299 0.178 0.483 0.31  0.375 0.977 0.13
  0.689 0.509 0.875 0.323 0.685 0.853 0.714 0.132 0.283 0.054 0.184 0.472
  0.893 0.645 0.838 0.032 0.824 0.327 0.632 0.709 0.105 0.767 0.327 0.782
  0.577 0.912 0.589 0.561 0.627 0.703 0.242 0.709 0.281 0.564 0.803 0.918
  0.537 0.292 0.311 0.468 0.794 0.083 0.745 0.278 0.907 0.689 0.706 0.833
  0.192 0.474 0.2   0.713 0.748 0.66  0.744 0.981 0.879 0.809 0.238 0.091
  0.752 0.203 0.328 0.176 0.698 0.858 0.435 0.91  0.982 0.588 0.486 0.774
  0.746 0.529 0.213 0.894 0.95  0.377 0.161 0.929 0.806 0.261 0.645 0.065
  0.041 0.01  0.86  0.091 0.372 0.653 0.682 0.93  0.774 0.029 0.679 0.518
  0.438 0.321 0.893 0.926]]
RECEIVED RESPONSE:
meta {
}
data {
  names: "class:0"
  names: "class:1"
  names: "class:2"
  names: "class:3"
  names: "class:4"
  names: "class:5"
  names: "class:6"
  names: "class:7"
  names: "class:8"
  names: "class:9"
  ndarray {
    values {
      list_value {
        values {
          number_value: 0.03333333333333333
        }
        values {
          number_value: 0.0
        }
        values {
          number_value: 0.2
        }
        values {
          number_value: 0.16666666666666666
        }
        values {
          number_value: 0.1
        }
        values {
          number_value: 0.13333333333333333
        }
        values {
          number_value: 0.06666666666666667
        }
        values {
          number_value: 0.0
        }
        values {
          number_value: 0.26666666666666666
        }
        values {
          number_value: 0.03333333333333333
        }
      }
    }
  }
}


[5]:
!docker rm mnist_predictor --force
mnist_predictor

Test using MinikubeΒΆ

Due to a `minikube/s2i issue <https://github.com/SeldonIO/seldon-core/issues/253>`__ you will need `s2i >= 1.1.13 <https://github.com/openshift/source-to-image/releases/tag/v1.1.13>`__

[8]:
!minikube start --memory 4096
πŸ˜„  minikube v0.34.1 on linux (amd64)
πŸ”₯  Creating virtualbox VM (CPUs=2, Memory=4096MB, Disk=20000MB) ...
πŸ“Ά  "minikube" IP address is 192.168.99.100
🐳  Configuring Docker as the container runtime ...
✨  Preparing Kubernetes environment ...
🚜  Pulling images required by Kubernetes v1.13.3 ...
πŸš€  Launching Kubernetes v1.13.3 using kubeadm ...
πŸ”‘  Configuring cluster permissions ...
πŸ€”  Verifying component health .....
πŸ’—  kubectl is now configured to use "minikube"
πŸ„  Done! Thank you for using minikube!
[9]:
!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created
[10]:
!helm init
$HELM_HOME has been configured at /home/clive/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!
[11]:
!kubectl rollout status deploy/tiller-deploy -n kube-system
Waiting for deployment "tiller-deploy" rollout to finish: 0 of 1 updated replicas are available...
deployment "tiller-deploy" successfully rolled out
[6]:
!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system
NAME:   seldon-core
LAST DEPLOYED: Thu Apr 25 09:09:18 2019
NAMESPACE: seldon-system
STATUS: DEPLOYED

RESOURCES:
==> v1/Secret
NAME                                   TYPE    DATA  AGE
seldon-operator-webhook-server-secret  Opaque  0     1s

==> v1beta1/CustomResourceDefinition
NAME                                         AGE
seldondeployments.machinelearning.seldon.io  1s

==> v1/ClusterRole
seldon-operator-manager-role  1s

==> v1/ClusterRoleBinding
NAME                                 AGE
seldon-operator-manager-rolebinding  1s

==> v1/Service
NAME                                        TYPE       CLUSTER-IP      EXTERNAL-IP  PORT(S)  AGE
seldon-operator-controller-manager-service  ClusterIP  10.108.139.240  <none>       443/TCP  1s

==> v1/StatefulSet
NAME                                DESIRED  CURRENT  AGE
seldon-operator-controller-manager  1        1        1s

==> v1/Pod(related)
NAME                                  READY  STATUS             RESTARTS  AGE
seldon-operator-controller-manager-0  0/1    ContainerCreating  0         1s


NOTES:
NOTES: TODO


[7]:
!kubectl rollout status statefulset.apps/seldon-operator-controller-manager -n seldon-system
partitioned roll out complete: 1 new pods have been updated...

Setup IngressΒΆ

Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473).

[8]:
!helm install stable/ambassador --name ambassador --set crds.keep=false
NAME:   ambassador
LAST DEPLOYED: Thu Apr 25 09:09:56 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Service
NAME               TYPE          CLUSTER-IP     EXTERNAL-IP  PORT(S)                     AGE
ambassador-admins  ClusterIP     10.102.85.86   <none>       8877/TCP                    0s
ambassador         LoadBalancer  10.98.255.212  <pending>    80:31305/TCP,443:32008/TCP  0s

==> v1/Deployment
NAME        DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
ambassador  3        3        3           0          0s

==> v1/Pod(related)
NAME                         READY  STATUS             RESTARTS  AGE
ambassador-5b89d44544-947t9  0/1    ContainerCreating  0         0s
ambassador-5b89d44544-bqqbp  0/1    ContainerCreating  0         0s
ambassador-5b89d44544-nj5rf  0/1    ContainerCreating  0         0s

==> v1/ServiceAccount
NAME        SECRETS  AGE
ambassador  1        0s

==> v1beta1/ClusterRole
NAME        AGE
ambassador  0s

==> v1beta1/ClusterRoleBinding
NAME        AGE
ambassador  0s


NOTES:
Congratuations! You've successfully installed Ambassador.

For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.

To get the IP address of Ambassador, run the following commands:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
     You can watch the status of by running 'kubectl get svc -w  --namespace default ambassador'

  On GKE/Azure:
  export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

  On AWS:
  export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')

  echo http://$SERVICE_IP:

[9]:
!kubectl rollout status deployment.apps/ambassador
Waiting for deployment "ambassador" rollout to finish: 0 of 3 updated replicas are available...
Waiting for deployment "ambassador" rollout to finish: 1 of 3 updated replicas are available...
Waiting for deployment "ambassador" rollout to finish: 2 of 3 updated replicas are available...
deployment "ambassador" successfully rolled out

Wrap Model and TestΒΆ

[10]:
!eval $(minikube docker-env) && s2i build . seldonio/seldon-core-s2i-python3:0.12 sk-mnist:0.1
---> Installing application source...
---> Installing dependencies ...
Looking in links: /whl
Collecting scipy>=0.13.3 (from -r requirements.txt (line 1))
  Url '/whl' is ignored. It is either a non-existing path or lacks a specific scheme.
Downloading https://files.pythonhosted.org/packages/7f/5f/c48860704092933bf1c4c1574a8de1ffd16bf4fde8bab190d747598844b2/scipy-1.2.1-cp36-cp36m-manylinux1_x86_64.whl (24.8MB)
Collecting scikit-learn>=0.18 (from -r requirements.txt (line 2))
  Url '/whl' is ignored. It is either a non-existing path or lacks a specific scheme.
Downloading https://files.pythonhosted.org/packages/5e/82/c0de5839d613b82bddd088599ac0bbfbbbcbd8ca470680658352d2c435bd/scikit_learn-0.20.3-cp36-cp36m-manylinux1_x86_64.whl (5.4MB)
Requirement already satisfied: numpy>=1.8.2 in /usr/local/lib/python3.6/site-packages (from scipy>=0.13.3->-r requirements.txt (line 1)) (1.16.2)
Installing collected packages: scipy, scikit-learn
Successfully installed scikit-learn-0.20.3 scipy-1.2.1
Url '/whl' is ignored. It is either a non-existing path or lacks a specific scheme.
You are using pip version 19.0.3, however version 19.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Build completed successfully
[11]:
!kubectl create -f sk_mnist.json
seldondeployment.machinelearning.seldon.io/sk-mnist created
[12]:
!kubectl rollout status deploy/sk-mnist-single-model-3812de6
Waiting for deployment "sk-mnist-single-model-3812de6" rollout to finish: 0 of 1 updated replicas are available...
deployment "sk-mnist-single-model-3812de6" successfully rolled out
[13]:
!seldon-core-api-tester contract.json `minikube ip` `kubectl get svc ambassador -o jsonpath='{.spec.ports[0].nodePort}'` \
    sk-mnist --namespace default -p
----------------------------------------
SENDING NEW REQUEST:

[[0.445 0.858 0.358 0.545 0.91  0.803 0.061 0.822 0.634 0.225 0.17  0.938
  0.754 0.539 0.075 0.548 0.34  0.083 0.858 0.835 0.755 0.041 0.058 0.414
  0.631 0.897 0.989 0.486 0.62  0.366 0.596 0.74  0.667 0.347 0.923 0.992
  0.54  0.88  0.521 0.877 0.945 0.727 0.697 0.543 0.714 0.147 0.361 0.21
  1.    0.742 0.666 0.86  0.59  0.607 0.146 0.345 0.342 0.751 0.958 0.869
  0.122 0.779 0.468 0.29  0.79  0.857 0.501 0.032 0.466 0.678 0.823 0.268
  0.598 0.27  0.55  0.648 0.818 0.732 0.344 0.123 0.735 0.741 0.675 0.68
  0.777 0.584 0.104 0.72  0.237 0.237 0.465 0.625 0.705 0.09  0.673 0.422
  0.51  0.603 0.271 0.957 0.565 1.    0.441 0.05  0.772 0.4   0.306 0.186
  0.822 0.103 0.432 0.151 0.232 0.134 0.163 0.826 0.01  0.756 0.898 0.918
  0.783 0.185 0.696 0.194 0.595 0.668 0.869 0.165 0.541 0.287 0.52  0.215
  0.007 0.564 0.643 0.809 0.307 0.973 0.671 0.552 0.073 0.843 0.472 0.514
  0.2   0.606 0.387 0.23  0.749 0.161 0.898 0.109 0.96  0.984 0.98  0.343
  0.999 0.519 0.228 0.095 0.497 0.964 0.627 0.837 0.924 0.545 0.389 0.717
  0.185 0.029 0.782 0.75  0.655 0.728 0.338 0.086 0.658 0.722 0.753 0.916
  0.245 0.222 0.371 0.974 0.113 0.458 0.285 0.54  0.231 0.418 0.572 0.167
  0.682 0.492 0.32  0.675 0.023 0.139 0.789 0.063 0.606 0.721 0.616 0.049
  0.011 0.321 0.463 0.015 0.847 0.781 0.725 0.85  0.509 0.453 0.368 0.584
  0.499 0.439 0.31  0.964 0.17  0.691 0.721 0.449 0.295 0.796 0.63  0.868
  0.816 0.454 0.072 0.318 0.338 0.327 0.238 0.992 0.685 0.508 0.392 0.531
  0.644 0.749 0.976 0.319 0.614 0.719 0.838 0.413 0.368 0.834 0.603 0.102
  0.949 0.112 0.543 0.558 0.923 0.849 0.168 0.081 0.886 0.569 0.071 0.205
  0.355 0.692 0.106 0.155 0.812 0.186 0.474 0.254 0.474 0.997 0.464 0.934
  0.04  0.208 0.063 0.472 0.395 0.008 0.42  0.763 0.912 0.537 0.517 0.613
  0.262 0.199 0.987 0.56  0.049 0.696 0.973 0.363 0.596 0.526 0.051 0.629
  0.773 0.465 0.404 0.496 0.995 0.902 0.582 0.542 0.909 0.153 0.972 0.932
  0.05  0.981 0.717 0.433 0.565 0.352 0.135 0.87  0.299 0.611 0.282 0.577
  0.427 0.006 0.893 0.35  0.225 0.908 0.008 0.81  0.193 0.249 0.152 0.656
  0.736 0.574 0.175 0.294 0.584 0.637 0.479 0.308 0.855 0.61  0.158 0.408
  0.332 0.215 0.037 0.571 0.105 0.618 0.119 0.656 0.722 0.056 0.843 0.799
  0.381 0.35  0.982 0.06  0.515 0.505 0.549 0.205 0.765 0.704 0.878 0.926
  0.445 0.377 0.777 0.541 0.934 0.342 0.26  0.186 0.052 0.821 0.709 0.639
  0.717 0.274 0.583 0.792 0.384 0.121 0.062 0.678 0.85  0.719 0.529 0.7
  0.36  0.322 0.579 0.719 0.102 0.209 0.742 0.741 0.282 0.697 0.496 0.495
  0.961 0.66  0.953 0.287 0.915 0.424 0.145 0.34  0.001 0.598 0.144 0.159
  0.074 0.842 0.38  0.552 0.117 0.268 0.917 0.093 0.405 0.967 0.293 0.333
  0.204 0.155 0.859 0.733 0.555 0.06  0.666 0.761 0.684 0.628 0.853 0.955
  0.721 0.25  0.84  0.877 0.537 0.867 0.816 0.987 0.279 0.233 0.079 0.194
  0.794 0.49  0.799 0.346 0.268 0.56  0.085 0.424 0.741 0.588 0.147 0.455
  0.099 0.708 0.652 0.123 0.429 0.424 0.128 0.055 0.708 0.608 0.015 0.059
  0.392 0.27  0.778 0.472 0.603 0.047 0.666 0.716 0.312 0.101 0.514 0.068
  0.241 0.507 0.246 0.955 0.483 0.415 0.084 0.566 0.827 0.688 0.18  0.467
  0.917 0.423 0.774 0.473 0.482 0.35  0.536 0.601 0.328 0.561 0.223 0.048
  0.706 0.292 0.994 0.084 0.697 0.455 0.54  0.08  0.627 0.648 0.393 0.629
  0.413 0.919 0.312 0.836 0.478 0.081 0.774 0.872 0.731 0.299 0.537 0.79
  0.203 0.092 0.726 0.503 0.674 0.343 0.643 0.41  0.06  0.431 0.95  0.447
  0.805 0.069 0.556 0.829 0.222 0.483 0.963 0.568 0.796 0.877 0.648 0.754
  0.971 0.569 0.982 0.897 0.909 0.225 0.394 0.884 0.903 0.683 0.813 0.503
  0.199 0.702 0.938 0.493 0.291 0.856 0.612 0.397 0.851 0.057 0.694 0.977
  0.532 0.603 0.935 0.331 0.334 0.63  0.042 0.956 0.674 0.658 0.034 0.039
  0.789 0.355 0.226 0.306 0.522 0.317 0.184 0.086 0.866 0.199 0.457 0.588
  0.224 0.202 0.128 0.737 0.393 0.604 0.774 0.897 0.999 0.224 0.109 0.545
  0.154 0.345 0.846 0.975 0.411 0.425 0.218 0.137 0.993 0.039 0.122 0.345
  0.852 0.988 0.139 0.124 0.417 0.971 0.523 0.607 0.307 0.822 0.037 0.059
  0.111 0.311 0.538 0.551 0.733 0.896 0.759 0.743 0.089 0.515 0.429 0.046
  0.81  0.509 0.378 0.683 0.629 0.002 0.395 0.815 0.166 0.343 0.26  0.504
  0.812 0.613 0.614 0.019 0.887 0.868 0.482 0.27  0.194 0.902 0.841 0.834
  0.34  0.219 0.839 0.155 0.468 0.817 0.852 0.142 0.573 0.477 0.166 0.231
  0.672 0.285 0.363 0.497 0.466 0.346 0.207 0.559 0.516 0.333 0.771 0.103
  0.877 0.68  0.164 0.693 0.993 0.825 0.617 0.977 0.326 0.353 0.247 0.921
  0.682 0.384 0.785 0.044 0.539 0.625 0.338 0.852 0.705 0.948 0.945 0.186
  0.438 0.794 0.418 0.927 0.224 0.733 0.953 0.347 0.479 0.276 0.487 0.862
  0.513 0.063 0.586 0.021 0.442 0.087 0.685 0.382 0.298 0.266 0.07  0.491
  0.499 0.597 0.818 0.593 0.285 0.075 0.706 0.434 0.715 0.945 0.43  0.325
  0.555 0.69  0.154 0.994 0.193 0.46  0.597 0.515 0.124 0.654 0.948 0.392
  0.871 0.828 0.61  0.173]]
RECEIVED RESPONSE:
meta {
  puid: "hi6i0bs0mtg5683dossjejbbbn"
  requestPath {
    key: "classifier"
    value: "sk-mnist:0.1"
  }
}
data {
  names: "class:0"
  names: "class:1"
  names: "class:2"
  names: "class:3"
  names: "class:4"
  names: "class:5"
  names: "class:6"
  names: "class:7"
  names: "class:8"
  names: "class:9"
  ndarray {
    values {
      list_value {
        values {
          number_value: 0.06666666666666667
        }
        values {
          number_value: 0.0
        }
        values {
          number_value: 0.16666666666666666
        }
        values {
          number_value: 0.13333333333333333
        }
        values {
          number_value: 0.1
        }
        values {
          number_value: 0.06666666666666667
        }
        values {
          number_value: 0.1
        }
        values {
          number_value: 0.03333333333333333
        }
        values {
          number_value: 0.23333333333333334
        }
        values {
          number_value: 0.1
        }
      }
    }
  }
}


[17]:
!minikube delete
πŸ”₯  Deleting "minikube" from virtualbox ...
πŸ’”  The "minikube" cluster has been deleted.
[ ]: