Deploy Harmonizer NIM with Helm
Deploy Harmonizer NIM on Kubernetes with the NVIDIA NIM for World Foundation Models (WFM) Helm chart. For supported GPUs and profiles, refer to the Support Matrix.
Prerequisites
- Prepare a Kubernetes cluster with supported NVIDIA GPU nodes and the GPU Operator installed.
- Create an
NGC_API_KEYand authenticate to NGC as described in Quickstart for Harmonizer NIM.
Deploy the NIM
Complete these steps to install the chart and verify the deployment:
-
Download the
nim-wfmHelm chart from NGC and inspect its defaults.After you have an NGC API key, download version
1.3.0or later of thenim-wfmHelm chart from NGC. This chart version includes the gRPC Service port and configurable inference test used by Harmonizer NIM. For available versions, refer to the NGC Catalog.You can inspect the chart README and values before deploying:
-
Create the Kubernetes registry and model-download secrets.
Create one secret for pulling the container image and one secret for model asset downloads:
-
Create
custom-values.yamlwith the public image and persistent model cache.Create a
custom-values.yamlfile with a persistent model cache.Do not set
NGC_API_KEYorNIM_CACHE_PATHthrough theenvlist. Usemodel.ngcAPISecretfor the NGC key andmodel.nimCachefor the cache mount path. When persistence is enabled, the chart mounts the model-cache persistent volume claim (PVC) atmodel.nimCacheand setsNIM_CACHE_PATHto the same value. Thus, the example relocates the container default of/opt/nim/.cacheto the persistent/model-storevolume. For more information, refer to Environment Variables and Configuration. -
Optional: Create
grpc-values.yamlto select gRPC inference.The inference server runs either HTTP or gRPC. To use gRPC, create a
grpc-values.yamlfile that selects the gRPC entrypoint and exposes its port through the Kubernetes Service:The HTTP management server remains available on
model.apiPortfor health, readiness, and metrics when gRPC inference is selected. The chart’s readiness test therefore works in both protocol modes. The generic inference test sends an HTTPPOSTrequest and is not rendered in gRPC mode. Test the full gRPCharmonizer.v1.Harmonizer/Processcall with a client generated from the Harmonizer protocol definition, as described in the API Reference. -
Install the chart, wait for readiness, and run its tests.
Choose one of the following install commands. For HTTP inference, use your custom values:
For gRPC inference, apply the gRPC override after the common values:
Wait for the pod to become ready:
After the NIM becomes ready, press Ctrl+C to stop following the logs. This stops the log viewer and leaves the deployment running.
Run the chart tests:
With the HTTP Values on this page, the tests check the HTTP readiness route and send one image to
/v1/inferwith the configured payload. With the gRPC override, the tests check the HTTP readiness route only. -
Forward the service ports and run an inference request.
Port-forward the HTTP service:
Keep port forwarding running in this terminal. In a second terminal on the same host, verify readiness:
For request examples, refer to Quickstart for Harmonizer NIM and the API Reference.
For a gRPC deployment, forward both the HTTP management port and the gRPC inference port:
Keep port forwarding running in this terminal. In a second terminal, connect the generated gRPC client to
localhost:50051. Keep readiness probes and management requests onlocalhost:8000.
Troubleshooting
Recover from a Fatal CUDA Error
Harmonizer treats CUDA error 226 (cudaErrorContained) as unrecoverable. It
marks the server unready, rejects or settles pending GPU work, and then exits
with status 70 after a 250 ms grace period. The affected server process does
not remain running indefinitely in an unready or gRPC NOT_SERVING state. If
the error occurs during model loading or warmup, the process exits immediately
because the server and its health endpoints have not started.
For a deployment created by this chart, the readiness endpoint immediately
returns 503 during a serving-time transition. The 250 ms interval is shorter
than the chart’s normal readiness-probe cadence, so the process exit normally
makes the pod unready and removes it from Service endpoints before the probe
records the transition. The exit, not the readiness probe, causes Kubernetes to
restart the container according to the pod restart policy. Inspect the previous
container instance and its restart count with commands such as the following:
A container restart creates a fresh CUDA context but does not move the pod to a
different GPU or node. If the error recurs, the pod can enter
CrashLoopBackOff. Inspect GPU Xid, ECC, and NVLink health and remove unhealthy
hardware from service according to your cluster operations policy.
For more information about the health-state transition, refer to Observability Metrics for Harmonizer NIM.
Pod Remains Pending
If the pod is stuck in Pending, check scheduling events:
Common causes are missing GPU resources, node taints without matching tolerations, and storage configuration issues.
Startup Fails Before Readiness
If startup fails before readiness, inspect the container logs:
Large first-run model downloads and startup compilation can take time. Use a
persistent cache volume and increase startupProbe.failureThreshold if your
cluster has slow model storage or network access.