You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Centralize how the dynamo runtime image (dynamo-frontend / vllm-runtime) is referenced across the inference-perf path, closing three related gaps with one refactor:
Single source of truth for the image (repo + tag) — today it's scattered string literals in multiple files.
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.
**Registry parity gap (**inference-perf: route cacheWorkerImage through ResolveImage for registry-override parity #1159): cacheWorkerImage and the DGD worker/frontend images are pinned to nvcr.io and not routed through catalog.ResolveImage, while the AIPerf image is. So AICR_VALIDATOR_IMAGE_REGISTRY redirects AIPerf but not the runtime images — observed repeatedly in testing (validator image came from a mirror/ECR while the dynamo runtime still pulled from nvcr.io).
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
Single source of truth for the dynamo runtime image — repo + tag (e.g. pkg/defaults.DynamoRuntimeImageRepo / DynamoRuntimeImageTag).
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.
Drift guard (make check wired into make lint/qualify) asserting the runtime image tag == dynamo-platform chart defaultVersion in recipes/registry.yaml. Keep TestCacheWorkerImageMatchesTemplate.
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).
cacheWorkerImageand 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.
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:AICR_VALIDATOR_IMAGE_REGISTRYrewrites the AIPerf image but not the dynamo runtime images, so a registry override silently leaves them pointing atnvcr.io. (absorbs inference-perf: route cacheWorkerImage through ResolveImage for registry-override parity #1159*)*dynamo-platformoperator chart version (the0.9.0-vs-1.0.2skew 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
dynamo-platformoperator chart (recipes/registry.yaml, bumped to1.0.2) and the runtime image tags (hardcoded literals, left at0.9.0). Nothing tied them together, so a 1.0.2 operator scheduled 0.9.0 pods carrying a known panic.cacheWorkerImageand the DGD worker/frontend images are pinned tonvcr.ioand not routed throughcatalog.ResolveImage, while the AIPerf image is. SoAICR_VALIDATOR_IMAGE_REGISTRYredirects AIPerf but not the runtime images — observed repeatedly in testing (validator image came from a mirror/ECR while the dynamo runtime still pulled fromnvcr.io).Two surfaces — different mechanisms (important)
The dynamo runtime image is referenced in two places that need different override mechanisms:
cacheWorkerImagevalidators/performance/model_cache.gocatalog.ResolveImage(honors the registry override)dynamo-frontend/vllm-runtimeinvalidators/performance/testdata/inference/dynamo-deployment.yamlResolveImagecan't touch them → need YAML string substitution (like${MODEL}/${GPU_COUNT}) that honorsAICR_VALIDATOR_IMAGE_REGISTRY+ the single tag sourceProposed change
pkg/defaults.DynamoRuntimeImageRepo/DynamoRuntimeImageTag).cacheWorkerImage(viaResolveImage) and substitute it into the DGD template (e.g.${DYNAMO_RUNTIME_IMAGE}/${DYNAMO_RUNTIME_TAG}) honoring the registry override — so oneAICR_VALIDATOR_IMAGE_REGISTRYredirects all images the inference-perf path pulls, matching AIPerf.makecheck wired intomake lint/qualify) asserting the runtime image tag ==dynamo-platformchartdefaultVersioninrecipes/registry.yaml. KeepTestCacheWorkerImageMatchesTemplate.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
cacheWorkerImageand the DGD-template images both honorAICR_VALIDATOR_IMAGE_REGISTRY(a registry override redirects every inference-perf image, not just AIPerf).makecheck fails if the runtime image tag ≠dynamo-platformchart version (drift guard); deliberate mismatch is caught locally.TestCacheWorkerImageMatchesTemplateretained.make qualifygreen.Supersedes: #1159
Related: #1192 (version skew this prevents), #1133 (introduced
cacheWorkerImage)