This page was generated from examples/models/sklearn_iris/sklearn_iris.ipynb.

Scikit-Learn IRIS Model

  • Wrap a scikit-learn python model for use as a prediction microservice in seldon-core

    • Run locally on Docker to test

    • Deploy on seldon-core running on a kubernetes cluster

Dependencies

pip install sklearn
pip install seldon-core

Setup Seldon Core

Use the setup notebook to Setup Cluster to setup Seldon Core with an ingress - either Ambassador or Istio.

Then port-forward to that ingress on localhost:8003 in a separate terminal either with:

  • Ambassador: kubectl port-forward $(kubectl get pods -n seldon-system -l app.kubernetes.io/name=ambassador -o jsonpath='{.items[0].metadata.name}') -n seldon-system 8003:8080

  • Istio: kubectl port-forward $(kubectl get pods -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].metadata.name}') -n istio-system 8003:8080

[ ]:
!kubectl create namespace seldon
[ ]:
!kubectl config set-context $(kubectl config current-context) --namespace=seldon

Create Seldon Core config file

[ ]:
%%writefile sklearn_iris_deployment.yaml
apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
  name: seldon-deployment-example
spec:
  name: sklearn-iris-deployment
  predictors:
  - componentSpecs:
    - spec:
        containers:
        - image: seldonio/sklearn-iris:0.3
          imagePullPolicy: IfNotPresent
          name: sklearn-iris-classifier
    graph:
      children: []
      endpoint:
        type: REST
      name: sklearn-iris-classifier
      type: MODEL
    name: sklearn-iris-predictor
    replicas: 1
[ ]:
!kubectl create -f sklearn_iris_deployment.yaml
[ ]:
!kubectl rollout status deploy/$(kubectl get deploy -l seldon-deployment-id=seldon-deployment-example \
                                 -o jsonpath='{.items[0].metadata.name}')
[ ]:
for i in range(60):
    state = !kubectl get sdep seldon-deployment-example -o jsonpath='{.status.state}'
    state = state[0]
    print(state)
    if state == "Available":
        break
    time.sleep(1)
assert state == "Available"
[ ]:
res = !curl  -s http://localhost:8003/seldon/seldon/seldon-deployment-example/api/v0.1/predictions -H "Content-Type: application/json" -d '{"data":{"ndarray":[[5.964,4.006,2.081,1.031]]}}'
[ ]:
res
[ ]:
print(res)
import json

j = json.loads(res[0])
assert j["data"]["ndarray"][0][0] > 0.0

REST request with raw_data

[ ]:
from seldon_core.seldon_client import SeldonClient

sc = SeldonClient(deployment_name="seldon-deployment-example", namespace="seldon")
res = sc.predict(
    gateway="istio",
    gateway_endpoint="localhost:8003",
    transport="rest",
    raw_data={"data": {"ndarray": [[5.964, 4.006, 2.081, 1.031]]}},
)
print(res.response)
assert res.success == True

gRCP request with proto raw_data

[ ]:
from seldon_core.utils import json_to_seldon_message

proto_raw_data = json_to_seldon_message(
    {"data": {"ndarray": [[5.964, 4.006, 2.081, 1.031]]}}
)
res = sc.predict(
    gateway="istio",
    gateway_endpoint="localhost:8003",
    transport="grpc",
    raw_data=proto_raw_data,
)
print(res)
assert res.success == True
[ ]:
!kubectl delete -f sklearn_iris_deployment.yaml
[ ]: