NIM Service Chart#

Overview#

The nvidia-lipsync-h4m-service Helm chart deploys the NVIDIA LipSync NIM as a standalone inference service on Kubernetes or Red Hat OpenShift.

This chart can be deployed standalone for integration into a custom media pipeline, or as a subchart of the End-to-End Demo Chart.


Installation#

Prerequisites#

Complete all prerequisite steps (Rivermax license, image pull and model pull secrets, GPU node, Multus attachment for SMPTE ST 2110) before running helm install. For details, refer to Getting Started.

For hardware requirements per pod, refer to the Support Matrix.

If not already done, add the Helm repository and pull the chart. (For the full repository setup, refer to Pull Helm Charts.)

helm pull nim-repo/nvidia-lipsync-h4m-service --version 1.0.0

The downloaded .tgz is referenced directly in the following installation commands.

Helm Installation#

The chart includes a default values.yaml. For full SMPTE ST 2110 and NMOS override files, refer to Starter Configuration Files.

Default deployment (NMOS mode, 1080p):

Important

The default values.yaml ships with example values for cluster-specific fields such as node selector (example-gpu-node), image pull secret, network name, and scheduler. You must update these values to match your cluster before deploying.

helm install lipsync-h4m-service \
  nvidia-lipsync-h4m-service-1.0.0.tgz

With inline overrides:

helm upgrade --install lipsync-h4m-service \
  nvidia-lipsync-h4m-service-1.0.0.tgz \
  --set nodeSelector.hostname=<gpu-node-name> \
  --set image.secret=<image-pull-secret> \
  --set schedulerName=<scheduler-name> \
  --set network.name=<multus-net-attach-def> \
  --set ngcApiKeySecret.name=<model-pull-secret>

Common --set overrides:

--set Flag

Purpose

Default

nodeSelector.hostname

Target GPU node.

example-gpu-node

image.secret

Image pull secret (docker-registry type) for nvcr.io.

ngc-secret-key

schedulerName

Pod spec.schedulerName. Refer to Scheduler Requirements for NUMA-aware Clusters.

topo-aware-scheduler

network.name

Multus NetworkAttachmentDefinition for SMPTE ST 2110. Refer to High-Speed Network Configuration.

media-a-tx-net

ngcApiKeySecret.name

Model pull secret (generic type) for NGC model download.

model-download-api-key

After installation, check pod status:

kubectl get pods

On Red Hat OpenShift, replace kubectl with oc.

Example output:

NAME                                                    READY   STATUS
 nvidia-lipsync-nim-nmos-59cd769766-sh4c2                1/1   Running

Confirm the LipSync NIM pod shows 1/1 in the READY column before continuing.

For NMOS, refer to Chrome Remote Desktop for UI access and setup steps.

For NMOS connection order and NMOS known issues, refer to Limitations and Known Behaviors.


Deployment Modes#

The NIM service offers two modes to support media stream connections:

Aspect

SMPTE ST 2110

NMOS

Values file

values-st2110.yaml

values-nmos.yaml

Stream discovery

Fixed multicast IP addresses and ports in values.

Dynamic discovery via NMOS Connection Manager.

Use case

Known network, fixed topology.

Dynamic registration and connection management.

SMPTE ST 2110 Mode#

NMOS discovery is disabled. All multicast IP addresses, ports, and session parameters must be configured explicitly. Sender output IP addresses and ports must match NIM service input IP addresses and ports, and NIM service output IP addresses and ports must match downstream receiver input IP addresses and ports.

helm upgrade --install lipsync-h4m-service \
  nvidia-lipsync-h4m-service-1.0.0.tgz \
  -f values-st2110.yaml

NMOS Mode#

Stream connections are managed via the NMOS Connection Manager UI. Most input and output transport parameters can be omitted from the values file—only session names and ancillary output parameters must be set. On Holoscan for Media clusters, the UI is typically opened from a browser on the cluster network; for remote graphical access, refer to Chrome Remote Desktop in Getting Started.

helm upgrade --install lipsync-h4m-service \
  nvidia-lipsync-h4m-service-1.0.0.tgz \
  -f values-nmos.yaml

For NMOS connection order and other known issues, refer to Limitations and Known Behaviors.


Starter Configuration Files#

Copy the appropriate configuration into values-st2110.yaml or values-nmos.yaml, adjust fields for your environment, and pass it to helm upgrade --install with -f.

For a full reference of all Helm keys and pipeline tuning parameters, refer to the Configuration Reference.

ST 2110 (Static Mode) Configuration (values-st2110.yaml)#

values-st2110.yaml (ST 2110, NMOS disabled):

enabled: true
appName: nvidia-lipsync-nim-st2110

containerSecurityContext:
  runAsUser: 1000
  runAsGroup: 1000
  runAsNonRoot: true
  allowPrivilegeEscalation: true

replicas: 1
nodeSelector:
  hostname: example-gpu-node
network:
  name: media-a-tx-net
schedulerName: topo-aware-scheduler
image:
  repository: nvcr.io/nim/nvidia/lipsync-h4m-nim
  tag: "1.0.0"
  secret: ngc-secret-key

ngcApiKeySecret:
  name: model-download-api-key
  key: NGC_API_KEY

video:
  width: 1920
  height: 1080
  framerateNum: 30
  framerateDen: 1

nmos:
  enabled: false
  hostname: lipsync-nim.local
  description: Nvidia LipSync NIM
  label: Nvidia-LipSync-NIM

service:
  enabled: true
  type: NodePort
  port: 9010
  nodePort: 32513

nim:
  enabled: 1

logging:
  level: 3

input:
  video:
    sessionName: video_in
    localInterfaceName: net1
    hostIp: "234.5.8.9"
    hostPort: "5001"
    hostNumSubnetBits: 24
  audio:
    sessionName: audio_in
    localInterfaceName: net1
    hostIp: "234.5.8.9"
    hostPort: "7001"
    hostNumSubnetBits: 24
  ancillaryData:
    enabled: false
    sessionName: ancillary_data_in
    localInterfaceName: net1
    hostIp: "234.5.8.9"
    hostPort: "8001"
    hostNumSubnetBits: 24

output:
  video:
    sessionName: video_out
    localInterfaceName: net1
    hostIp: "234.5.8.9"
    hostPort: "5002"
    hostNumSubnetBits: 24
  boundingBoxEnabled: false

model:
  headMovementSpeed: 0

nimModelCache:
  enabled: false
  size: 10Gi
  storageClassName: ""

serverLogs:
  enabled: false
  size: 5Gi
  storageClassName: ""

NMOS Configuration (values-nmos.yaml)#

enabled: true
appName: nvidia-lipsync-nim-nmos

containerSecurityContext:
  runAsUser: 1000
  runAsGroup: 1000
  runAsNonRoot: true
  allowPrivilegeEscalation: true

replicas: 1
nodeSelector:
  hostname: example-gpu-node
network:
  name: media-a-tx-net
schedulerName: topo-aware-scheduler
image:
  repository: nvcr.io/nim/nvidia/lipsync-h4m-nim
  tag: "1.0.0"
  secret: ngc-secret-key

ngcApiKeySecret:
  name: model-download-api-key
  key: NGC_API_KEY

nmos:
  enabled: true
  hostname: lipsync-nim.local
  description: Nvidia LipSync NIM
  label: Nvidia-LipSync-NIM

service:
  enabled: true
  type: NodePort
  port: 9010
  nodePort: 32513

nim:
  enabled: 1

logging:
  level: 3

video:
  width: 1920
  height: 1080
  framerateNum: 30
  framerateDen: 1

audio:
  pcmFormat: S24BE
  samplingRate: 48000
  numChannels: 1

input:
  video:
    sessionName: video_in
  audio:
    sessionName: audio_in
  ancillaryData:
    enabled: false
    sessionName: ancillary_data_in

output:
  video:
    sessionName: video_out
  boundingBoxEnabled: false

model:
  headMovementSpeed: 0

nimModelCache:
  enabled: false
  size: 10Gi
  storageClassName: ""

serverLogs:
  enabled: false
  size: 5Gi
  storageClassName: ""

On Red Hat OpenShift, replace kubectl with oc. For log access, refer to Observability.

Verify and Check Logs#

helm status lipsync-h4m-service

kubectl get pods -o wide

helm get values lipsync-h4m-service

Uninstall#

helm uninstall lipsync-h4m-service

For troubleshooting and advanced configuration, refer to Advanced Usage.