The Overlay Directory
install-lilt-charts.sh applies every *.yaml file under lilt/environments/<ENV_NAME>/values.d/ on top of the base values file and the environment overlay. ENV_NAME defaults to lilt, so the directory is usually lilt/environments/lilt/values.d/.
lilt/values.yaml or lilt/eks-values.yaml directly produces the same result at deploy time, but you then have to remember to reapply the edit on every upgrade.
Files that set different top-level keys compose safely. A GPU profile and an SSO profile can sit in the directory together.
GPU Profiles
The base values file ships one GPU allocation per service, sized for the smallest hardware that service supports. On larger cards the same model needs fewer of them, and the surplus is not free: the device plugin assigns GPUs exclusively, so a card reserved by a pod that never uses it cannot be used by anything else. The profiles inlilt/gpu-profiles/ are alternative allocations for hardware that allows a different one. They are optional. Installing nothing keeps the defaults, which work on every card the service supports.
Read Your Cards First
A profile is matched against the VRAM the driver reports, which is lower than the size the card is sold as. An L4 sold as 24 GB reports 23034 MiB.These labels come from GPU Feature Discovery, which the NVIDIA GPU Operator provides. They are a hard requirement of any GPU install, not something a profile introduces. If the labels are absent, GPU pods stay
Pending because no node satisfies their affinity.Choosing a Profile
Pick the smallest card count your hardware allows.
The two defaults differ because the hardware does. An on-premises cluster typically has several smaller cards, so the default takes two of them. An AWS GPU node carries one large card, so the EKS default takes one and raises the floor high enough that the card can hold the whole model.
The memory floors are exclusive comparisons in the values files. A floor written as
43399 admits cards reporting 43400 MiB or more. The numbers in the preceding table are the values that actually qualify.
When to Use Each Profile
gemma-dual-medium.yaml — your cards are the 24 GB class and gemma stays Pending because no single card clears the EKS default’s floor. Two cards together hold what one cannot. The profile is bounded above, so it will not also match a larger card and reserve two where one would do.
gemma-single-large.yaml — your cards are 48 GB or larger and the on-premises default is reserving two where one suffices.
llama-dual-medium.yaml — your nodes have fewer than four cards, so the default never schedules. Here the profile is what makes llama runnable, not what makes it faster.
llama-single-large.yaml — your cards are 80 GB or larger.
llama-vllm-inference ships disabled on both flavors, as it is being retired in favour of Gemma. A llama profile only takes effect on a cluster that has turned it back on.Why a Profile Is a File
Each profile changes two fields that are only correct together: the GPU count Kubernetes reserves, and the memory floor in the node affinity that decides which cards are eligible. Changing one without the other fails, and the two failures look nothing alike. A count lowered without raising the floor still schedules, then the pod lands on cards too small for the model and dies during startup with a VRAM error. A floor raised without lowering the count never schedules at all, and the pod sitsPending forever.
Kubernetes cannot make this choice for you. The GPU count is a resource request, fixed when Helm renders the manifest, and the scheduler needs that number to pick a node, so it cannot depend on which node was picked. Keeping both fields in one file is what makes them impossible to apply by halves.
Services Without a Profile
llm-inference-whisper, batch-worker-gpuv4, and translatev4 carry GPU floors of their own but ship no profile. To change their allocation you edit the base values file, or write your own overlay file setting the same two fields.
Single Sign-On Profiles
LILT ships with external SSO disabled, so password sign-in works out of the box and no install points at an identity provider you do not control. The files inlilt/sso-profiles/ are complete configurations for one provider each. Apply one the same way:
singleOidcClientSecret key of the lilt-secrets secret. Add it to the environment’s secrets.yaml, or provision it through External Secrets Operator.
Writing a Profile for Your Own Provider
A profile sets all eight values on three services:front, av-scan, and auth-service. Each reads its own copy of the same block, so a profile covering only one of them leaves the other two disabled.
To customise TLS for the calls LILT makes to your provider, populate the
single-oidc-provider-tls-options secret and set the matching SINGLE_OIDC_PROVIDER_TLS_OPTIONS_PATH_TO_* values.
Apply a Profile
Copying a file changes nothing on its own. Re-run the installer:Pending with didn't match Pod's node affinity means no card in the cluster clears the profile’s floor. Compare the profile you chose against the nvidia.com/gpu.memory labels on your nodes.

