Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Support simple model serving #75

Merged
merged 1 commit into from
Aug 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ REGISTRY ?= kleveross
BASE_REGISTRY ?= docker.io

# Image URL to use all building/pushing image targets
IMG ?= kleveross/klever-modeljob-operator:latest
IMG ?= kleveross/modeljob-operator:latest

#
# These variables should not need tweaking.
Expand All @@ -25,7 +25,7 @@ export SHELLOPTS := errexit
ROOT := github.com/kleveross/klever-model-registry

# Target binaries. You can build multiple binaries for a single project.
TARGETS := klever-model-registry klever-modeljob-operator
TARGETS := model-registry modeljob-operator
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I remember that we decide to have one separate binary for inference?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the inference binary is trtserver and openscoring jar package, not include source code.


# Container image prefix and suffix added to targets.
# The final built images are:
Expand Down Expand Up @@ -104,20 +104,20 @@ build-linux:

# Install CRDs into a cluster
install: manifests kustomize
$(KUSTOMIZE) build manifests/klever-modeljob-operator/crds | kubectl apply -f -
$(KUSTOMIZE) build manifests/modeljob-operator/crds | kubectl apply -f -

# Uninstall CRDs from a cluster
uninstall: manifests kustomize
$(KUSTOMIZE) build manifests/klever-modeljob-operator/crds | kubectl delete -f -
$(KUSTOMIZE) build manifests/modeljob-operator/crds | kubectl delete -f -

# Deploy controller in the configured Kubernetes cluster in ~/.kube/config
deploy: manifests kustomize
cd config/manager && $(KUSTOMIZE) edit set image klever-modeljob-operator=${IMG}
cd config/manager && $(KUSTOMIZE) edit set image modeljob-operator=${IMG}
$(KUSTOMIZE) build config/default | kubectl apply -f -

# Generate manifests e.g. CRD, RBAC etc.
manifests: controller-gen
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=kleveross-role webhook paths="./..." output:crd:artifacts:config=manifests/klever-modeljob-operator/crds
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=kleveross-role webhook paths="./..." output:crd:artifacts:config=manifests/modeljob-operator/crds

# Run go fmt against code
fmt:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# Use distroless as minimal base image to package the model-registry binary
# Refer to https://github.com/GoogleContainerTools/distroless for more details
FROM gcr.io/distroless/static:nonroot
FROM debian:stretch

WORKDIR /
COPY bin/klever-model-registry /klever-model-registry
USER nonroot:nonroot
COPY bin/model-registry /model-registry

ENTRYPOINT ["/klever-model-registry"]
ENTRYPOINT ["/model-registry"]
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
FROM gcr.io/distroless/static:nonroot

WORKDIR /
COPY bin/klever-modeljob-operator /klever-modeljob-operator
COPY bin/modeljob-operator /modeljob-operator
USER nonroot:nonroot

ENTRYPOINT ["/klever-modeljob-operator"]
ENTRYPOINT ["/modeljob-operator"]
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func main() {
}
customOption := registryconfig.New()
cmd := config.NewNirvanaCommand(option)
cmd.AddOption("REGISTRY", customOption)
cmd.AddOption("ORMB", customOption)
cmd.EnablePlugin(
&reqlog.Option{
DoubleLog: true,
Expand Down Expand Up @@ -64,6 +64,7 @@ func main() {
descriptors.InitModelJobController()
descriptors.InitLogController()
descriptors.InitEventController()
descriptors.InitServingController()

return nil
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
ctrl "sigs.k8s.io/controller-runtime"

"github.com/kleveross/klever-model-registry/cmd/klever-modeljob-operator/app/options"
"github.com/kleveross/klever-model-registry/cmd/modeljob-operator/app/options"
modeljobsv1alpha1 "github.com/kleveross/klever-model-registry/pkg/apis/modeljob/v1alpha1"
"github.com/kleveross/klever-model-registry/pkg/controllers"
"github.com/kleveross/klever-model-registry/pkg/version"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/log/zap"

"github.com/kleveross/klever-model-registry/cmd/klever-modeljob-operator/app"
"github.com/kleveross/klever-model-registry/cmd/klever-modeljob-operator/app/options"
"github.com/kleveross/klever-model-registry/cmd/modeljob-operator/app"
"github.com/kleveross/klever-model-registry/cmd/modeljob-operator/app/options"
// +kubebuilder:scaffold:imports
)

Expand Down
44 changes: 28 additions & 16 deletions go.sum

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
namespace: default
spec:
# Add fields here
model: "harbor.caicloud.com/release/savedmodel:v1"
model: "harbor-harbor-core.kleveross-system/release/savedmodel:v1"
extraction:
format: "SavedModel"

41 changes: 0 additions & 41 deletions manifests/klever-modeljob-operator/templates/cluster-role.yaml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,22 @@ spec:
image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: TRT_SERVING_IMAGE
value: "{{ .Values.model.serving.trt.image }}:{{ .Values.model.serving.trt.tag }}"
- name: PMML_SERVING_IMAGE
value: "{{ .Values.model.serving.pmml.image }}:{{ .Values.model.serving.pmml.tag }}"
- name: MODEL_INITIAIZER_IMAGE
value: "{{ .Values.model.serving.initializer.image }}:{{ .Values.model.serving.initializer.tag }}"
- name: KLEVER_MODEL_REGISTRY_PORT
value: {{ .Values.service.Port }}
- name: ORMB_DOMAIN
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can use ORMB_DOMAIN I think.

- name: SERVER_ORMB_DOMAIN
value: {{ .Values.ormb.domain }}
- name: ORMB_USERNAME
- name: SERVER_ORMB_USERNAME
valueFrom:
secretKeyRef:
name: ormb
key: ormbUsername
- name: ORMB_PASSWORD
- name: SERVER_ORMB_PASSWORD
valueFrom:
secretKeyRef:
name: ormb
Expand Down
22 changes: 22 additions & 0 deletions manifests/model-registry/templates/kleveross-gateway.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: kleveross-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- '*'
port:
name: http
number: 80
protocol: HTTP
- hosts:
- '*'
port:
name: grpc
number: 81
protocol: GRPC

Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,16 @@ affinity: {}
# If "port" is not 80, you must set port, eg: 192.168.1.2:30002
ormb:
domain: 192.168.22.160:30002

#
model:
serving:
trt:
image: cargo.dev.caicloud.xyz/release/trtserver
tag: 0.1.0
pmml:
image: cargo.dev.caicloud.xyz/release/openscoring
tag: 0.1.0
initializer:
image: cargo.dev.caicloud.xyz/release/klever-ormb-storage-initializer
tag: v0.0.4
83 changes: 83 additions & 0 deletions manifests/modeljob-operator/templates/cluster-role.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: kleveross
rules:
- apiGroups:
- extensions
resourceNames:
- 00-privileged
resources:
- podsecuritypolicies
verbs:
- use
- apiGroups:
- policy
resourceNames:
- 00-privileged
resources:
- podsecuritypolicies
verbs:
- use
- apiGroups:
- ""
- "extensions"
resources:
- configmaps
- events
- ingresses/status
verbs:
- get
- list
- watch
- update
- create
- patch
- apiGroups:
- machinelearning.seldon.io
resources:
- seldondeployments
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- kleveross.io
resources:
- modeljobs
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- kleveross.io
resources:
- modeljobs/status
verbs:
- get
- patch
- update
- apiGroups:
- batch
resources:
- jobs
verbs:
- '*'
- apiGroups:
- ""
resources:
- events
- pods
verbs:
- '*'
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,14 @@ spec:
image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: ORMB_DOMAIN
- name: SERVER_ORMB_DOMAIN
value: {{ .Values.ormb.domain }}
- name: ORMB_USERNAME
- name: SERVER_ORMB_USERNAME
valueFrom:
secretKeyRef:
name: ormb
key: ormbUsername
- name: ORMB_PASSWORD
- name: SERVER_ORMB_PASSWORD
valueFrom:
secretKeyRef:
name: ormb
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ data:
savedmodel-extract: '{{ .Values.ormb.domain }}/release/savedmodel:v0.2'
torchscript-extract: '{{ .Values.ormb.domain }}/release/torchscript:v0.2'
pmml-extract: '{{ .Values.ormb.domain }}/release/openscoring:v2.0.1-1.0'
ormb-storage-initializer: "{{ .Values.ormb.domain }}/release/clever-ormb-storage-initializer:v0.0.1"
ormb-storage-initializer: "{{ .Values.ormb.domain }}/release/klever-ormb-storage-initializer:v0.0.4"
kind: ConfigMap
metadata:
name: modeljob-image-config
Expand Down
6 changes: 3 additions & 3 deletions pkg/common/consts.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ const (
DefaultModelJobNamespace = "default"

// ORMBDomainEnvKey is the domain of ORMB
ORMBDomainEnvKey = "ORMB_DOMAIN"
ORMBDomainEnvKey = "SERVER_ORMB_DOMAIN"
// ORMBUsernameEnvkey is the username of ORMB
ORMBUsernameEnvkey = "ORMB_USERNAME"
ORMBUsernameEnvkey = "SERVER_ORMB_USERNAME"
// ORMBPasswordEnvKey is the password of ORMB
ORMBPasswordEnvKey = "ORMB_PASSWORD"
ORMBPasswordEnvKey = "SERVER_ORMB_PASSWORD"

// ResourceNameLabelKey is resource name in labels
ResourceNameLabelKey = "resource_name"
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ var _ = BeforeSuite(func(done Done) {

By("bootstrapping test environment")
testEnv = &envtest.Environment{
CRDDirectoryPaths: []string{filepath.Join("..", "..", "manifests", "klever-modeljob-operator", "crds")},
CRDDirectoryPaths: []string{filepath.Join("..", "..", "manifests", "modeljob-operator", "crds")},
}

var err error
Expand Down
2 changes: 2 additions & 0 deletions pkg/controllers/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ func generateJobResource(modeljob *modeljobsv1alpha1.ModelJob) (*batchv1.Job, er
"-c",
fmt.Sprintf("/scripts/run.sh"),
},
ImagePullPolicy: corev1.PullAlways,
Env: []corev1.EnvVar{
corev1.EnvVar{
Name: modeljobsv1alpha1.FrameworkEnvKey,
Expand Down Expand Up @@ -168,6 +169,7 @@ func generateInitContainers(modeljob *modeljobsv1alpha1.ModelJob) ([]corev1.Cont
MountPath: modeljobsv1alpha1.SourceModelPath,
},
},
ImagePullPolicy: corev1.PullAlways,
},
}

Expand Down
Loading