Skip to content

Build Tensorflow Serving Job

This section introduces how to customly build a Tensorflow serving job.

Path

pkg/apis/serving.TFServingJobBuilder

Function

func NewTFServingJobBuilder() *TFServingJobBuilder

Parameters

TFServingJobBuilder has following functions to custom your Tensorflow serving job.

function description matches cli option
Name(name string) *TFServingJobBuilder specify the job name --name
Namespace(namespace string) *TFServingJobBuilder specify the namespace -n/--namespace
Command(args []string) *TFServingJobBuilder specify the command -
GPUCount(count int) *TFServingJobBuilder specify the gpu count --gpus
GPUMemory(memory int) *TFServingJobBuilder specify the gpu memory(gpushare) --gpumemory
Image(image string) *TFServingJobBuilder specify the image --image
ImagePullPolicy(policy string) *TFServingJobBuilder specify the image pull policy --image-pull-policy
CPU(cpu string) *TFServingJobBuilder specify the cpu limitation of job --cpu
Memory(memory string) *TFServingJobBuilder specify the memory limitation --memory
Envs(envs map[string]string) *TFServingJobBuilder specify the envs of container --env
Replicas(count int) *TFServingJobBuilder specify the replicas --replicas
Port(port int) *TFServingJobBuilder specify the grpc service port --port
RestfulPort(port int) *TFServingJobBuilder specify the restful service port --restfulPort
EnableIstio() *TFServingJobBuilder enable istio --enable-istio
ExposeService() *TFServingJobBuilder expose service --expose-service
Version(version string) *TFServingJobBuilder specify the job version --version
Tolerations(tolerations []string) *TFServingJobBuilder specify the tolerations of node taints --toleration
NodeSelectors(selectors map[string]string) *TFServingJobBuilder specify the node selectors --selector
Annotations(annotations map[string]string) *TFServingJobBuilder specify the annotations --annotation
Datas(volumes map[string]string) *TFServingJobBuilder specify the pvc name which stores dataset --data
DataDirs(volumes map[string]string) *TFServingJobBuilder specify the host path which stores dataset --data-dir
VersionPolicy(policy string) *TFServingJobBuilder specify the version policy --version-policy
ModelConfigFile(filePath string) *TFServingJobBuilder specify the model configuration file --modeConfigFile
ModelName(name string) *TFServingJobBuilder specify the model name --model-name
ModelPath(path string) *TFServingJobBuilder specify the model path --model-path
Build() (*Job, error) build the job -

Example

package main

import (
    "fmt"
    "time"

    "github.com/kubeflow/arena/pkg/apis/arenaclient"
    "github.com/kubeflow/arena/pkg/apis/serving"
    "github.com/kubeflow/arena/pkg/apis/types"
)

func main() {
    jobName := "test"
    jobType := types.TFServingJob
    // create arena client
    client, err := arenaclient.NewArenaClient(types.ArenaClientArgs{
        Kubeconfig: "",
        LogLevel:   "info",
        Namespace:  "default",
    })
    // create tfjob
    /* command:
    arena serve tensorflow \
    --name=mymnist1 \
    --model-name=mnist1  \
    --gpus=1   \
    --image=tensorflow/serving:latest-gpu \
    --data=tfmodel:/tfmodel \
    --model-path=/tfmodel/mnist \
    --versionPolicy=specific:1
    */
    job, err := serving.NewTFServingJobBuilder().
        Name(jobName).
        GPUCount(1).
        ModelName("mnist1").
        Image("tensorflow/serving:latest-gpu").
        Data(map[string]string{"tfmodel": "/tfmodel"}).
        ModelPath("/tfmodel/mnist").
        VersionPolicy("specific:1").Build()
    if err != nil {
        fmt.Printf("failed to build tensorflow serving job,reason: %v\n", err)
        return
    }
    // submit tfjob
    if err := client.Serving().Submit(job); err != nil {
        fmt.Printf("failed to submit job,reason: %v\n", err)
        return
    }
}