Migrate to Dynamo Mode#
This guide identifies the configuration and operational changes required to move a standard NIM 2.x vLLM deployment to Dynamo mode in NIM 3.0.0, validate the result, and preserve a rollback path. For end-to-end single-container and Kubernetes procedures, use the corresponding deployment guides.
Note
Dynamo mode is generally available with NIM 3.0.0. Existing 2.x containers remain on their current release line. You cannot enable Dynamo mode in an existing 2.x container.
Plan the Migration#
Before changing a deployment:
Confirm that the model and GPU configuration appear in Support Matrix, and obtain the model-specific recipe from the model’s NGC collection. Use the image and profile pinned by that recipe together; substituting either one independently is not a validated migration. SGLang is not supported by this deployment path.
Choose a topology: a single container or Kubernetes with a
DynamoGraphDeployment. Start with Quickstart for a single-container deployment and Kubernetes Deployment for a cluster deployment.Record the current image, environment, profile, ports, probes, ingress settings, metrics scrape target, and any explicit
TMPDIRvalue.Do not carry a NIM 2.x profile ID into the new deployment. For a split deployment, retain the
NIM_MODEL_PROFILEpinned by the NIM 3.0 recipe on the frontend and every worker. Refer to Model Profiles and Selection.
For complete mode-selector definitions, refer to Environment Variables.
Configuration Changes#
The following table compares standard NIM 2.0 configuration and behavior with Dynamo mode in NIM 3.0.0:
Area |
Standard NIM 2.0 |
Dynamo Mode in NIM 3.0.0 |
|---|---|---|
Process topology |
nginx fronts one vLLM server |
A Dynamo frontend routes requests to one or more Dynamo-wrapped vLLM workers |
Mode selection |
No Dynamo selector |
Set exactly one of |
Backend |
vLLM or SGLang, depending on the image |
vLLM only |
Public HTTP port |
|
|
Worker system port |
Not used for the standard request path |
Configure |
Readiness |
|
Frontend: |
Metrics |
|
|
TLS, CORS, and proxy policy |
Implemented by NIM nginx settings |
nginx is not started; provide and validate these controls at another layer |
OpenAPI |
NIM middleware merges NIM management paths into |
The Dynamo frontend schema does not include that NIM middleware augmentation |
LoRA management |
vLLM load and unload endpoints |
Dynamo worker adapter API; refer to Fine-Tuning with LoRA |
Management Routes#
The Dynamo frontend receives NIM management routes through a frontend route
extension, which the entrypoint enables automatically for the released Dynamo
runtime. Use /v1/health/ready for frontend readiness. After readiness
succeeds, query /v1/models to verify that the expected model registered.
Refer to API Reference for the current route behavior.
Tool Calling and Reasoning Parsers#
Dynamo parser selection is worker-side. Set DYN_TOOL_CALL_PARSER and
DYN_REASONING_PARSER consistently on every worker. Do not reuse the standard
vLLM API-server options --enable-auto-tool-choice, --tool-call-parser,
--tool-parser-plugin, or --chat-template: NIM retains them on the converted
command, but the strict dynamo.vllm worker parser rejects them and startup
fails.
Reasoning-parser options are different: --reasoning-parser and
--reasoning-parser-plugin are engine arguments accepted by dynamo.vllm.
NIM resolves a checkpoint-relative reasoning plugin path before launching the
worker. The current Dynamo path does not accept a custom tool-parser plugin or
worker-side chat template.
The Dynamo frontend does not receive the standard NIM ASGI middleware or its merged OpenAPI document. Validate tool calls and reasoning output end to end through the frontend after migration. For parser configuration, refer to Custom Parsers and Chat Templates.
Temporary and Workspace State#
When TMPDIR is not set explicitly, the entrypoint uses /tmp for Dynamo
roles if the directory is writable. For standard mode, or when /tmp is
read-only, the entrypoint uses a temporary directory on the writable root
filesystem. An explicit TMPDIR setting takes precedence. In split
deployments, ensure that the directory allows execution and is local to each
pod.
Worker replicas use a deterministic workspace identity so that their model-card metadata matches. The frontend creates its own metadata-only workspace. Do not share a manually chosen temporary workspace between unrelated deployments.
Apply the Migration#
Deploy the image pinned by the model-specific NIM 3.0 recipe. Use Quickstart for a container deployment or Kubernetes Deployment for a cluster deployment.
Preserve the required credentials, but use the profile and worker arguments pinned by the NIM 3.0 recipe. In a split deployment, keep the same
NIM_MODEL_PROFILEon the frontend and workers.Configure the role-specific probes documented by the recipe. Frontend readiness uses
/v1/health/readyon the public port. Worker readiness uses/v1/health/readyon the worker system port, which defaults to 9090.Move TLS, CORS, request limits, timeout policy, and forwarded-header policy to an ingress or proxy that fronts the Dynamo frontend.
Scrape frontend metrics at
/v1/metrics. If dashboards or alerts require vLLM metrics, also scrape/metricson every worker system port. Refer to Logging and Observability.Verify the worker log contains
Starting Dynamo worker: python -m dynamo.vllm, wait for the frontend/v1/health/readyendpoint to succeed, and confirm that/v1/modelscontains the expected model.Send representative chat, tool-calling, reasoning, and LoRA requests before directing production traffic to the deployment.
For a single-container Docker command, refer to Quickstart. For multi-pod Kubernetes, refer to Kubernetes Deployment.
Revert to Standard Mode#
Redeploy the saved standard image and configuration with all three
NIM_DYNAMO_* selectors absent. Restore:
Standard health probes and port mappings.
nginx TLS, CORS, proxy, timeout, and header settings.
Backend metrics expectations on
/v1/metrics.The previous model profile and any explicit
TMPDIRvalue.Standard middleware, parser, and LoRA configuration.
Afterward, verify /v1/health/ready, /openapi.json, metrics, and
representative inference requests. Treat this as a configuration reversal;
validate application and external state separately for your deployment.