Skip to content

Commit 21a4ec5

Browse files
Adding HF token env var when using multi llm NIM without caching (#709)
Signed-off-by: Vishesh Tanksale <vtanksale@nvidia.com>
1 parent 6e602cf commit 21a4ec5

File tree

7 files changed

+96
-32
lines changed

7 files changed

+96
-32
lines changed

api/apps/v1alpha1/nimservice_types.go

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,17 @@ func (n *NIMService) GetStandardEnv() []corev1.EnvVar {
279279
Name: "NIM_CACHE_PATH",
280280
Value: utils.DefaultModelStorePath,
281281
},
282+
{
283+
Name: "NGC_API_KEY",
284+
ValueFrom: &corev1.EnvVarSource{
285+
SecretKeyRef: &corev1.SecretKeySelector{
286+
LocalObjectReference: corev1.LocalObjectReference{
287+
Name: n.Spec.AuthSecret,
288+
},
289+
Key: "NGC_API_KEY",
290+
},
291+
},
292+
},
282293
{
283294
Name: "OUTLINES_CACHE_DIR",
284295
Value: "/tmp/outlines",
@@ -355,11 +366,6 @@ func (n *NIMService) getLWSCommonEnv() []corev1.EnvVar {
355366
return env
356367
}
357368

358-
// GetLWSLeaderEnvFrom returns the env from sources for the leader worker set.
359-
func (n *NIMService) GetLWSCommonEnvFrom() []corev1.EnvFromSource {
360-
return n.GetEnvFrom()
361-
}
362-
363369
func (n *NIMService) GetLWSLeaderEnv() []corev1.EnvVar {
364370
env := n.getLWSCommonEnv()
365371

@@ -564,23 +570,6 @@ func (n *NIMService) GetEnv() []corev1.EnvVar {
564570
return envVarList
565571
}
566572

567-
// GetEnvFrom returns merged slice of standard and user specified env from sources.
568-
func (n *NIMService) GetEnvFrom() []corev1.EnvFromSource {
569-
if n.Spec.AuthSecret != "" {
570-
return []corev1.EnvFromSource{
571-
{
572-
SecretRef: &corev1.SecretEnvSource{
573-
LocalObjectReference: corev1.LocalObjectReference{
574-
Name: n.Spec.AuthSecret,
575-
},
576-
},
577-
},
578-
}
579-
}
580-
// no secrets to source the env variables
581-
return []corev1.EnvFromSource{}
582-
}
583-
584573
// GetImage returns container image for the NIMService.
585574
func (n *NIMService) GetImage() string {
586575
return fmt.Sprintf("%s:%s", n.Spec.Image.Repository, n.Spec.Image.Tag)
@@ -1065,7 +1054,6 @@ func (n *NIMService) GetDeploymentParams() *rendertypes.DeploymentParams {
10651054
// Set container spec
10661055
params.ContainerName = n.GetContainerName()
10671056
params.Env = n.GetEnv()
1068-
params.EnvFrom = n.GetEnvFrom()
10691057
params.Args = n.GetArgs()
10701058
params.Command = n.GetCommand()
10711059
params.Resources = n.GetResources()
@@ -1137,8 +1125,6 @@ func (n *NIMService) GetLWSParams() *rendertypes.LeaderWorkerSetParams {
11371125
params.Command = n.GetCommand()
11381126
params.LeaderEnvs = n.GetLWSLeaderEnv()
11391127
params.WorkerEnvs = n.GetLWSWorkerEnv()
1140-
params.LeaderEnvFrom = n.GetLWSCommonEnvFrom()
1141-
params.WorkerEnvFrom = n.GetLWSCommonEnvFrom()
11421128
params.UserID = n.GetUserID()
11431129
params.GroupID = n.GetGroupID()
11441130
params.Image = n.GetImage()

internal/controller/platform/kserve/nimservice.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,28 @@ func (r *NIMServiceReconciler) renderAndSyncInferenceService(ctx context.Context
477477
},
478478
}, isvcParams.Env)
479479
}
480+
// If NIMCache is not provided, and the model is from Hugging Face, add the HF_TOKEN to the environment variables
481+
if nimService.GetNIMCacheName() == "" {
482+
env := utils.FindEnvByValue(isvcParams.Env, "NIM_MODEL_NAME")
483+
if env != nil {
484+
if strings.HasPrefix(env.Value, "hf://") {
485+
isvcParams.Env = utils.RemoveEnvVar(isvcParams.Env, "NGC_API_KEY")
486+
isvcParams.Env = utils.MergeEnvVars(isvcParams.Env, []corev1.EnvVar{
487+
{
488+
Name: "HF_TOKEN",
489+
ValueFrom: &corev1.EnvVarSource{
490+
SecretKeyRef: &corev1.SecretKeySelector{
491+
LocalObjectReference: corev1.LocalObjectReference{
492+
Name: nimService.Spec.AuthSecret,
493+
},
494+
Key: "HF_TOKEN",
495+
},
496+
},
497+
},
498+
})
499+
}
500+
}
501+
}
480502
// Setup volume mounts with model store
481503
isvcParams.Volumes = nimService.GetVolumes(modelPVC)
482504
isvcParams.VolumeMounts = nimService.GetVolumeMounts(modelPVC)

internal/controller/platform/standalone/nimservice.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,28 @@ func (r *NIMServiceReconciler) reconcileNIMService(ctx context.Context, nimServi
448448
Value: utils.DefaultModelStorePath,
449449
}}, deploymentParams.Env)
450450
}
451+
// If NIMCache is not provided, and the model is from Hugging Face, add the HF_TOKEN to the environment variables
452+
if nimService.GetNIMCacheName() == "" {
453+
env := utils.FindEnvByValue(deploymentParams.Env, "NIM_MODEL_NAME")
454+
if env != nil {
455+
if strings.HasPrefix(env.Value, "hf://") {
456+
deploymentParams.Env = utils.RemoveEnvVar(deploymentParams.Env, "NGC_API_KEY")
457+
deploymentParams.Env = utils.MergeEnvVars(deploymentParams.Env, []corev1.EnvVar{
458+
{
459+
Name: "HF_TOKEN",
460+
ValueFrom: &corev1.EnvVarSource{
461+
SecretKeyRef: &corev1.SecretKeySelector{
462+
LocalObjectReference: corev1.LocalObjectReference{
463+
Name: nimService.Spec.AuthSecret,
464+
},
465+
Key: "HF_TOKEN",
466+
},
467+
},
468+
},
469+
})
470+
}
471+
}
472+
}
451473
// Setup volume mounts with model store
452474
deploymentParams.Volumes = nimService.GetVolumes(modelPVC)
453475
deploymentParams.VolumeMounts = nimService.GetVolumeMounts(modelPVC)

internal/controller/platform/standalone/nimservice_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,6 +1123,17 @@ var _ = Describe("NIMServiceReconciler for a standalone platform", func() {
11231123
Name: "NIM_CACHE_PATH",
11241124
Value: "/model-store",
11251125
},
1126+
{
1127+
Name: "NGC_API_KEY",
1128+
ValueFrom: &corev1.EnvVarSource{
1129+
SecretKeyRef: &corev1.SecretKeySelector{
1130+
LocalObjectReference: corev1.LocalObjectReference{
1131+
Name: "",
1132+
},
1133+
Key: "NGC_API_KEY",
1134+
},
1135+
},
1136+
},
11261137
{
11271138
Name: "OUTLINES_CACHE_DIR",
11281139
Value: "/tmp/outlines",
@@ -1214,6 +1225,17 @@ var _ = Describe("NIMServiceReconciler for a standalone platform", func() {
12141225
Name: "NIM_CACHE_PATH",
12151226
Value: "/model-store",
12161227
},
1228+
{
1229+
Name: "NGC_API_KEY",
1230+
ValueFrom: &corev1.EnvVarSource{
1231+
SecretKeyRef: &corev1.SecretKeySelector{
1232+
LocalObjectReference: corev1.LocalObjectReference{
1233+
Name: "",
1234+
},
1235+
Key: "NGC_API_KEY",
1236+
},
1237+
},
1238+
},
12171239
{
12181240
Name: "OUTLINES_CACHE_DIR",
12191241
Value: "/tmp/outlines",

internal/render/types/types.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ type DeploymentParams struct {
7070
Volumes []corev1.Volume
7171
VolumeMounts []corev1.VolumeMount
7272
Env []corev1.EnvVar
73-
EnvFrom []corev1.EnvFromSource
7473
Resources *corev1.ResourceRequirements
7574
NodeSelector map[string]string
7675
Tolerations []corev1.Toleration
@@ -112,8 +111,6 @@ type LeaderWorkerSetParams struct {
112111
LeaderVolumeMounts []corev1.VolumeMount
113112
WorkerEnvs []corev1.EnvVar
114113
LeaderEnvs []corev1.EnvVar
115-
WorkerEnvFrom []corev1.EnvFromSource
116-
LeaderEnvFrom []corev1.EnvFromSource
117114
Resources *corev1.ResourceRequirements
118115
NodeSelector map[string]string
119116
Tolerations []corev1.Toleration

internal/utils/utils.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,3 +485,22 @@ func IsVersionGreaterThanOrEqual(version string, minVersion string) bool {
485485
}
486486
return cv.AtLeast(mv)
487487
}
488+
489+
func RemoveEnvVar(envs []corev1.EnvVar, name string) []corev1.EnvVar {
490+
result := make([]corev1.EnvVar, 0, len(envs))
491+
for _, e := range envs {
492+
if e.Name != name {
493+
result = append(result, e)
494+
}
495+
}
496+
return result
497+
}
498+
499+
func FindEnvByValue(envs []corev1.EnvVar, key string) *corev1.EnvVar {
500+
for i := range envs {
501+
if envs[i].Name == key {
502+
return &envs[i]
503+
}
504+
}
505+
return nil
506+
}

manifests/deployment.yaml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,6 @@ spec:
9898
{{- if .Env }}
9999
{{- .Env | yaml | nindent 10 }}
100100
{{- end }}
101-
envFrom:
102-
{{- if .EnvFrom }}
103-
{{- .EnvFrom | yaml | nindent 10 }}
104-
{{- end }}
105101
{{- with .Resources }}
106102
resources:
107103
{{ . | yaml | nindent 10 }}

0 commit comments

Comments
 (0)