Skip to content

Commit 9231455

Browse files
Should give precedence to user provided env var on Universal NIM Service (#577)
1 parent e649baf commit 9231455

File tree

3 files changed

+370
-31
lines changed

3 files changed

+370
-31
lines changed

api/apps/v1alpha1/nimservice_types.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -309,95 +309,95 @@ func (n *NIMService) GetLWSLeaderEnv() []corev1.EnvVar {
309309
mpiTimeout = n.Spec.MultiNode.MPI.MPIStartTimeout
310310
}
311311

312-
env = append(env,
313-
corev1.EnvVar{
312+
env = utils.MergeEnvVars([]corev1.EnvVar{
313+
{
314314
Name: "NIM_LEADER_ROLE",
315315
Value: "1",
316316
},
317-
corev1.EnvVar{
317+
{
318318
Name: "NIM_MPI_ALLOW_RUN_AS_ROOT",
319319
Value: "0",
320320
},
321-
corev1.EnvVar{
321+
{
322322
Name: "OMPI_MCA_orte_keep_fqdn_hostnames",
323323
Value: "true",
324324
},
325-
corev1.EnvVar{
325+
{
326326
Name: "OMPI_MCA_plm_rsh_args",
327327
Value: "-o ConnectionAttempts=20",
328328
},
329-
corev1.EnvVar{
329+
{
330330
Name: "NIM_NUM_COMPUTE_NODES",
331331
Value: fmt.Sprintf("%d", n.Spec.MultiNode.Size),
332332
},
333-
corev1.EnvVar{
333+
{
334334
Name: "GPUS_PER_NODE",
335335
Value: fmt.Sprintf("%d", n.Spec.MultiNode.GPUSPerPod),
336336
},
337-
corev1.EnvVar{
337+
{
338338
Name: "CLUSTER_START_TIMEOUT",
339339
Value: fmt.Sprintf("%d", mpiTimeout),
340340
},
341-
corev1.EnvVar{
341+
{
342342
Name: "CLUSTER_SIZE",
343343
ValueFrom: &corev1.EnvVarSource{
344344
FieldRef: &corev1.ObjectFieldSelector{
345345
FieldPath: "metadata.annotations['leaderworkerset.sigs.k8s.io/size']",
346346
},
347347
},
348348
},
349-
corev1.EnvVar{
349+
{
350350
Name: "GROUP_INDEX",
351351
ValueFrom: &corev1.EnvVarSource{
352352
FieldRef: &corev1.ObjectFieldSelector{
353353
FieldPath: "metadata.labels['leaderworkerset.sigs.k8s.io/group-index']",
354354
},
355355
},
356356
},
357-
)
357+
}, env)
358358
return env
359359
}
360360

361361
func (n *NIMService) GetLWSWorkerEnv() []corev1.EnvVar {
362362
env := n.GetEnv()
363-
env = append(env,
364-
corev1.EnvVar{
363+
env = utils.MergeEnvVars([]corev1.EnvVar{
364+
{
365365
Name: "NIM_LEADER_ROLE",
366366
Value: "0",
367367
},
368-
corev1.EnvVar{
368+
{
369369
Name: "NIM_MPI_ALLOW_RUN_AS_ROOT",
370370
Value: "0",
371371
},
372-
corev1.EnvVar{
372+
{
373373
Name: "NIM_NUM_COMPUTE_NODES",
374374
Value: fmt.Sprintf("%d", n.Spec.MultiNode.Size),
375375
},
376-
corev1.EnvVar{
376+
{
377377
Name: "LEADER_NAME",
378378
ValueFrom: &corev1.EnvVarSource{
379379
FieldRef: &corev1.ObjectFieldSelector{
380380
FieldPath: "metadata.annotations['leaderworkerset.sigs.k8s.io/leader-name']",
381381
},
382382
},
383383
},
384-
corev1.EnvVar{
384+
{
385385
Name: "NAMESPACE",
386386
ValueFrom: &corev1.EnvVarSource{
387387
FieldRef: &corev1.ObjectFieldSelector{
388388
FieldPath: "metadata.namespace",
389389
},
390390
},
391391
},
392-
corev1.EnvVar{
392+
{
393393
Name: "LWS_NAME",
394394
ValueFrom: &corev1.EnvVarSource{
395395
FieldRef: &corev1.ObjectFieldSelector{
396396
FieldPath: "metadata.labels['leaderworkerset.sigs.k8s.io/name']",
397397
},
398398
},
399399
},
400-
)
400+
}, env)
401401
return env
402402
}
403403

internal/controller/platform/standalone/nimservice.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
324324
return ctrl.Result{}, err
325325
}
326326

327-
var profileEnv *corev1.EnvVar
327+
var profileEnv *[]corev1.EnvVar
328328
var profile *appsv1alpha1.NIMProfile
329329
var gpuResources *corev1.ResourceRequirements
330330
var initContainers []corev1.Container
@@ -333,10 +333,10 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
333333
var renderObj client.Object
334334

335335
if modelProfile != "" {
336-
profileEnv = &corev1.EnvVar{
336+
profileEnv = &[]corev1.EnvVar{{
337337
Name: "NIM_MODEL_PROFILE",
338338
Value: modelProfile,
339-
}
339+
}}
340340

341341
// Only assign GPU resources if the NIMCache is for optimized NIM
342342
if nimCache.IsOptimizedNIM() {
@@ -370,20 +370,20 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
370370
lwsParams.LeaderVolumes = nimService.GetLeaderVolumes(*modelPVC)
371371
lwsParams.WorkerVolumes = nimService.GetWorkerVolumes(*modelPVC)
372372
if nimCache.IsUniversalNIM() {
373-
lwsParams.WorkerEnvs = append(lwsParams.WorkerEnvs, corev1.EnvVar{
373+
lwsParams.WorkerEnvs = utils.MergeEnvVars([]corev1.EnvVar{{
374374
Name: "NIM_MODEL_NAME",
375375
Value: utils.DefaultModelStorePath,
376-
})
377-
lwsParams.LeaderEnvs = append(lwsParams.LeaderEnvs, corev1.EnvVar{
376+
}}, lwsParams.WorkerEnvs)
377+
lwsParams.LeaderEnvs = utils.MergeEnvVars([]corev1.EnvVar{{
378378
Name: "NIM_MODEL_NAME",
379379
Value: utils.DefaultModelStorePath,
380-
})
380+
}}, lwsParams.LeaderEnvs)
381381
}
382382
lwsParams.LeaderVolumeMounts = nimService.GetLeaderVolumeMounts(*modelPVC)
383383
lwsParams.WorkerVolumeMounts = nimService.GetWorkerVolumeMounts(*modelPVC)
384384
if profileEnv != nil {
385-
lwsParams.WorkerEnvs = append(lwsParams.WorkerEnvs, *profileEnv)
386-
lwsParams.LeaderEnvs = append(lwsParams.LeaderEnvs, *profileEnv)
385+
lwsParams.WorkerEnvs = utils.MergeEnvVars(*profileEnv, lwsParams.WorkerEnvs)
386+
lwsParams.LeaderEnvs = utils.MergeEnvVars(*profileEnv, lwsParams.LeaderEnvs)
387387
}
388388
if gpuResources != nil {
389389
lwsParams.Resources = gpuResources
@@ -415,16 +415,16 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
415415
deploymentParams.OrchestratorType = string(r.GetOrchestratorType())
416416
deploymentParams.PodResourceClaims = shared.GetPodResourceClaims(namedDraResources)
417417
if nimCache.IsUniversalNIM() {
418-
deploymentParams.Env = append(deploymentParams.Env, corev1.EnvVar{
418+
deploymentParams.Env = utils.MergeEnvVars([]corev1.EnvVar{{
419419
Name: "NIM_MODEL_NAME",
420420
Value: utils.DefaultModelStorePath,
421-
})
421+
}}, deploymentParams.Env)
422422
}
423423
// Setup volume mounts with model store
424424
deploymentParams.Volumes = nimService.GetVolumes(*modelPVC)
425425
deploymentParams.VolumeMounts = nimService.GetVolumeMounts(*modelPVC)
426426
if profileEnv != nil {
427-
deploymentParams.Env = append(deploymentParams.Env, *profileEnv)
427+
deploymentParams.Env = utils.MergeEnvVars(*profileEnv, deploymentParams.Env)
428428
}
429429
// Auto assign GPU resources in case of the optimized profile
430430
if gpuResources != nil {

0 commit comments

Comments
 (0)