From 3b5073ae8f348aa50d1f9099eac048a941555893 Mon Sep 17 00:00:00 2001 From: Dariusz Trawinski Date: Wed, 20 Mar 2019 22:27:24 +0100 Subject: [PATCH 1/4] OpenVINO Model Server deployer --- .../openvino/ovms-deployer/README.md | 32 ++++ .../ovms-deployer/containers/Dockerfile | 53 +++++++ .../containers/apply_template.py | 14 ++ .../ovms-deployer/containers/deploy.sh | 147 ++++++++++++++++++ .../openvino/ovms-deployer/containers/ovms.j2 | 39 +++++ .../ovms-deployer/containers/requirements.txt | 1 + contrib/samples/openvino/deployer/README.md | 12 ++ contrib/samples/openvino/deployer/deployer.py | 32 ++++ 8 files changed, 330 insertions(+) create mode 100644 contrib/components/openvino/ovms-deployer/README.md create mode 100644 contrib/components/openvino/ovms-deployer/containers/Dockerfile create mode 100644 contrib/components/openvino/ovms-deployer/containers/apply_template.py create mode 100755 contrib/components/openvino/ovms-deployer/containers/deploy.sh create mode 100644 contrib/components/openvino/ovms-deployer/containers/ovms.j2 create mode 100644 contrib/components/openvino/ovms-deployer/containers/requirements.txt create mode 100644 contrib/samples/openvino/deployer/README.md create mode 100644 contrib/samples/openvino/deployer/deployer.py diff --git a/contrib/components/openvino/ovms-deployer/README.md b/contrib/components/openvino/ovms-deployer/README.md new file mode 100644 index 00000000000..2bd5194fe63 --- /dev/null +++ b/contrib/components/openvino/ovms-deployer/README.md @@ -0,0 +1,32 @@ +# Deployer of OpenVINO Model Server + +This component triggers deployment of [OpenVINO Model Server](https://github.com/IntelAI/OpenVINO-model-server) in Kubernetes. + +It applies the passed component parameters on jinja template and applied deployment and server records. + + + +```bash +./deploy.sh + --model-export-path + --cluster-name + --namespace + --server-name + --replicas + --batch-size + --model-version-policy + --log-level +``` + + +## building docker image + + +```bash +docker build --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy . +``` + +## testing the image locally + + +``` \ No newline at end of file diff --git a/contrib/components/openvino/ovms-deployer/containers/Dockerfile b/contrib/components/openvino/ovms-deployer/containers/Dockerfile new file mode 100644 index 00000000000..6339c8a02d9 --- /dev/null +++ b/contrib/components/openvino/ovms-deployer/containers/Dockerfile @@ -0,0 +1,53 @@ +FROM intelpython/intelpython3_core + +RUN apt-get update -q && apt-get upgrade -y && \ + apt-get install -y -qq --no-install-recommends \ + apt-transport-https \ + ca-certificates \ + git \ + gnupg \ + lsb-release \ + unzip \ + wget && \ + wget -O /opt/ks_0.12.0_linux_amd64.tar.gz \ + https://github.com/ksonnet/ksonnet/releases/download/v0.12.0/ks_0.12.0_linux_amd64.tar.gz && \ + tar -C /opt -xzf /opt/ks_0.12.0_linux_amd64.tar.gz && \ + cp /opt/ks_0.12.0_linux_amd64/ks /bin/. && \ + rm -f /opt/ks_0.12.0_linux_amd64.tar.gz && \ + wget -O /bin/kubectl \ + https://storage.googleapis.com/kubernetes-release/release/v1.11.2/bin/linux/amd64/kubectl && \ + chmod u+x /bin/kubectl && \ + wget -O /opt/kubernetes_v1.11.2 \ + https://github.com/kubernetes/kubernetes/archive/v1.11.2.tar.gz && \ + mkdir -p /src && \ + tar -C /src -xzf /opt/kubernetes_v1.11.2 && \ + rm -rf /opt/kubernetes_v1.11.2 && \ + wget -O /opt/google-apt-key.gpg \ + https://packages.cloud.google.com/apt/doc/apt-key.gpg && \ + apt-key add /opt/google-apt-key.gpg && \ + export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \ + echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" >> \ + /etc/apt/sources.list.d/google-cloud-sdk.list && \ + apt-get update -q && \ + apt-get install -y -qq --no-install-recommends google-cloud-sdk && \ + gcloud config set component_manager/disable_update_check true + +ENV KUBEFLOW_VERSION v0.2.5 + +# Checkout the kubeflow packages at image build time so that we do not +# require calling in to the GitHub API at run time. +RUN cd /src && \ + mkdir -p github.com/kubeflow && \ + cd github.com/kubeflow && \ + git clone https://github.com/kubeflow/kubeflow && \ + cd kubeflow && \ + git checkout ${KUBEFLOW_VERSION} + +ADD . /deploy/ +WORKDIR /deploy +RUN pip install -r requirements.txt +ENTRYPOINT ["./deploy.sh"] + + + + diff --git a/contrib/components/openvino/ovms-deployer/containers/apply_template.py b/contrib/components/openvino/ovms-deployer/containers/apply_template.py new file mode 100644 index 00000000000..f3c5243a95e --- /dev/null +++ b/contrib/components/openvino/ovms-deployer/containers/apply_template.py @@ -0,0 +1,14 @@ +from jinja2 import Template +import os + + +f = open("ovms.j2","r") +ovms_template = f.read() +t = Template(ovms_template) +ovms_k8s = t.render(os.environ) +f.close +f = open("ovms.yaml", "w") +f.write(ovms_k8s) +f.close + +print(ovms_k8s) \ No newline at end of file diff --git a/contrib/components/openvino/ovms-deployer/containers/deploy.sh b/contrib/components/openvino/ovms-deployer/containers/deploy.sh new file mode 100755 index 00000000000..500c840c10d --- /dev/null +++ b/contrib/components/openvino/ovms-deployer/containers/deploy.sh @@ -0,0 +1,147 @@ +#!/bin/bash -e + +set -x + +KUBERNETES_NAMESPACE="${KUBERNETES_NAMESPACE:-kubeflow}" +SERVER_NAME="${SERVER_NAME:-model-server}" + +while (($#)); do + case $1 in + "--model-export-path") + shift + export MODEL_EXPORT_PATH="$1" + shift + ;; + "--cluster-name") + shift + CLUSTER_NAME="$1" + shift + ;; + "--namespace") + shift + KUBERNETES_NAMESPACE="$1" + shift + ;; + "--server-name") + shift + SERVER_NAME="$1" + shift + ;; + "--replicas") + shift + export REPLICAS="$1" + shift + ;; + "--batch-size") + shift + export BATCH_SIZE="$1" + shift + ;; + "--model-version-policy") + shift + export MODEL_VERSION_POLICY="$1" + shift + ;; + "--log-level") + shift + export LOG_LEVEL="$1" + shift + ;; + *) + echo "Unknown argument: '$1'" + exit 1 + ;; + esac +done + +if [ -z "${MODEL_EXPORT_PATH}" ]; then + echo "You must specify a path to the saved model" + exit 1 +fi + +echo "Deploying the model '${MODEL_EXPORT_PATH}'" + +if [ -z "${CLUSTER_NAME}" ]; then + CLUSTER_NAME=$(wget -q -O- --header="Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster-name) +fi + +# Ensure the server name is not more than 63 characters. +export SERVER_NAME="${SERVER_NAME:0:63}" +# Trim any trailing hyphens from the server name. +while [[ "${SERVER_NAME:(-1)}" == "-" ]]; do SERVER_NAME="${SERVER_NAME::-1}"; done + +echo "Deploying ${SERVER_NAME} to the cluster ${CLUSTER_NAME}" + +# Connect kubectl to the local cluster +kubectl config set-cluster "${CLUSTER_NAME}" --server=https://kubernetes.default --certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt +kubectl config set-credentials pipeline --token "$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" +kubectl config set-context kubeflow --cluster "${CLUSTER_NAME}" --user pipeline +kubectl config use-context kubeflow + +python apply_template.py + +kubectl apply -f ovms.yaml + +sleep 10 +echo "Waiting for the TF Serving deployment to have at least one available replica..." +timeout="1000" +start_time=`date +%s` +while [[ $(kubectl get deploy --namespace "${KUBERNETES_NAMESPACE}" --selector=app="ovms-${SERVER_NAME}" --output=jsonpath='{.items[0].status.availableReplicas}') < "1" ]]; do + current_time=`date +%s` + elapsed_time=$(expr $current_time + 1 - $start_time) + if [[ $elapsed_time -gt $timeout ]];then + echo "timeout" + exit 1 + fi + sleep 5 +done + +echo "Obtaining the pod name..." +start_time=`date +%s` +pod_name="" +while [[ $pod_name == "" ]];do + pod_name=$(kubectl get pods --namespace "${KUBERNETES_NAMESPACE}" --selector=app="ovms-${SERVER_NAME}" --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') + current_time=`date +%s` + elapsed_time=$(expr $current_time + 1 - $start_time) + if [[ $elapsed_time -gt $timeout ]];then + echo "timeout" + exit 1 + fi + sleep 2 +done +echo "Pod name is: " $pod_name + +# Wait for the pod container to start running +echo "Waiting for the TF Serving pod to start running..." +start_time=`date +%s` +exit_code="1" +while [[ $exit_code != "0" ]];do + kubectl get po ${pod_name} --namespace "${KUBERNETES_NAMESPACE}" -o jsonpath='{.status.containerStatuses[0].state.running}' + exit_code=$? + current_time=`date +%s` + elapsed_time=$(expr $current_time + 1 - $start_time) + if [[ $elapsed_time -gt $timeout ]];then + echo "timeout" + exit 1 + fi + sleep 2 +done + +start_time=`date +%s` +while [ -z "$(kubectl get po ${pod_name} --namespace "${KUBERNETES_NAMESPACE}" -o jsonpath='{.status.containerStatuses[0].state.running}')" ]; do + current_time=`date +%s` + elapsed_time=$(expr $current_time + 1 - $start_time) + if [[ $elapsed_time -gt $timeout ]];then + echo "timeout" + exit 1 + fi + sleep 5 +done + +# Wait a little while and then grab the logs of the running server +sleep 10 +echo "Logs from the TF Serving pod:" +kubectl logs ${pod_name} --namespace "${KUBERNETES_NAMESPACE}" + +echo "ovms-${SERVER_NAME}:80" > /tmp/server_endpoint + diff --git a/contrib/components/openvino/ovms-deployer/containers/ovms.j2 b/contrib/components/openvino/ovms-deployer/containers/ovms.j2 new file mode 100644 index 00000000000..063e5d535b7 --- /dev/null +++ b/contrib/components/openvino/ovms-deployer/containers/ovms.j2 @@ -0,0 +1,39 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ovms-{{ SERVER_NAME }} + labels: + app: ovms-{{ SERVER_NAME }} +spec: + selector: + matchLabels: + app: ovms-{{ SERVER_NAME }} + replicas: {{ REPLICAS }} + template: + metadata: + labels: + app: ovms-{{ SERVER_NAME }} + spec: + containers: + - name: ovms-{{ SERVER_NAME }} + image: intelaipg/openvino-model-server:latest + ports: + - containerPort: 80 + env: + - name: LOG_LEVEL + value: "{{ LOG_LEVEL }}" + command: ["/ie-serving-py/start_server.sh"] + args: ["ie_serving", "model", "--model_path", "{{ MODEL_EXPORT_PATH }}", "--model_name", "{{ SERVER_NAME }}", "--port", "80", "--batch_size", "{{ BATCH_SIZE }}"] +--- +apiVersion: v1 +kind: Service +metadata: + name: ovms-{{ SERVER_NAME }} +spec: + selector: + app: ovms-{{ SERVER_NAME }} + ports: + - protocol: TCP + port: 80 + targetPort: 80 diff --git a/contrib/components/openvino/ovms-deployer/containers/requirements.txt b/contrib/components/openvino/ovms-deployer/containers/requirements.txt new file mode 100644 index 00000000000..b60338e30ad --- /dev/null +++ b/contrib/components/openvino/ovms-deployer/containers/requirements.txt @@ -0,0 +1 @@ +jinja2==2.10 diff --git a/contrib/samples/openvino/deployer/README.md b/contrib/samples/openvino/deployer/README.md new file mode 100644 index 00000000000..c0647d85be8 --- /dev/null +++ b/contrib/samples/openvino/deployer/README.md @@ -0,0 +1,12 @@ +# OpenVINO Model Server deployment pipeline + +This is an example of a one step pipeline implementation for [OpenVINO Model Server deployer](../../../components/openvino/ovms-deployer). + +## Parameters + +- model_export_path - local or gs path to the folder with numerical subfolders storing OpenVINO models +- server_name - Kubernetes service name to be deployed which is equal to service model name +- log_level - DEBUG/INFO/ERROR +- batch_size - which batch size should be loaded in the served model: 'auto' or numerical values +- model_version_policy - parameter defining which version should be served in OVMS. Examples: '{"latest": { "num_versions":2 }}') / +{"specific": { "versions":[1, 3] }} / {"all": {}} diff --git a/contrib/samples/openvino/deployer/deployer.py b/contrib/samples/openvino/deployer/deployer.py new file mode 100644 index 00000000000..826f1a5713d --- /dev/null +++ b/contrib/samples/openvino/deployer/deployer.py @@ -0,0 +1,32 @@ +import kfp.dsl as dsl + + +@dsl.pipeline( + name='OVMS deployment pipeline', + description='Deploy OpenVINO Model Server instance in Kubernetes' +) +def openvino_predict( + model_export_path = dsl.PipelineParam(name='model-export-path', value='gs://intelai_public_models/resnet_50_i8'), + server_name = dsl.PipelineParam(name='server-name', value='resnet'), + log_level = dsl.PipelineParam(name='log-level', value='DEBUG'), + batch_size = dsl.PipelineParam(name='batch-size', value='auto'), + model_version_policy = dsl.PipelineParam(name='model-version-policy', value='{"latest": { "num_versions":2 }}'), + replicas = dsl.PipelineParam(name='replicas', value=1)): + + """A one-step pipeline.""" + dsl.ContainerOp( + name='openvino-model-server-deployer', + image='gcr.io/constant-cubist-173123/inference_server/ml_deployer:9', + command=['./deploy.sh'], + arguments=[ + '--model-export-path', model_export_path, + '--server-name', server_name, + '--log-level', log_level, + '--batch-size', batch_size, + '--model-version-policy', model_version_policy, + '--replicas', replicas], + file_outputs={'output':'/tmp/server_endpoint'}) + +if __name__ == '__main__': + import kfp.compiler as compiler + compiler.Compiler().compile(openvino_predict, __file__ + '.tar.gz') \ No newline at end of file From 640059b2efbf66bed3a3a9399258a6e212c8fd22 Mon Sep 17 00:00:00 2001 From: Dariusz Trawinski Date: Thu, 21 Mar 2019 00:02:25 +0100 Subject: [PATCH 2/4] changes after review --- .../ovms-deployer/containers/deploy.sh | 16 ++- .../samples/openvino/deployer/component.yaml | 107 ++++++++++++++++++ 2 files changed, 118 insertions(+), 5 deletions(-) create mode 100644 contrib/samples/openvino/deployer/component.yaml diff --git a/contrib/components/openvino/ovms-deployer/containers/deploy.sh b/contrib/components/openvino/ovms-deployer/containers/deploy.sh index 500c840c10d..7bfc425350b 100755 --- a/contrib/components/openvino/ovms-deployer/containers/deploy.sh +++ b/contrib/components/openvino/ovms-deployer/containers/deploy.sh @@ -4,6 +4,7 @@ set -x KUBERNETES_NAMESPACE="${KUBERNETES_NAMESPACE:-kubeflow}" SERVER_NAME="${SERVER_NAME:-model-server}" +SERVER_ENDPOINT_OUTPUT_FILE="${SERVER_ENDPOINT_OUTPUT_FILE:-/tmp/server_endpoint/data}" while (($#)); do case $1 in @@ -32,21 +33,26 @@ while (($#)); do export REPLICAS="$1" shift ;; - "--batch-size") + "--batch-size") shift export BATCH_SIZE="$1" shift ;; - "--model-version-policy") + "--model-version-policy") shift export MODEL_VERSION_POLICY="$1" shift ;; - "--log-level") + "--log-level") shift export LOG_LEVEL="$1" shift ;; + "--server-endpoint-output-file") + shift + SERVER_ENDPOINT_OUTPUT_FILE = "$1" + shift + ;; *) echo "Unknown argument: '$1'" exit 1 @@ -143,5 +149,5 @@ sleep 10 echo "Logs from the TF Serving pod:" kubectl logs ${pod_name} --namespace "${KUBERNETES_NAMESPACE}" -echo "ovms-${SERVER_NAME}:80" > /tmp/server_endpoint - +mkdir -p "$(dirname "$SERVER_ENDPOINT_OUTPUT_FILE")" +echo "ovms-${SERVER_NAME}:80" > "$SERVER_ENDPOINT_OUTPUT_FILE" diff --git a/contrib/samples/openvino/deployer/component.yaml b/contrib/samples/openvino/deployer/component.yaml new file mode 100644 index 00000000000..6b12d9a90a1 --- /dev/null +++ b/contrib/samples/openvino/deployer/component.yaml @@ -0,0 +1,107 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: ovms-deployment-pipeline- +spec: + arguments: + parameters: + - name: model-export-path + value: gs://intelai_public_models/resnet_50_i8 + - name: server-name + value: resnet + - name: log-level + value: DEBUG + - name: batch-size + value: auto + - name: model-version-policy + value: '{"latest": { "num_versions":2 }}' + - name: replicas + value: '1' + entrypoint: ovms-deployment-pipeline + serviceAccountName: pipeline-runner + templates: + - container: + args: + - --model-export-path + - '{{inputs.parameters.model-export-path}}' + - --server-name + - '{{inputs.parameters.server-name}}' + - --log-level + - '{{inputs.parameters.log-level}}' + - --batch-size + - '{{inputs.parameters.batch-size}}' + - --model-version-policy + - '{{inputs.parameters.model-version-policy}}' + - --replicas + - '{{inputs.parameters.replicas}}' + command: + - ./deploy.sh + image: gcr.io/constant-cubist-173123/inference_server/ml_deployer:9 + inputs: + parameters: + - name: batch-size + - name: log-level + - name: model-export-path + - name: model-version-policy + - name: replicas + - name: server-name + name: openvino-model-server-deployer + outputs: + artifacts: + - name: mlpipeline-ui-metadata + path: /mlpipeline-ui-metadata.json + s3: + accessKeySecret: + key: accesskey + name: mlpipeline-minio-artifact + bucket: mlpipeline + endpoint: minio-service.kubeflow:9000 + insecure: true + key: runs/{{workflow.uid}}/{{pod.name}}/mlpipeline-ui-metadata.tgz + secretKeySecret: + key: secretkey + name: mlpipeline-minio-artifact + - name: mlpipeline-metrics + path: /mlpipeline-metrics.json + s3: + accessKeySecret: + key: accesskey + name: mlpipeline-minio-artifact + bucket: mlpipeline + endpoint: minio-service.kubeflow:9000 + insecure: true + key: runs/{{workflow.uid}}/{{pod.name}}/mlpipeline-metrics.tgz + secretKeySecret: + key: secretkey + name: mlpipeline-minio-artifact + parameters: + - name: openvino-model-server-deployer-output + valueFrom: + path: /tmp/server_endpoint + - dag: + tasks: + - arguments: + parameters: + - name: batch-size + value: '{{inputs.parameters.batch-size}}' + - name: log-level + value: '{{inputs.parameters.log-level}}' + - name: model-export-path + value: '{{inputs.parameters.model-export-path}}' + - name: model-version-policy + value: '{{inputs.parameters.model-version-policy}}' + - name: replicas + value: '{{inputs.parameters.replicas}}' + - name: server-name + value: '{{inputs.parameters.server-name}}' + name: openvino-model-server-deployer + template: openvino-model-server-deployer + inputs: + parameters: + - name: batch-size + - name: log-level + - name: model-export-path + - name: model-version-policy + - name: replicas + - name: server-name + name: ovms-deployment-pipeline \ No newline at end of file From 1c349870cf043e3352d347fd606764a534f34431 Mon Sep 17 00:00:00 2001 From: Dariusz Trawinski Date: Thu, 21 Mar 2019 15:17:00 +0100 Subject: [PATCH 3/4] added model server evaluation feature and step --- .../ovms-deployer/containers/Dockerfile | 15 +- .../ovms-deployer/containers/classes.py | 1000 +++++++++++++++++ .../ovms-deployer/containers/deploy.sh | 1 + .../ovms-deployer/containers/evaluate.py | 141 +++ .../ovms-deployer/containers/requirements.txt | 2 + contrib/samples/openvino/deployer/deployer.py | 27 +- 6 files changed, 1170 insertions(+), 16 deletions(-) create mode 100644 contrib/components/openvino/ovms-deployer/containers/classes.py create mode 100755 contrib/components/openvino/ovms-deployer/containers/evaluate.py diff --git a/contrib/components/openvino/ovms-deployer/containers/Dockerfile b/contrib/components/openvino/ovms-deployer/containers/Dockerfile index 6339c8a02d9..ff728ae3e6e 100644 --- a/contrib/components/openvino/ovms-deployer/containers/Dockerfile +++ b/contrib/components/openvino/ovms-deployer/containers/Dockerfile @@ -32,20 +32,11 @@ RUN apt-get update -q && apt-get upgrade -y && \ apt-get install -y -qq --no-install-recommends google-cloud-sdk && \ gcloud config set component_manager/disable_update_check true -ENV KUBEFLOW_VERSION v0.2.5 - -# Checkout the kubeflow packages at image build time so that we do not -# require calling in to the GitHub API at run time. -RUN cd /src && \ - mkdir -p github.com/kubeflow && \ - cd github.com/kubeflow && \ - git clone https://github.com/kubeflow/kubeflow && \ - cd kubeflow && \ - git checkout ${KUBEFLOW_VERSION} - -ADD . /deploy/ +RUN conda install -y opencv && conda clean -a -y +ADD requirements.txt /deploy/ WORKDIR /deploy RUN pip install -r requirements.txt +ADD apply_template.py deploy.sh evaluate.py ovms.j2 classes.py /deploy/ ENTRYPOINT ["./deploy.sh"] diff --git a/contrib/components/openvino/ovms-deployer/containers/classes.py b/contrib/components/openvino/ovms-deployer/containers/classes.py new file mode 100644 index 00000000000..9a27f0017d6 --- /dev/null +++ b/contrib/components/openvino/ovms-deployer/containers/classes.py @@ -0,0 +1,1000 @@ +imagenet_classes = {0: 'tench, Tinca tinca', + 1: 'goldfish, Carassius auratus', + 2: 'great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias', + 3: 'tiger shark, Galeocerdo cuvieri', + 4: 'hammerhead, hammerhead shark', + 5: 'electric ray, crampfish, numbfish, torpedo', + 6: 'stingray', + 7: 'cock', + 8: 'hen', + 9: 'ostrich, Struthio camelus', + 10: 'brambling, Fringilla montifringilla', + 11: 'goldfinch, Carduelis carduelis', + 12: 'house finch, linnet, Carpodacus mexicanus', + 13: 'junco, snowbird', + 14: 'indigo bunting, indigo finch, indigo bird, Passerina cyanea', + 15: 'robin, American robin, Turdus migratorius', + 16: 'bulbul', + 17: 'jay', + 18: 'magpie', + 19: 'chickadee', + 20: 'water ouzel, dipper', + 21: 'kite', + 22: 'bald eagle, American eagle, Haliaeetus leucocephalus', + 23: 'vulture', + 24: 'great grey owl, great gray owl, Strix nebulosa', + 25: 'European fire salamander, Salamandra salamandra', + 26: 'common newt, Triturus vulgaris', + 27: 'eft', + 28: 'spotted salamander, Ambystoma maculatum', + 29: 'axolotl, mud puppy, Ambystoma mexicanum', + 30: 'bullfrog, Rana catesbeiana', + 31: 'tree frog, tree-frog', + 32: 'tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui', + 33: 'loggerhead, loggerhead turtle, Caretta caretta', + 34: 'leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea', + 35: 'mud turtle', + 36: 'terrapin', + 37: 'box turtle, box tortoise', + 38: 'banded gecko', + 39: 'common iguana, iguana, Iguana iguana', + 40: 'American chameleon, anole, Anolis carolinensis', + 41: 'whiptail, whiptail lizard', + 42: 'agama', + 43: 'frilled lizard, Chlamydosaurus kingi', + 44: 'alligator lizard', + 45: 'Gila monster, Heloderma suspectum', + 46: 'green lizard, Lacerta viridis', + 47: 'African chameleon, Chamaeleo chamaeleon', + 48: 'Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis', + 49: 'African crocodile, Nile crocodile, Crocodylus niloticus', + 50: 'American alligator, Alligator mississipiensis', + 51: 'triceratops', + 52: 'thunder snake, worm snake, Carphophis amoenus', + 53: 'ringneck snake, ring-necked snake, ring snake', + 54: 'hognose snake, puff adder, sand viper', + 55: 'green snake, grass snake', + 56: 'king snake, kingsnake', + 57: 'garter snake, grass snake', + 58: 'water snake', + 59: 'vine snake', + 60: 'night snake, Hypsiglena torquata', + 61: 'boa constrictor, Constrictor constrictor', + 62: 'rock python, rock snake, Python sebae', + 63: 'Indian cobra, Naja naja', + 64: 'green mamba', + 65: 'sea snake', + 66: 'horned viper, cerastes, sand viper, horned asp, Cerastes cornutus', + 67: 'diamondback, diamondback rattlesnake, Crotalus adamanteus', + 68: 'sidewinder, horned rattlesnake, Crotalus cerastes', + 69: 'trilobite', + 70: 'harvestman, daddy longlegs, Phalangium opilio', + 71: 'scorpion', + 72: 'black and gold garden spider, Argiope aurantia', + 73: 'barn spider, Araneus cavaticus', + 74: 'garden spider, Aranea diademata', + 75: 'black widow, Latrodectus mactans', + 76: 'tarantula', + 77: 'wolf spider, hunting spider', + 78: 'tick', + 79: 'centipede', + 80: 'black grouse', + 81: 'ptarmigan', + 82: 'ruffed grouse, partridge, Bonasa umbellus', + 83: 'prairie chicken, prairie grouse, prairie fowl', + 84: 'peacock', + 85: 'quail', + 86: 'partridge', + 87: 'African grey, African gray, Psittacus erithacus', + 88: 'macaw', + 89: 'sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita', + 90: 'lorikeet', + 91: 'coucal', + 92: 'bee eater', + 93: 'hornbill', + 94: 'hummingbird', + 95: 'jacamar', + 96: 'toucan', + 97: 'drake', + 98: 'red-breasted merganser, Mergus serrator', + 99: 'goose', + 100: 'black swan, Cygnus atratus', + 101: 'tusker', + 102: 'echidna, spiny anteater, anteater', + 103: 'platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus', + 104: 'wallaby, brush kangaroo', + 105: 'koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus', + 106: 'wombat', + 107: 'jellyfish', + 108: 'sea anemone, anemone', + 109: 'brain coral', + 110: 'flatworm, platyhelminth', + 111: 'nematode, nematode worm, roundworm', + 112: 'conch', + 113: 'snail', + 114: 'slug', + 115: 'sea slug, nudibranch', + 116: 'chiton, coat-of-mail shell, sea cradle, polyplacophore', + 117: 'chambered nautilus, pearly nautilus, nautilus', + 118: 'Dungeness crab, Cancer magister', + 119: 'rock crab, Cancer irroratus', + 120: 'fiddler crab', + 121: 'king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica', + 122: 'American lobster, Northern lobster, Maine lobster, Homarus americanus', + 123: 'spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish', + 124: 'crayfish, crawfish, crawdad, crawdaddy', + 125: 'hermit crab', + 126: 'isopod', + 127: 'white stork, Ciconia ciconia', + 128: 'black stork, Ciconia nigra', + 129: 'spoonbill', + 130: 'flamingo', + 131: 'little blue heron, Egretta caerulea', + 132: 'American egret, great white heron, Egretta albus', + 133: 'bittern', + 134: 'crane', + 135: 'limpkin, Aramus pictus', + 136: 'European gallinule, Porphyrio porphyrio', + 137: 'American coot, marsh hen, mud hen, water hen, Fulica americana', + 138: 'bustard', + 139: 'ruddy turnstone, Arenaria interpres', + 140: 'red-backed sandpiper, dunlin, Erolia alpina', + 141: 'redshank, Tringa totanus', + 142: 'dowitcher', + 143: 'oystercatcher, oyster catcher', + 144: 'pelican', + 145: 'king penguin, Aptenodytes patagonica', + 146: 'albatross, mollymawk', + 147: 'grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus', + 148: 'killer whale, killer, orca, grampus, sea wolf, Orcinus orca', + 149: 'dugong, Dugong dugon', + 150: 'sea lion', + 151: 'Chihuahua', + 152: 'Japanese spaniel', + 153: 'Maltese dog, Maltese terrier, Maltese', + 154: 'Pekinese, Pekingese, Peke', + 155: 'Shih-Tzu', + 156: 'Blenheim spaniel', + 157: 'papillon', + 158: 'toy terrier', + 159: 'Rhodesian ridgeback', + 160: 'Afghan hound, Afghan', + 161: 'basset, basset hound', + 162: 'beagle', + 163: 'bloodhound, sleuthhound', + 164: 'bluetick', + 165: 'black-and-tan coonhound', + 166: 'Walker hound, Walker foxhound', + 167: 'English foxhound', + 168: 'redbone', + 169: 'borzoi, Russian wolfhound', + 170: 'Irish wolfhound', + 171: 'Italian greyhound', + 172: 'whippet', + 173: 'Ibizan hound, Ibizan Podenco', + 174: 'Norwegian elkhound, elkhound', + 175: 'otterhound, otter hound', + 176: 'Saluki, gazelle hound', + 177: 'Scottish deerhound, deerhound', + 178: 'Weimaraner', + 179: 'Staffordshire bullterrier, Staffordshire bull terrier', + 180: 'American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier', + 181: 'Bedlington terrier', + 182: 'Border terrier', + 183: 'Kerry blue terrier', + 184: 'Irish terrier', + 185: 'Norfolk terrier', + 186: 'Norwich terrier', + 187: 'Yorkshire terrier', + 188: 'wire-haired fox terrier', + 189: 'Lakeland terrier', + 190: 'Sealyham terrier, Sealyham', + 191: 'Airedale, Airedale terrier', + 192: 'cairn, cairn terrier', + 193: 'Australian terrier', + 194: 'Dandie Dinmont, Dandie Dinmont terrier', + 195: 'Boston bull, Boston terrier', + 196: 'miniature schnauzer', + 197: 'giant schnauzer', + 198: 'standard schnauzer', + 199: 'Scotch terrier, Scottish terrier, Scottie', + 200: 'Tibetan terrier, chrysanthemum dog', + 201: 'silky terrier, Sydney silky', + 202: 'soft-coated wheaten terrier', + 203: 'West Highland white terrier', + 204: 'Lhasa, Lhasa apso', + 205: 'flat-coated retriever', + 206: 'curly-coated retriever', + 207: 'golden retriever', + 208: 'Labrador retriever', + 209: 'Chesapeake Bay retriever', + 210: 'German short-haired pointer', + 211: 'vizsla, Hungarian pointer', + 212: 'English setter', + 213: 'Irish setter, red setter', + 214: 'Gordon setter', + 215: 'Brittany spaniel', + 216: 'clumber, clumber spaniel', + 217: 'English springer, English springer spaniel', + 218: 'Welsh springer spaniel', + 219: 'cocker spaniel, English cocker spaniel, cocker', + 220: 'Sussex spaniel', + 221: 'Irish water spaniel', + 222: 'kuvasz', + 223: 'schipperke', + 224: 'groenendael', + 225: 'malinois', + 226: 'briard', + 227: 'kelpie', + 228: 'komondor', + 229: 'Old English sheepdog, bobtail', + 230: 'Shetland sheepdog, Shetland sheep dog, Shetland', + 231: 'collie', + 232: 'Border collie', + 233: 'Bouvier des Flandres, Bouviers des Flandres', + 234: 'Rottweiler', + 235: 'German shepherd, German shepherd dog, German police dog, alsatian', + 236: 'Doberman, Doberman pinscher', + 237: 'miniature pinscher', + 238: 'Greater Swiss Mountain dog', + 239: 'Bernese mountain dog', + 240: 'Appenzeller', + 241: 'EntleBucher', + 242: 'boxer', + 243: 'bull mastiff', + 244: 'Tibetan mastiff', + 245: 'French bulldog', + 246: 'Great Dane', + 247: 'Saint Bernard, St Bernard', + 248: 'Eskimo dog, husky', + 249: 'malamute, malemute, Alaskan malamute', + 250: 'Siberian husky', + 251: 'dalmatian, coach dog, carriage dog', + 252: 'affenpinscher, monkey pinscher, monkey dog', + 253: 'basenji', + 254: 'pug, pug-dog', + 255: 'Leonberg', + 256: 'Newfoundland, Newfoundland dog', + 257: 'Great Pyrenees', + 258: 'Samoyed, Samoyede', + 259: 'Pomeranian', + 260: 'chow, chow chow', + 261: 'keeshond', + 262: 'Brabancon griffon', + 263: 'Pembroke, Pembroke Welsh corgi', + 264: 'Cardigan, Cardigan Welsh corgi', + 265: 'toy poodle', + 266: 'miniature poodle', + 267: 'standard poodle', + 268: 'Mexican hairless', + 269: 'timber wolf, grey wolf, gray wolf, Canis lupus', + 270: 'white wolf, Arctic wolf, Canis lupus tundrarum', + 271: 'red wolf, maned wolf, Canis rufus, Canis niger', + 272: 'coyote, prairie wolf, brush wolf, Canis latrans', + 273: 'dingo, warrigal, warragal, Canis dingo', + 274: 'dhole, Cuon alpinus', + 275: 'African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus', + 276: 'hyena, hyaena', + 277: 'red fox, Vulpes vulpes', + 278: 'kit fox, Vulpes macrotis', + 279: 'Arctic fox, white fox, Alopex lagopus', + 280: 'grey fox, gray fox, Urocyon cinereoargenteus', + 281: 'tabby, tabby cat', + 282: 'tiger cat', + 283: 'Persian cat', + 284: 'Siamese cat, Siamese', + 285: 'Egyptian cat', + 286: 'cougar, puma, catamount, mountain lion, painter, panther, Felis concolor', + 287: 'lynx, catamount', + 288: 'leopard, Panthera pardus', + 289: 'snow leopard, ounce, Panthera uncia', + 290: 'jaguar, panther, Panthera onca, Felis onca', + 291: 'lion, king of beasts, Panthera leo', + 292: 'tiger, Panthera tigris', + 293: 'cheetah, chetah, Acinonyx jubatus', + 294: 'brown bear, bruin, Ursus arctos', + 295: 'American black bear, black bear, Ursus americanus, Euarctos americanus', + 296: 'ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus', + 297: 'sloth bear, Melursus ursinus, Ursus ursinus', + 298: 'mongoose', + 299: 'meerkat, mierkat', + 300: 'tiger beetle', + 301: 'ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle', + 302: 'ground beetle, carabid beetle', + 303: 'long-horned beetle, longicorn, longicorn beetle', + 304: 'leaf beetle, chrysomelid', + 305: 'dung beetle', + 306: 'rhinoceros beetle', + 307: 'weevil', + 308: 'fly', + 309: 'bee', + 310: 'ant, emmet, pismire', + 311: 'grasshopper, hopper', + 312: 'cricket', + 313: 'walking stick, walkingstick, stick insect', + 314: 'cockroach, roach', + 315: 'mantis, mantid', + 316: 'cicada, cicala', + 317: 'leafhopper', + 318: 'lacewing, lacewing fly', + 319: "dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk", + 320: 'damselfly', + 321: 'admiral', + 322: 'ringlet, ringlet butterfly', + 323: 'monarch, monarch butterfly, milkweed butterfly, Danaus plexippus', + 324: 'cabbage butterfly', + 325: 'sulphur butterfly, sulfur butterfly', + 326: 'lycaenid, lycaenid butterfly', + 327: 'starfish, sea star', + 328: 'sea urchin', + 329: 'sea cucumber, holothurian', + 330: 'wood rabbit, cottontail, cottontail rabbit', + 331: 'hare', + 332: 'Angora, Angora rabbit', + 333: 'hamster', + 334: 'porcupine, hedgehog', + 335: 'fox squirrel, eastern fox squirrel, Sciurus niger', + 336: 'marmot', + 337: 'beaver', + 338: 'guinea pig, Cavia cobaya', + 339: 'sorrel', + 340: 'zebra', + 341: 'hog, pig, grunter, squealer, Sus scrofa', + 342: 'wild boar, boar, Sus scrofa', + 343: 'warthog', + 344: 'hippopotamus, hippo, river horse, Hippopotamus amphibius', + 345: 'ox', + 346: 'water buffalo, water ox, Asiatic buffalo, Bubalus bubalis', + 347: 'bison', + 348: 'ram, tup', + 349: 'bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis', + 350: 'ibex, Capra ibex', + 351: 'hartebeest', + 352: 'impala, Aepyceros melampus', + 353: 'gazelle', + 354: 'Arabian camel, dromedary, Camelus dromedarius', + 355: 'llama', + 356: 'weasel', + 357: 'mink', + 358: 'polecat, fitch, foulmart, foumart, Mustela putorius', + 359: 'black-footed ferret, ferret, Mustela nigripes', + 360: 'otter', + 361: 'skunk, polecat, wood pussy', + 362: 'badger', + 363: 'armadillo', + 364: 'three-toed sloth, ai, Bradypus tridactylus', + 365: 'orangutan, orang, orangutang, Pongo pygmaeus', + 366: 'gorilla, Gorilla gorilla', + 367: 'chimpanzee, chimp, Pan troglodytes', + 368: 'gibbon, Hylobates lar', + 369: 'siamang, Hylobates syndactylus, Symphalangus syndactylus', + 370: 'guenon, guenon monkey', + 371: 'patas, hussar monkey, Erythrocebus patas', + 372: 'baboon', + 373: 'macaque', + 374: 'langur', + 375: 'colobus, colobus monkey', + 376: 'proboscis monkey, Nasalis larvatus', + 377: 'marmoset', + 378: 'capuchin, ringtail, Cebus capucinus', + 379: 'howler monkey, howler', + 380: 'titi, titi monkey', + 381: 'spider monkey, Ateles geoffroyi', + 382: 'squirrel monkey, Saimiri sciureus', + 383: 'Madagascar cat, ring-tailed lemur, Lemur catta', + 384: 'indri, indris, Indri indri, Indri brevicaudatus', + 385: 'Indian elephant, Elephas maximus', + 386: 'African elephant, Loxodonta africana', + 387: 'lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens', + 388: 'giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca', + 389: 'barracouta, snoek', + 390: 'eel', + 391: 'coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch', + 392: 'rock beauty, Holocanthus tricolor', + 393: 'anemone fish', + 394: 'sturgeon', + 395: 'gar, garfish, garpike, billfish, Lepisosteus osseus', + 396: 'lionfish', + 397: 'puffer, pufferfish, blowfish, globefish', + 398: 'abacus', + 399: 'abaya', + 400: "academic gown, academic robe, judge's robe", + 401: 'accordion, piano accordion, squeeze box', + 402: 'acoustic guitar', + 403: 'aircraft carrier, carrier, flattop, attack aircraft carrier', + 404: 'airliner', + 405: 'airship, dirigible', + 406: 'altar', + 407: 'ambulance', + 408: 'amphibian, amphibious vehicle', + 409: 'analog clock', + 410: 'apiary, bee house', + 411: 'apron', + 412: 'ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin', + 413: 'assault rifle, assault gun', + 414: 'backpack, back pack, knapsack, packsack, rucksack, haversack', + 415: 'bakery, bakeshop, bakehouse', + 416: 'balance beam, beam', + 417: 'balloon', + 418: 'ballpoint, ballpoint pen, ballpen, Biro', + 419: 'Band Aid', + 420: 'banjo', + 421: 'bannister, banister, balustrade, balusters, handrail', + 422: 'barbell', + 423: 'barber chair', + 424: 'barbershop', + 425: 'barn', + 426: 'barometer', + 427: 'barrel, cask', + 428: 'barrow, garden cart, lawn cart, wheelbarrow', + 429: 'baseball', + 430: 'basketball', + 431: 'bassinet', + 432: 'bassoon', + 433: 'bathing cap, swimming cap', + 434: 'bath towel', + 435: 'bathtub, bathing tub, bath, tub', + 436: 'beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon', + 437: 'beacon, lighthouse, beacon light, pharos', + 438: 'beaker', + 439: 'bearskin, busby, shako', + 440: 'beer bottle', + 441: 'beer glass', + 442: 'bell cote, bell cot', + 443: 'bib', + 444: 'bicycle-built-for-two, tandem bicycle, tandem', + 445: 'bikini, two-piece', + 446: 'binder, ring-binder', + 447: 'binoculars, field glasses, opera glasses', + 448: 'birdhouse', + 449: 'boathouse', + 450: 'bobsled, bobsleigh, bob', + 451: 'bolo tie, bolo, bola tie, bola', + 452: 'bonnet, poke bonnet', + 453: 'bookcase', + 454: 'bookshop, bookstore, bookstall', + 455: 'bottlecap', + 456: 'bow', + 457: 'bow tie, bow-tie, bowtie', + 458: 'brass, memorial tablet, plaque', + 459: 'brassiere, bra, bandeau', + 460: 'breakwater, groin, groyne, mole, bulwark, seawall, jetty', + 461: 'breastplate, aegis, egis', + 462: 'broom', + 463: 'bucket, pail', + 464: 'buckle', + 465: 'bulletproof vest', + 466: 'bullet train, bullet', + 467: 'butcher shop, meat market', + 468: 'cab, hack, taxi, taxicab', + 469: 'caldron, cauldron', + 470: 'candle, taper, wax light', + 471: 'cannon', + 472: 'canoe', + 473: 'can opener, tin opener', + 474: 'cardigan', + 475: 'car mirror', + 476: 'carousel, carrousel, merry-go-round, roundabout, whirligig', + 477: "carpenter's kit, tool kit", + 478: 'carton', + 479: 'car wheel', + 480: 'cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM', + 481: 'cassette', + 482: 'cassette player', + 483: 'castle', + 484: 'catamaran', + 485: 'CD player', + 486: 'cello, violoncello', + 487: 'cellular telephone, cellular phone, cellphone, cell, mobile phone', + 488: 'chain', + 489: 'chainlink fence', + 490: 'chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour', + 491: 'chain saw, chainsaw', + 492: 'chest', + 493: 'chiffonier, commode', + 494: 'chime, bell, gong', + 495: 'china cabinet, china closet', + 496: 'Christmas stocking', + 497: 'church, church building', + 498: 'cinema, movie theater, movie theatre, movie house, picture palace', + 499: 'cleaver, meat cleaver, chopper', + 500: 'cliff dwelling', + 501: 'cloak', + 502: 'clog, geta, patten, sabot', + 503: 'cocktail shaker', + 504: 'coffee mug', + 505: 'coffeepot', + 506: 'coil, spiral, volute, whorl, helix', + 507: 'combination lock', + 508: 'computer keyboard, keypad', + 509: 'confectionery, confectionary, candy store', + 510: 'container ship, containership, container vessel', + 511: 'convertible', + 512: 'corkscrew, bottle screw', + 513: 'cornet, horn, trumpet, trump', + 514: 'cowboy boot', + 515: 'cowboy hat, ten-gallon hat', + 516: 'cradle', + 517: 'crane', + 518: 'crash helmet', + 519: 'crate', + 520: 'crib, cot', + 521: 'Crock Pot', + 522: 'croquet ball', + 523: 'crutch', + 524: 'cuirass', + 525: 'dam, dike, dyke', + 526: 'desk', + 527: 'desktop computer', + 528: 'dial telephone, dial phone', + 529: 'diaper, nappy, napkin', + 530: 'digital clock', + 531: 'digital watch', + 532: 'dining table, board', + 533: 'dishrag, dishcloth', + 534: 'dishwasher, dish washer, dishwashing machine', + 535: 'disk brake, disc brake', + 536: 'dock, dockage, docking facility', + 537: 'dogsled, dog sled, dog sleigh', + 538: 'dome', + 539: 'doormat, welcome mat', + 540: 'drilling platform, offshore rig', + 541: 'drum, membranophone, tympan', + 542: 'drumstick', + 543: 'dumbbell', + 544: 'Dutch oven', + 545: 'electric fan, blower', + 546: 'electric guitar', + 547: 'electric locomotive', + 548: 'entertainment center', + 549: 'envelope', + 550: 'espresso maker', + 551: 'face powder', + 552: 'feather boa, boa', + 553: 'file, file cabinet, filing cabinet', + 554: 'fireboat', + 555: 'fire engine, fire truck', + 556: 'fire screen, fireguard', + 557: 'flagpole, flagstaff', + 558: 'flute, transverse flute', + 559: 'folding chair', + 560: 'football helmet', + 561: 'forklift', + 562: 'fountain', + 563: 'fountain pen', + 564: 'four-poster', + 565: 'freight car', + 566: 'French horn, horn', + 567: 'frying pan, frypan, skillet', + 568: 'fur coat', + 569: 'garbage truck, dustcart', + 570: 'gasmask, respirator, gas helmet', + 571: 'gas pump, gasoline pump, petrol pump, island dispenser', + 572: 'goblet', + 573: 'go-kart', + 574: 'golf ball', + 575: 'golfcart, golf cart', + 576: 'gondola', + 577: 'gong, tam-tam', + 578: 'gown', + 579: 'grand piano, grand', + 580: 'greenhouse, nursery, glasshouse', + 581: 'grille, radiator grille', + 582: 'grocery store, grocery, food market, market', + 583: 'guillotine', + 584: 'hair slide', + 585: 'hair spray', + 586: 'half track', + 587: 'hammer', + 588: 'hamper', + 589: 'hand blower, blow dryer, blow drier, hair dryer, hair drier', + 590: 'hand-held computer, hand-held microcomputer', + 591: 'handkerchief, hankie, hanky, hankey', + 592: 'hard disc, hard disk, fixed disk', + 593: 'harmonica, mouth organ, harp, mouth harp', + 594: 'harp', + 595: 'harvester, reaper', + 596: 'hatchet', + 597: 'holster', + 598: 'home theater, home theatre', + 599: 'honeycomb', + 600: 'hook, claw', + 601: 'hoopskirt, crinoline', + 602: 'horizontal bar, high bar', + 603: 'horse cart, horse-cart', + 604: 'hourglass', + 605: 'iPod', + 606: 'iron, smoothing iron', + 607: "jack-o'-lantern", + 608: 'jean, blue jean, denim', + 609: 'jeep, landrover', + 610: 'jersey, T-shirt, tee shirt', + 611: 'jigsaw puzzle', + 612: 'jinrikisha, ricksha, rickshaw', + 613: 'joystick', + 614: 'kimono', + 615: 'knee pad', + 616: 'knot', + 617: 'lab coat, laboratory coat', + 618: 'ladle', + 619: 'lampshade, lamp shade', + 620: 'laptop, laptop computer', + 621: 'lawn mower, mower', + 622: 'lens cap, lens cover', + 623: 'letter opener, paper knife, paperknife', + 624: 'library', + 625: 'lifeboat', + 626: 'lighter, light, igniter, ignitor', + 627: 'limousine, limo', + 628: 'liner, ocean liner', + 629: 'lipstick, lip rouge', + 630: 'Loafer', + 631: 'lotion', + 632: 'loudspeaker, speaker, speaker unit, loudspeaker system, speaker system', + 633: "loupe, jeweler's loupe", + 634: 'lumbermill, sawmill', + 635: 'magnetic compass', + 636: 'mailbag, postbag', + 637: 'mailbox, letter box', + 638: 'maillot', + 639: 'maillot, tank suit', + 640: 'manhole cover', + 641: 'maraca', + 642: 'marimba, xylophone', + 643: 'mask', + 644: 'matchstick', + 645: 'maypole', + 646: 'maze, labyrinth', + 647: 'measuring cup', + 648: 'medicine chest, medicine cabinet', + 649: 'megalith, megalithic structure', + 650: 'microphone, mike', + 651: 'microwave, microwave oven', + 652: 'military uniform', + 653: 'milk can', + 654: 'minibus', + 655: 'miniskirt, mini', + 656: 'minivan', + 657: 'missile', + 658: 'mitten', + 659: 'mixing bowl', + 660: 'mobile home, manufactured home', + 661: 'Model T', + 662: 'modem', + 663: 'monastery', + 664: 'monitor', + 665: 'moped', + 666: 'mortar', + 667: 'mortarboard', + 668: 'mosque', + 669: 'mosquito net', + 670: 'motor scooter, scooter', + 671: 'mountain bike, all-terrain bike, off-roader', + 672: 'mountain tent', + 673: 'mouse, computer mouse', + 674: 'mousetrap', + 675: 'moving van', + 676: 'muzzle', + 677: 'nail', + 678: 'neck brace', + 679: 'necklace', + 680: 'nipple', + 681: 'notebook, notebook computer', + 682: 'obelisk', + 683: 'oboe, hautboy, hautbois', + 684: 'ocarina, sweet potato', + 685: 'odometer, hodometer, mileometer, milometer', + 686: 'oil filter', + 687: 'organ, pipe organ', + 688: 'oscilloscope, scope, cathode-ray oscilloscope, CRO', + 689: 'overskirt', + 690: 'oxcart', + 691: 'oxygen mask', + 692: 'packet', + 693: 'paddle, boat paddle', + 694: 'paddlewheel, paddle wheel', + 695: 'padlock', + 696: 'paintbrush', + 697: "pajama, pyjama, pj's, jammies", + 698: 'palace', + 699: 'panpipe, pandean pipe, syrinx', + 700: 'paper towel', + 701: 'parachute, chute', + 702: 'parallel bars, bars', + 703: 'park bench', + 704: 'parking meter', + 705: 'passenger car, coach, carriage', + 706: 'patio, terrace', + 707: 'pay-phone, pay-station', + 708: 'pedestal, plinth, footstall', + 709: 'pencil box, pencil case', + 710: 'pencil sharpener', + 711: 'perfume, essence', + 712: 'Petri dish', + 713: 'photocopier', + 714: 'pick, plectrum, plectron', + 715: 'pickelhaube', + 716: 'picket fence, paling', + 717: 'pickup, pickup truck', + 718: 'pier', + 719: 'piggy bank, penny bank', + 720: 'pill bottle', + 721: 'pillow', + 722: 'ping-pong ball', + 723: 'pinwheel', + 724: 'pirate, pirate ship', + 725: 'pitcher, ewer', + 726: "plane, carpenter's plane, woodworking plane", + 727: 'planetarium', + 728: 'plastic bag', + 729: 'plate rack', + 730: 'plow, plough', + 731: "plunger, plumber's helper", + 732: 'Polaroid camera, Polaroid Land camera', + 733: 'pole', + 734: 'police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria', + 735: 'poncho', + 736: 'pool table, billiard table, snooker table', + 737: 'pop bottle, soda bottle', + 738: 'pot, flowerpot', + 739: "potter's wheel", + 740: 'power drill', + 741: 'prayer rug, prayer mat', + 742: 'printer', + 743: 'prison, prison house', + 744: 'projectile, missile', + 745: 'projector', + 746: 'puck, hockey puck', + 747: 'punching bag, punch bag, punching ball, punchball', + 748: 'purse', + 749: 'quill, quill pen', + 750: 'quilt, comforter, comfort, puff', + 751: 'racer, race car, racing car', + 752: 'racket, racquet', + 753: 'radiator', + 754: 'radio, wireless', + 755: 'radio telescope, radio reflector', + 756: 'rain barrel', + 757: 'recreational vehicle, RV, R.V.', + 758: 'reel', + 759: 'reflex camera', + 760: 'refrigerator, icebox', + 761: 'remote control, remote', + 762: 'restaurant, eating house, eating place, eatery', + 763: 'revolver, six-gun, six-shooter', + 764: 'rifle', + 765: 'rocking chair, rocker', + 766: 'rotisserie', + 767: 'rubber eraser, rubber, pencil eraser', + 768: 'rugby ball', + 769: 'rule, ruler', + 770: 'running shoe', + 771: 'safe', + 772: 'safety pin', + 773: 'saltshaker, salt shaker', + 774: 'sandal', + 775: 'sarong', + 776: 'sax, saxophone', + 777: 'scabbard', + 778: 'scale, weighing machine', + 779: 'school bus', + 780: 'schooner', + 781: 'scoreboard', + 782: 'screen, CRT screen', + 783: 'screw', + 784: 'screwdriver', + 785: 'seat belt, seatbelt', + 786: 'sewing machine', + 787: 'shield, buckler', + 788: 'shoe shop, shoe-shop, shoe store', + 789: 'shoji', + 790: 'shopping basket', + 791: 'shopping cart', + 792: 'shovel', + 793: 'shower cap', + 794: 'shower curtain', + 795: 'ski', + 796: 'ski mask', + 797: 'sleeping bag', + 798: 'slide rule, slipstick', + 799: 'sliding door', + 800: 'slot, one-armed bandit', + 801: 'snorkel', + 802: 'snowmobile', + 803: 'snowplow, snowplough', + 804: 'soap dispenser', + 805: 'soccer ball', + 806: 'sock', + 807: 'solar dish, solar collector, solar furnace', + 808: 'sombrero', + 809: 'soup bowl', + 810: 'space bar', + 811: 'space heater', + 812: 'space shuttle', + 813: 'spatula', + 814: 'speedboat', + 815: "spider web, spider's web", + 816: 'spindle', + 817: 'sports car, sport car', + 818: 'spotlight, spot', + 819: 'stage', + 820: 'steam locomotive', + 821: 'steel arch bridge', + 822: 'steel drum', + 823: 'stethoscope', + 824: 'stole', + 825: 'stone wall', + 826: 'stopwatch, stop watch', + 827: 'stove', + 828: 'strainer', + 829: 'streetcar, tram, tramcar, trolley, trolley car', + 830: 'stretcher', + 831: 'studio couch, day bed', + 832: 'stupa, tope', + 833: 'submarine, pigboat, sub, U-boat', + 834: 'suit, suit of clothes', + 835: 'sundial', + 836: 'sunglass', + 837: 'sunglasses, dark glasses, shades', + 838: 'sunscreen, sunblock, sun blocker', + 839: 'suspension bridge', + 840: 'swab, swob, mop', + 841: 'sweatshirt', + 842: 'swimming trunks, bathing trunks', + 843: 'swing', + 844: 'switch, electric switch, electrical switch', + 845: 'syringe', + 846: 'table lamp', + 847: 'tank, army tank, armored combat vehicle, armoured combat vehicle', + 848: 'tape player', + 849: 'teapot', + 850: 'teddy, teddy bear', + 851: 'television, television system', + 852: 'tennis ball', + 853: 'thatch, thatched roof', + 854: 'theater curtain, theatre curtain', + 855: 'thimble', + 856: 'thresher, thrasher, threshing machine', + 857: 'throne', + 858: 'tile roof', + 859: 'toaster', + 860: 'tobacco shop, tobacconist shop, tobacconist', + 861: 'toilet seat', + 862: 'torch', + 863: 'totem pole', + 864: 'tow truck, tow car, wrecker', + 865: 'toyshop', + 866: 'tractor', + 867: 'trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi', + 868: 'tray', + 869: 'trench coat', + 870: 'tricycle, trike, velocipede', + 871: 'trimaran', + 872: 'tripod', + 873: 'triumphal arch', + 874: 'trolleybus, trolley coach, trackless trolley', + 875: 'trombone', + 876: 'tub, vat', + 877: 'turnstile', + 878: 'typewriter keyboard', + 879: 'umbrella', + 880: 'unicycle, monocycle', + 881: 'upright, upright piano', + 882: 'vacuum, vacuum cleaner', + 883: 'vase', + 884: 'vault', + 885: 'velvet', + 886: 'vending machine', + 887: 'vestment', + 888: 'viaduct', + 889: 'violin, fiddle', + 890: 'volleyball', + 891: 'waffle iron', + 892: 'wall clock', + 893: 'wallet, billfold, notecase, pocketbook', + 894: 'wardrobe, closet, press', + 895: 'warplane, military plane', + 896: 'washbasin, handbasin, washbowl, lavabo, wash-hand basin', + 897: 'washer, automatic washer, washing machine', + 898: 'water bottle', + 899: 'water jug', + 900: 'water tower', + 901: 'whiskey jug', + 902: 'whistle', + 903: 'wig', + 904: 'window screen', + 905: 'window shade', + 906: 'Windsor tie', + 907: 'wine bottle', + 908: 'wing', + 909: 'wok', + 910: 'wooden spoon', + 911: 'wool, woolen, woollen', + 912: 'worm fence, snake fence, snake-rail fence, Virginia fence', + 913: 'wreck', + 914: 'yawl', + 915: 'yurt', + 916: 'web site, website, internet site, site', + 917: 'comic book', + 918: 'crossword puzzle, crossword', + 919: 'street sign', + 920: 'traffic light, traffic signal, stoplight', + 921: 'book jacket, dust cover, dust jacket, dust wrapper', + 922: 'menu', + 923: 'plate', + 924: 'guacamole', + 925: 'consomme', + 926: 'hot pot, hotpot', + 927: 'trifle', + 928: 'ice cream, icecream', + 929: 'ice lolly, lolly, lollipop, popsicle', + 930: 'French loaf', + 931: 'bagel, beigel', + 932: 'pretzel', + 933: 'cheeseburger', + 934: 'hotdog, hot dog, red hot', + 935: 'mashed potato', + 936: 'head cabbage', + 937: 'broccoli', + 938: 'cauliflower', + 939: 'zucchini, courgette', + 940: 'spaghetti squash', + 941: 'acorn squash', + 942: 'butternut squash', + 943: 'cucumber, cuke', + 944: 'artichoke, globe artichoke', + 945: 'bell pepper', + 946: 'cardoon', + 947: 'mushroom', + 948: 'Granny Smith', + 949: 'strawberry', + 950: 'orange', + 951: 'lemon', + 952: 'fig', + 953: 'pineapple, ananas', + 954: 'banana', + 955: 'jackfruit, jak, jack', + 956: 'custard apple', + 957: 'pomegranate', + 958: 'hay', + 959: 'carbonara', + 960: 'chocolate sauce, chocolate syrup', + 961: 'dough', + 962: 'meat loaf, meatloaf', + 963: 'pizza, pizza pie', + 964: 'potpie', + 965: 'burrito', + 966: 'red wine', + 967: 'espresso', + 968: 'cup', + 969: 'eggnog', + 970: 'alp', + 971: 'bubble', + 972: 'cliff, drop, drop-off', + 973: 'coral reef', + 974: 'geyser', + 975: 'lakeside, lakeshore', + 976: 'promontory, headland, head, foreland', + 977: 'sandbar, sand bar', + 978: 'seashore, coast, seacoast, sea-coast', + 979: 'valley, vale', + 980: 'volcano', + 981: 'ballplayer, baseball player', + 982: 'groom, bridegroom', + 983: 'scuba diver', + 984: 'rapeseed', + 985: 'daisy', + 986: "yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum", + 987: 'corn', + 988: 'acorn', + 989: 'hip, rose hip, rosehip', + 990: 'buckeye, horse chestnut, conker', + 991: 'coral fungus', + 992: 'agaric', + 993: 'gyromitra', + 994: 'stinkhorn, carrion fungus', + 995: 'earthstar', + 996: 'hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa', + 997: 'bolete', + 998: 'ear, spike, capitulum', + 999: 'toilet tissue, toilet paper, bathroom tissue'} diff --git a/contrib/components/openvino/ovms-deployer/containers/deploy.sh b/contrib/components/openvino/ovms-deployer/containers/deploy.sh index 7bfc425350b..361a9fb06ac 100755 --- a/contrib/components/openvino/ovms-deployer/containers/deploy.sh +++ b/contrib/components/openvino/ovms-deployer/containers/deploy.sh @@ -84,6 +84,7 @@ kubectl config set-credentials pipeline --token "$(cat /var/run/secrets/kubernet kubectl config set-context kubeflow --cluster "${CLUSTER_NAME}" --user pipeline kubectl config use-context kubeflow +echo "Generating service and deployment yaml files" python apply_template.py kubectl apply -f ovms.yaml diff --git a/contrib/components/openvino/ovms-deployer/containers/evaluate.py b/contrib/components/openvino/ovms-deployer/containers/evaluate.py new file mode 100755 index 00000000000..1f49a0acffd --- /dev/null +++ b/contrib/components/openvino/ovms-deployer/containers/evaluate.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python +import grpc +import numpy as np +import tensorflow.contrib.util as tf_contrib_util +import datetime +import argparse +from tensorflow_serving.apis import predict_pb2 +from tensorflow_serving.apis import prediction_service_pb2_grpc +from urllib.parse import urlparse +import requests +import cv2 +import os +import json +import classes + + +def crop_resize(img,cropx,cropy): + y,x,c = img.shape + if y < cropy: + img = cv2.resize(img, (x, cropy)) + y = cropy + if x < cropx: + img = cv2.resize(img, (cropx,y)) + x = cropx + startx = x//2-(cropx//2) + starty = y//2-(cropy//2) + return img[starty:starty+cropy,startx:startx+cropx,:] + +def get_file_content(source_path): + parsed_path = urlparse(source_path) + if parsed_path.scheme == "http" or parsed_path.scheme == "https": + try: + response = requests.get(source_path, stream=True) + content = response.content + except requests.exceptions.RequestException as e: + print(e) + content = None + elif parsed_path.scheme == "": + if os.path.isfile(source_path): + with open(input_images) as f: + content = f.readlines() + f.close + else: + print("file " + source_path + "is not accessible") + content = None + return content + +def getJpeg(path, size, path_prefix): + print(os.path.join(path_prefix,path)) + content = get_file_content(os.path.join(path_prefix,path)) + + if content: + try: + img = np.frombuffer(content, dtype=np.uint8) + img = cv2.imdecode(img, cv2.IMREAD_COLOR) # BGR format + # retrived array has BGR format and 0-255 normalization + # add image preprocessing if needed by the model + img = crop_resize(img, size, size) + img = img.astype('float32') + img = img.transpose(2,0,1).reshape(1,3,size,size) + print(path, img.shape, "; data range:",np.amin(img),":",np.amax(img)) + except e: + print("Can not read the image file", e) + img = None + else: + print("Can not open ", os.path(path_prefix,path)) + img = None + return img + +parser = argparse.ArgumentParser(description='Sends requests to OVMS and TF Serving using images in numpy format') +parser.add_argument('--images_list', required=False, default='input_images.txt', help='Path to a file with a list of labeled images. It should include in every line a path to the image file and a numerical label separate by space.') +parser.add_argument('--grpc_endpoint',required=False, default='localhost:9000', help='Specify endpoint of grpc service. default:localhost:9000') +parser.add_argument('--input_name',required=False, default='input', help='Specify input tensor name. default: input') +parser.add_argument('--output_name',required=False, default='resnet_v1_50/predictions/Reshape_1', help='Specify output name. default: output') +parser.add_argument('--model_name', default='resnet', help='Define model name, must be same as is in service. default: resnet', + dest='model_name') +parser.add_argument('--size',required=False, default=224, type=int, help='The size of the image in the model') +parser.add_argument('--image_path_prefix',required=False, default="", type=str, help='Path prefix to be added to every image in the list') +args = vars(parser.parse_args()) + +channel = grpc.insecure_channel(args['grpc_endpoint']) +stub = prediction_service_pb2_grpc.PredictionServiceStub(channel) +input_images = args.get('images_list') +size = args.get('size') + +input_list_content = get_file_content(input_images) +if input_list_content is None: + print("Can not open input images file", input_images) + exit(1) +else: + lines = input_list_content.decode().split("\n") +print(lines) +print('Start processing:') +print('\tModel name: {}'.format(args.get('model_name'))) +print('\tImages list file: {}'.format(args.get('images_list'))) + +i = 0 +matched = 0 +processing_times = np.zeros((0),int) +imgs = np.zeros((0,3,size, size), np.dtype(' Date: Fri, 22 Mar 2019 12:35:26 +0100 Subject: [PATCH 4/4] updated documentation --- contrib/samples/openvino/deployer/README.md | 36 +++- .../samples/openvino/deployer/component.yaml | 162 ++++++------------ .../samples/openvino/deployer/deployer.png | Bin 0 -> 123999 bytes 3 files changed, 87 insertions(+), 111 deletions(-) create mode 100644 contrib/samples/openvino/deployer/deployer.png diff --git a/contrib/samples/openvino/deployer/README.md b/contrib/samples/openvino/deployer/README.md index c0647d85be8..f1c814db606 100644 --- a/contrib/samples/openvino/deployer/README.md +++ b/contrib/samples/openvino/deployer/README.md @@ -1,12 +1,40 @@ # OpenVINO Model Server deployment pipeline -This is an example of a one step pipeline implementation for [OpenVINO Model Server deployer](../../../components/openvino/ovms-deployer). +This is an example of a pipeline implementation based on [OpenVINO Model Server deployer](../../../components/openvino/ovms-deployer) component. + +It includes 2 tasks: +- deployment of OpenVINO Model Server in Kubernetes +- evaluation of the model server instance and its served model + +![Deployer pipeline](deployer.png) + ## Parameters -- model_export_path - local or gs path to the folder with numerical subfolders storing OpenVINO models -- server_name - Kubernetes service name to be deployed which is equal to service model name -- log_level - DEBUG/INFO/ERROR +- model_export_path - shared storage location( google storage, persistent storage or NFS) pointing to the folder with numerical subfolders storing OpenVINO models. +For example path 'gs://intelai_public_models/resnet_50_i8' includes subfolder '1' which stores model files .bin and .xml in Intermediate Representation format. +Refer to [OVMS documentation](https://github.com/IntelAI/OpenVINO-model-server/blob/master/docs/docker_container.md#preparing-the-models) +- server_name - Kubernetes service name to be deployed. The model name in the grpc endpoint has the same name. +- log_level - DEBUG/INFO/ERROR - sets the logging level in OVMS pods - batch_size - which batch size should be loaded in the served model: 'auto' or numerical values - model_version_policy - parameter defining which version should be served in OVMS. Examples: '{"latest": { "num_versions":2 }}') / {"specific": { "versions":[1, 3] }} / {"all": {}} +- replicas - number of pods which should be deployed to serve the model. More replicas is increasing the scalability and number of client requests which can be handled in parallel. +- evaluation-images-list - path or URL to the file with a list of evaluation images. The file should include in every line a path or URL to an image and the classification label number separated by space. +- image-path-prefix - prefix which should be added to every image in the list above. To be used when the image path is relative. +- model-input-name - name of the gRPC input key including data for inference processing. It matches input tensor. +- model-output-name - name of the output key in gRPC response +- model-input-size - the resolution of the images processed in the model. Evaluation script is rescaling the images to match the model input size. + +## Exemplary parameter values + +Included default values ensure smooth execution without any extra requirements. They can be changed to execute using custom +models and datasets. + +- The deployed serving component is [OpenVINO Model Server](https://github.com/IntelAI/OpenVINO-model-server) which is using a public docker image. +- the default OpenVINO Model in IR format is representing ResNet v1.50 network topology. +It is based on pre-trained model from Caffe framework, optimized with OpenVINO model optimizer and quantized to INT8 precision. +You can learn more about model optimization for production deployments on [intel.ai blog post](https://www.intel.ai/introducing-int8-quantization-for-fast-cpu-inference-using-openvino/#gs.2kxdii) +- included [samples of images](https://raw.githubusercontent.com/IntelAI/OpenVINO-model-server/master/example_client/input_images.txt) + can be used to run simple test and can be easily swapped with other datasets like ImageNet. + diff --git a/contrib/samples/openvino/deployer/component.yaml b/contrib/samples/openvino/deployer/component.yaml index 6b12d9a90a1..0d98938d9fc 100644 --- a/contrib/samples/openvino/deployer/component.yaml +++ b/contrib/samples/openvino/deployer/component.yaml @@ -1,107 +1,55 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: ovms-deployment-pipeline- -spec: - arguments: - parameters: - - name: model-export-path - value: gs://intelai_public_models/resnet_50_i8 - - name: server-name - value: resnet - - name: log-level - value: DEBUG - - name: batch-size - value: auto - - name: model-version-policy - value: '{"latest": { "num_versions":2 }}' - - name: replicas - value: '1' - entrypoint: ovms-deployment-pipeline - serviceAccountName: pipeline-runner - templates: - - container: - args: - - --model-export-path - - '{{inputs.parameters.model-export-path}}' - - --server-name - - '{{inputs.parameters.server-name}}' - - --log-level - - '{{inputs.parameters.log-level}}' - - --batch-size - - '{{inputs.parameters.batch-size}}' - - --model-version-policy - - '{{inputs.parameters.model-version-policy}}' - - --replicas - - '{{inputs.parameters.replicas}}' - command: - - ./deploy.sh - image: gcr.io/constant-cubist-173123/inference_server/ml_deployer:9 - inputs: - parameters: - - name: batch-size - - name: log-level - - name: model-export-path - - name: model-version-policy - - name: replicas - - name: server-name - name: openvino-model-server-deployer - outputs: - artifacts: - - name: mlpipeline-ui-metadata - path: /mlpipeline-ui-metadata.json - s3: - accessKeySecret: - key: accesskey - name: mlpipeline-minio-artifact - bucket: mlpipeline - endpoint: minio-service.kubeflow:9000 - insecure: true - key: runs/{{workflow.uid}}/{{pod.name}}/mlpipeline-ui-metadata.tgz - secretKeySecret: - key: secretkey - name: mlpipeline-minio-artifact - - name: mlpipeline-metrics - path: /mlpipeline-metrics.json - s3: - accessKeySecret: - key: accesskey - name: mlpipeline-minio-artifact - bucket: mlpipeline - endpoint: minio-service.kubeflow:9000 - insecure: true - key: runs/{{workflow.uid}}/{{pod.name}}/mlpipeline-metrics.tgz - secretKeySecret: - key: secretkey - name: mlpipeline-minio-artifact - parameters: - - name: openvino-model-server-deployer-output - valueFrom: - path: /tmp/server_endpoint - - dag: - tasks: - - arguments: - parameters: - - name: batch-size - value: '{{inputs.parameters.batch-size}}' - - name: log-level - value: '{{inputs.parameters.log-level}}' - - name: model-export-path - value: '{{inputs.parameters.model-export-path}}' - - name: model-version-policy - value: '{{inputs.parameters.model-version-policy}}' - - name: replicas - value: '{{inputs.parameters.replicas}}' - - name: server-name - value: '{{inputs.parameters.server-name}}' - name: openvino-model-server-deployer - template: openvino-model-server-deployer - inputs: - parameters: - - name: batch-size - - name: log-level - - name: model-export-path - - name: model-version-policy - - name: replicas - - name: server-name - name: ovms-deployment-pipeline \ No newline at end of file +name: OpenVINO model server deployer +description: Deploys OpenVINO Model Server instance to Kubernetes and runs model evaluation +inputs: +- name: Batch size + default: auto +- name: Log level + default: DEBUG +- name: Model export path + default: 'gs://intelai_public_models/resnet_50_i8' +- name: Model version policy + default: '{"latest": { "num_versions":2 }}' +- name: Replicas + default: '1' +- name: Server name + default: resnet +- name: Evaluation images list + default: 'https://raw.githubusercontent.com/IntelAI/OpenVINO-model-server/master/example_client/input_images.txt' +- name: Image path prefix + default: 'https://github.com/IntelAI/OpenVINO-model-server/raw/master/example_client/' +- name: Model input name + default: 'data' +- name: Model output name + default: 'prob' +- name: Model input size + default: 224 +outputs: +- name: Server endpoint +metrics: + - name: latency + - name: accuracy +implementation: + container: + image: gcr.io/constant-cubist-173123/inference_server/ml_deployer:13 + command: [./deploy.sh] + args: [ + --model-export-path, {inputValue: Model export path}, + --server-name, {inputValue: Server name}, + --log-level, {inputValue: Log level}, + --batch-size, {inputValue: Batch size}, + --model-version-policy, {inputValue: Model version policy}, + --replicas, {inputValue: Replicas}, + --server-endpoint-output-file, {outputPath: Server endpoint}, + ] + container: + image: gcr.io/constant-cubist-173123/inference_server/ml_deployer:13 + command: [./evaluate.py] + args: [ + --images_list, {inputValue: Evaluation images list}, + --image_path_prefix {inputValue: Image path prefix} + --grpc_endpoint, {outputValue: Server endpoint}, + --input_name, {inputValue: Model input name}, + --output_name, {inputValue: Model output name}, + --size, {inputValue: Model input size}, + --replicas, {inputValue: Replicas} + ] \ No newline at end of file diff --git a/contrib/samples/openvino/deployer/deployer.png b/contrib/samples/openvino/deployer/deployer.png new file mode 100644 index 0000000000000000000000000000000000000000..461c30cf97b81f2ac002e9cfac4d5eeca5803eca GIT binary patch literal 123999 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

KxbyGjVCT(bqzj|5>I4J8z%=)xoi)ruZ>9}dE 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 literal 0 HcmV?d00001