Operations and Troubleshooting#

Interpret health, inspect the selected profile, configure logging and guardrails, and diagnose failures. Refer to Deployment for launch and Configuration for environment variables.

Health and Startup#

Probe

Healthy Meaning

Not Verified

/v1/health/live

HTTP process is alive

Model artifacts are loaded or inference can run

/v1/health/ready

Selected backend reports ready after startup work

Every capability/media case has passed a basic verification test

Check both probes:

export NIM_URL=${NIM_URL:-http://localhost:8000}
curl -i "$NIM_URL/v1/health/live"
curl -i "$NIM_URL/v1/health/ready"

Both runtimes return {"object": "health.response", "message": "Service is ready", "status": "ready"} for readiness, and "Service is live" / "live" for liveness. Treat the HTTP status as the primary result. Failed probes are non-2xx.

Cold startup can include NVIDIA NGC download, cache materialization, engine build, model load, and warmup, so a live-but-not-ready interval is expected. Size orchestrator startup budgets for it. Profile selection reads each visible GPU’s free memory once, before materialization. A competing allocation can cause a lower-memory fallback or startup failure, and later changes do not trigger reselection.

Inspect the Running Service#

Use the active runtime rather than launch-time assumptions:

curl -fsS "$NIM_URL/v1/metadata" | python3 -m json.tool

Each endpoint answers a different operational question:

Endpoint

Operational Question

/v1/metadata

Which model_type, primary inference_endpoint, profile/checkpoint, and Generator model_variant did the NIM report?

/v1/models

Which model ID should the Reasoner client send? This endpoint alone does not identify the active runtime.

/v1/manifest

Which profile/artifact information is present in this image?

/v1/version

Which release/server API is running?

/v1/license

Where is the bundled product license information?

/openapi.json

Which routes and schemas does this active runtime expose?

/v1/manifest embeds the YAML manifest in manifest_file. To print the selected profile’s ID and manifest tags, initialize the pinned client environment and run:

uv run python examples/inspect_profile.py

Profile IDs and tags are image-specific. Do not copy them to another image.

Logging#

Set log level, JSON-line output, backend verbosity, and Reasoner request-body logging with the Server and Logging and Advanced Settings variables. At INFO, request prompts are redacted. At DEBUG, full prompts are logged, so use DEBUG only during diagnosis and treat its logs as sensitive. Never log secrets or raw media data URLs.

To read recent logs, run the command for your container:

docker logs --since 10m cosmos3-generator
docker logs --since 10m cosmos3-reasoner

Metrics#

Scrape $NIM_URL/v1/metrics. Refer to Monitoring for Prometheus and Grafana setup and the metric families of each runtime.

Long-Running Requests#

Generator /v1/infer requests are synchronous: the connection stays quiet until inference and serialization finish, which alone does not mean a hang. The backend queue-plus-execution ceiling is NIM_TRITON_REQUEST_TIMEOUT, default 30 minutes. A longer client timeout does not extend it. For the 60-minute Transfer client, launch the Generator with -e NIM_TRITON_REQUEST_TIMEOUT=3600000000. Before retrying a quiet request, check the container logs and GPU activity rather than readiness, and avoid blind retries that duplicate expensive work.

Unified-Memory Diagnostics#

On NVIDIA DGX Spark, Jetson AGX Thor, and other unified-memory systems, inspect current memory to tell a capacity failure from a temporary one. For a current-memory failure, stop the competing workload and rerun preflight. Do not clear the page cache, delete the NIM model cache, or reboot as routine recovery.

Guardrails#

Generator guardrails are an input-prompt blocklist and an Alibaba Qwen3Guard text guard (text switch), plus output face detection with blur and a Google SigLIP content check (video switches). The Reasoner has no NIM-provided guardrails.

Variable

Current Default

Effect

NIM_ENABLE_TEXT_GUARDRAILS

true

Input-prompt blocklist and text classifier path

NIM_ENABLE_VIDEO_GUARDRAILS

true

Output image/video face-privacy guardrail path

NIM_ENABLE_SIGLIP_GUARDRAILS

true

Per-frame safety classifier when output visual guardrails are enabled

A blocked request returns HTTP 422 and no usable partial output. Text checks run on the prompt that reaches generation. When prompt upsampling is enabled, that is the upsampled prompt.

Disabling controls can reduce safety/privacy protections and can violate deployment policy. Do so only for an approved, isolated diagnostic:

-e NIM_ENABLE_TEXT_GUARDRAILS=0 \
-e NIM_ENABLE_VIDEO_GUARDRAILS=0 \
-e NIM_ENABLE_SIGLIP_GUARDRAILS=0

Disabling video guardrails also disables SigLIP. Disabling SigLIP alone keeps the face path. Generator bring your own checkpoint (BYOC) does not replace the NIM-owned guardrails.

Prompt-Upsampling Diagnostics#

Startup fails if the feature is enabled without endpoint, model, key, or required templates. At request time, external failures log a warning and generation continues with the original prompt. When debugging, confirm the following:

  • The configured URL is OpenAI-compatible and reaches /v1/chat/completions.

  • The model supports image input when upsampling image-to-video (I2V). Text-to-image (T2I) and text-to-video (T2V) send text only.

  • The external secret is present but not logged.

  • Timeout and token limits suit the endpoint.

  • Provider-specific fields are placed in NIM_PROMPT_UPSAMPLING_EXTRA_BODY only when that endpoint accepts them.

Production Checks#

Before accepting traffic, complete these checks:

  • Require readiness, not only liveness.

  • Start with enough free memory on every participating GPU and review any profile-fallback warning.

  • Record version, active model, profile/checkpoint metadata, and image digest.

  • Verify the intended Generator or Reasoner route exists in live OpenAPI.

  • Send one small representative request for each enabled capability.

  • Confirm output decoding and artifact storage permissions.

  • Confirm logs do not contain secrets or unbounded media/request bodies.

  • Scrape metrics and test alerts if metrics are part of the SLO.

Errors#

Runtime

Status

When

Body

Generator

422

Schema, field, or media validation fails, or a guardrail blocks the request

Envelope, "type": "UnprocessableEntityError"; a validation message is <field>: <message>, with multiple errors joined by ;

Generator, Reasoner

404

Missing route, including the other runtime’s inference route

Envelope, "type": "NotFoundError"

Generator

500

Unhandled or backend error

JSON object with a string-valued error field instead of the standard envelope (below)

Reasoner

400

Request-shape or sampling-parameter validation fails

Envelope, "type": "BadRequestError"

Reasoner

422

An error whose message concerns video, image, media, decode, or codec

Envelope, "type": "UnprocessableEntityError"

The Generator 500 body is:

{"error": "Internal Server Error. Please see server logs for more details."}

Use the HTTP status and stable error-object fields, and retain the returned message for diagnosis. Do not make automation depend on exact error wording. A typical NIM error envelope is:

{
  "error": {
    "message": "<description>",
    "type": "<error class>",
    "code": 422
  }
}

A wrong-runtime 404 names the selected runtime, its route, and the deployment the request needs, for example: The selected runtime is 'generator', which serves POST /v1/infer. POST /v1/chat/completions requires a reasoner deployment.

Task-specific validation belongs to Generation, Action, Transfer, and Reasoning.

Troubleshooting#

Startup and Deployment#

For Kubernetes Pod, volume, and probe failures, refer to Helm Troubleshooting.

Symptom

Likely Cause

Action

Image pull unauthorized

Docker is not logged in or key lacks repository access

Review the complete NGC authentication and credential-storage workflow, then log in with NGC_API_KEY and literal $oauthtoken

Artifact download fails

Container lacks NGC_API_KEY, entitlement, DNS/network, or storage

Verify key injection and NGC connectivity; inspect cache capacity/ownership

Cache permission denied

Host mount is not writable by the container

Fix ownership/ACLs and retain a persistent writable /opt/nim/.cache

No compatible profile

Compute capability, requested precision, total or free per-device VRAM, or system memory (container cgroup or host RAM below the profile’s system-memory floor) does not fit the selected model/precision/offload; on integrated GPUs, only 70% of the shared pool counts and offload profiles are not eligible; or the NVML/utility-capability availability probe failed

Run the pre-download profile preflight, free unrelated GPU memory, raise the container memory limit, remove unnecessary pins, choose a smaller model or compatible precision, or use supported hardware; if the probe failed, verify the driver, Container Toolkit, GPU visibility, and utility capability

Preflight passes but cold start fails

Host RAM is too low for the workload, or artifact download/materialization or runtime initialization failed

Preserve the failed container, inspect its logs, and compare host RAM with the support-matrix floors

Conflicting selectors

A selector variable such as NIM_MODEL_VARIANT disagrees with NIM_TAGS_SELECTOR

Set each selector in one place and inspect the full launch environment

Visible GPUs sit idle

Selected profile uses fewer GPUs than Docker exposed

Restrict --gpus or intentionally pin an available layout matching the desired count

Container live but never ready

Cold materialization/build/warmup is still running or failed

Follow logs, cache/NGC/VRAM errors, and extend startup probe budget; do not send inference

Port already allocated

Another container uses the host port

Remove the active example container before reusing the default -p 8000:8000, or choose another host port and update that client’s NIM_URL

Container name already in use

A previous example container still exists

Inspect its logs if startup failed, then remove it with docker rm -f cosmos3-generator or docker rm -f cosmos3-reasoner

Wrong-runtime 404

NIM_URL reaches Generator for a Reasoner request, or Reasoner for /v1/infer

Inspect /v1/metadata, then start the intended runtime or correct the URL

/dev/shm or resource error

Shared memory/ulimits are too small

Apply the documented --shm-size and ulimits

Generator and Media#

For Action and Transfer request failures, refer to Action Common Failures and Transfer Validation and Common Failures.

Symptom

Likely Cause

Action

HTTP 422, missing or invalid model_mode

The request does not identify a valid Generator task

Set one of the documented top-level modes

Selected variant rejects request mode or sampling fields

A specialist received another mode, or a four-step request supplied model-owned controls

Select a compatible NIM_MODEL_VARIANT; omit num_inference_steps, guidance_scale, and flow_shift for four-step variants

HTTP 422, media decode/fetch

Invalid base64/data URL, URL disabled/unreachable, or unsupported media

Prefer a MIME-aware data URL; check the selected image’s codec and format support

HTTP 422, frame or resolution

Request violates T2I/video cadence rules or supplies num_frames for Action

Recompute with the task tables; Action derives frames from its chunk size

Content-policy 422

Text or generated frames triggered guardrails

Rephrase and review content; disable only under approved diagnostic policy

Backend 500/OOM

Profile fit or runtime workload exceeded available memory

Reduce workload/concurrency, choose Nano/offload, or use a larger supported GPU; retain logs

Request/client timeout

Image or video generation exceeded client/backend timeout

Refer to Long-Running Requests; inspect NIM logs and runtime metrics

MP4 does not play

Player lacks VP9-in-MP4 support

Use mpv/ffplay or re-encode to H.264

Reasoner#

Symptom

Likely Cause

Action

Model not found

Client hard-coded the wrong served ID

Discover it through /v1/models

HTTP 400 request error

Sampling, thinking controls, top_logprobs, or extension placement is invalid

Check current ranges, use strict JSON types, and place NIM extensions in extra_body

HTTP 422 media error

Media content/order/count/preprocessing failed

Put media before text, use data URLs, and check operator media limits

Chat Completions route 404

Client reached Generator or the selected image lacks the route

Confirm Reasoner through /v1/metadata and inspect live OpenAPI

Responses route 404

Route disabled, absent, or requested from Generator

Confirm Reasoner metadata, then use Chat Completions and inspect live OpenAPI/operator setting

Host OOM or near-zero MemAvailable on unified memory

The Reasoner memory share is too large for the shared host/device pool and the host workload

Remove any explicit NIM_GPU_MEMORY_UTILIZATION above the 0.70 default, or lower it from host measurements, then restart

Structured output is prose or invalid JSON

The request did not enforce a JSON schema

Send a JSON schema in response_format (Chat Completions) or text.format (Responses). With the catalog, add --guided-output. Refer to Structured Output

KV-cache/context OOM

Context, media tokens, batching, or concurrency is too large

Reduce media FPS and concurrency; the default unchunked multimodal path enforces a 16,384 batched-token minimum (24,300 on Edge), so enable multimodal chunking with NIM_DISABLE_CHUNKED_MM_INPUT=0 only after validation before lowering that budget

For DFlash and checkpoint-source failures, refer to BYOC.

BYOC#

Refer to Bring Your Own Checkpoint Common Failures. A long first start with a new engine or remote checkpoint is expected. Keep a writable persistent cache and wait for readiness.