Skip to content

dynamo: centralize runtime image reference — SSOT + registry-override parity + drift guard #1194

Description

@yuanchen8911

Summary

Centralize how the dynamo runtime image (dynamo-frontend / vllm-runtime) is referenced across the inference-perf path, closing three related gaps with one refactor:

  1. Single source of truth for the image (repo + tag) — today it's scattered string literals in multiple files.
  2. Registry-override parityAICR_VALIDATOR_IMAGE_REGISTRY rewrites the AIPerf image but not the dynamo runtime images, so a registry override silently leaves them pointing at nvcr.io. (absorbs inference-perf: route cacheWorkerImage through ResolveImage for registry-override parity #1159*)*
  3. Drift guard — the runtime image tag must not skew from the dynamo-platform operator chart version (the 0.9.0-vs-1.0.2 skew that caused inference-perf: validator times out on healthy cluster when dynamo frontend discovery bootstrap races (false negative) #1192).

This issue supersedes #1159 — the natural fix is a single refactor of how the image is referenced, so doing them separately would mean two PRs fighting over the same code.

Background

Two surfaces — different mechanisms (important)

The dynamo runtime image is referenced in two places that need different override mechanisms:

Surface Where Mechanism
cacheWorkerImage Go literal in validators/performance/model_cache.go route through catalog.ResolveImage (honors the registry override)
DGD template images dynamo-frontend / vllm-runtime in validators/performance/testdata/inference/dynamo-deployment.yaml deployed by the operator, not pulled by the validator binary → ResolveImage can't touch them → need YAML string substitution (like ${MODEL}/${GPU_COUNT}) that honors AICR_VALIDATOR_IMAGE_REGISTRY + the single tag source

Proposed change

  1. Single source of truth for the dynamo runtime image — repo + tag (e.g. pkg/defaults.DynamoRuntimeImageRepo / DynamoRuntimeImageTag).
  2. Use it for cacheWorkerImage (via ResolveImage) and substitute it into the DGD template (e.g. ${DYNAMO_RUNTIME_IMAGE} / ${DYNAMO_RUNTIME_TAG}) honoring the registry override — so one AICR_VALIDATOR_IMAGE_REGISTRY redirects all images the inference-perf path pulls, matching AIPerf.
  3. Drift guard (make check wired into make lint/qualify) asserting the runtime image tag == dynamo-platform chart defaultVersion in recipes/registry.yaml. Keep TestCacheWorkerImageMatchesTemplate.

Scope note (from #1159) — not air-gap enablement

Registry-override parity is necessary but not sufficient for air-gap: the populate Job still huggingface_hub.snapshot_download()s weights from huggingface.co. Offline weights (pre-staged / internal registry / Dynamo ModelExpress) are out of scope here.

Acceptance criteria

  • Single source of truth for the dynamo runtime image repo+tag (no scattered literals).
  • cacheWorkerImage and the DGD-template images both honor AICR_VALIDATOR_IMAGE_REGISTRY (a registry override redirects every inference-perf image, not just AIPerf).
  • make check fails if the runtime image tag ≠ dynamo-platform chart version (drift guard); deliberate mismatch is caught locally.
  • Existing TestCacheWorkerImageMatchesTemplate retained.
  • Existing dynamo behavior unchanged; make qualify green.

Supersedes: #1159
Related: #1192 (version skew this prevents), #1133 (introduced cacheWorkerImage)

Metadata

Metadata

Assignees

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions