Skip to content

Commit

Permalink
Fix issue with RANDOM_ABTEST (#5090)
Browse files Browse the repository at this point in the history
  • Loading branch information
Adrian Gonzalez-Martin authored Aug 15, 2023
1 parent b5b5a10 commit 6652d08
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 26 deletions.
55 changes: 29 additions & 26 deletions operator/controllers/seldondeployment_prepackaged_servers.go
Original file line number Diff line number Diff line change
Expand Up @@ -419,12 +419,12 @@ func (pi *PrePackedInitialiser) addModelServersAndInitContainers(mlDep *machinel
podSecurityContext *v1.PodSecurityContext,
log logr.Logger) error {

sPodSpec, idx := utils.GetSeldonPodSpecForPredictiveUnit(p, pu.Name)
if sPodSpec == nil {
return fmt.Errorf("Failed to find PodSpec for Prepackaged server PreditiveUnit named %s", pu.Name)
}
depName := machinelearningv1.GetDeploymentName(mlDep, *p, sPodSpec, idx)
if machinelearningv1.IsPrepack(pu) {
sPodSpec, idx := utils.GetSeldonPodSpecForPredictiveUnit(p, pu.Name)
if sPodSpec == nil {
return fmt.Errorf("Failed to find PodSpec for Prepackaged server PreditiveUnit named %s", pu.Name)
}
depName := machinelearningv1.GetDeploymentName(mlDep, *p, sPodSpec, idx)

deploy, existing, err := pi.findDeployment(c, depName)
if err != nil {
Expand Down Expand Up @@ -487,27 +487,30 @@ func (pi *PrePackedInitialiser) addModelServersAndInitContainers(mlDep *machinel
c.deployments = append(c.deployments, deploy)
}
}
} else {
// add model uri initializer for non server components
if pu.ModelURI != "" {
log.Info("Add rclone init container for predictive unit", "predictive unit", pu.Name)
deploy, existing, err := pi.findDeployment(c, depName)
if err != nil {
return err
}
if !existing {
return fmt.Errorf("Expected to find a deployment for predictive unit %s", pu.Name)
}
mi := NewModelInitializer(pi.ctx, pi.clientset)
c := utils.GetContainerForDeployment(deploy, pu.Name)
if c == nil {
return fmt.Errorf("Expected to find container for predictive unit %s", pu.Name)
}
envSecretRefName := extractEnvSecretRefName(pu)
_, err = mi.InjectModelInitializer(deploy, c.Name, pu.ModelURI, pu.ServiceAccountName, envSecretRefName, pu.StorageInitializerImage)
if err != nil {
return err
}
} else if pu.ModelURI != "" { // add model uri initializer for non server components
sPodSpec, idx := utils.GetSeldonPodSpecForPredictiveUnit(p, pu.Name)
if sPodSpec == nil {
return fmt.Errorf("Failed to find PodSpec for Prepackaged server PreditiveUnit named %s", pu.Name)
}
depName := machinelearningv1.GetDeploymentName(mlDep, *p, sPodSpec, idx)

log.Info("Add rclone init container for predictive unit", "predictive unit", pu.Name)
deploy, existing, err := pi.findDeployment(c, depName)
if err != nil {
return err
}
if !existing {
return fmt.Errorf("Expected to find a deployment for predictive unit %s", pu.Name)
}
mi := NewModelInitializer(pi.ctx, pi.clientset)
c := utils.GetContainerForDeployment(deploy, pu.Name)
if c == nil {
return fmt.Errorf("Expected to find container for predictive unit %s", pu.Name)
}
envSecretRefName := extractEnvSecretRefName(pu)
_, err = mi.InjectModelInitializer(deploy, c.Name, pu.ModelURI, pu.ServiceAccountName, envSecretRefName, pu.StorageInitializerImage)
if err != nil {
return err
}
}

Expand Down
79 changes: 79 additions & 0 deletions operator/controllers/seldondeployment_prepackaged_servers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1218,6 +1218,85 @@ var _ = Describe("Create a prepacked triton server with seldon.io/no-storage-ini

})

var _ = Describe("Create a RANDOM_ABTEST deployment", func() {
const timeout = time.Second * 30
const interval = time.Second * 1
const name = "pp1"
const sdepName = "prepack13"
envExecutorUser = "2"
By("Creating a resource")
It("should create a resource with defaults", func() {
Expect(k8sClient).NotTo(BeNil())

key := types.NamespacedName{
Name: sdepName,
Namespace: "default",
}
impl := machinelearningv1.RANDOM_ABTEST
instance := &machinelearningv1.SeldonDeployment{
ObjectMeta: metav1.ObjectMeta{
Name: key.Name,
Namespace: key.Namespace,
},
Spec: machinelearningv1.SeldonDeploymentSpec{
Predictors: []machinelearningv1.PredictorSpec{
{
Name: name,
ComponentSpecs: []*machinelearningv1.SeldonPodSpec{
{
Spec: corev1.PodSpec{
Containers: []corev1.Container{
{
Image: "seldonio/mock_classifier:1.0",
Name: "classifier1",
},
{
Image: "seldonio/mock_classifier:1.0",
Name: "classifier2",
},
},
},
},
},
Graph: machinelearningv1.PredictiveUnit{
Implementation: &impl,
Children: []machinelearningv1.PredictiveUnit{
{
Name: "classifier1",
},
{
Name: "classifier2",
},
},
},
},
},
},
}

configMapName := types.NamespacedName{Name: "seldon-config",
Namespace: "seldon-system"}
configResult := &corev1.ConfigMap{}
const timeout = time.Second * 30
Eventually(func() error { return k8sClient.Get(context.TODO(), configMapName, configResult) }, timeout).
Should(Succeed())

// Run Defaulter
instance.Default()

Expect(k8sClient.Create(context.Background(), instance)).Should(Succeed())

fetched := &machinelearningv1.SeldonDeployment{}
Eventually(func() error {
err := k8sClient.Get(context.Background(), key, fetched)
return err
}, timeout, interval).Should(BeNil())
Expect(fetched.Name).Should(Equal(sdepName))

Expect(k8sClient.Delete(context.Background(), instance)).Should(Succeed())
})
})

func createCustomModelWithUri() (*machinelearningv1.SeldonDeployment,
*machinelearningv1.PredictorSpec,
*components,
Expand Down

0 comments on commit 6652d08

Please sign in to comment.