diff --git a/components/src/dynamo/profiler/profile_sla.py b/components/src/dynamo/profiler/profile_sla.py index 738edf027a38..bc507668d4b4 100644 --- a/components/src/dynamo/profiler/profile_sla.py +++ b/components/src/dynamo/profiler/profile_sla.py @@ -385,6 +385,16 @@ async def run_profile( phase=ops.current_phase, ) if not is_disagg_config: + # TODO: agg + throughput-scaling / agg + mocker has no + # profiling-data fallback today. run_interpolation is + # shaped around prefill + decode picks, so for agg picks + # the NPZ sweep is skipped entirely and no + # planner-profile-data ConfigMap is produced — the + # planner and mocker have nothing to consume on + # aggregated deployments. Extend run_interpolation (and + # the downstream _load_profiling_data / mount logic) to + # handle an agg pick so both paths work for aggregated + # deployments too. logger.info( "Picked config is aggregated (chosen_exp=%r) — " "skipping interpolation (requires disaggregated config).", diff --git a/components/src/dynamo/profiler/utils/dgd_generation.py b/components/src/dynamo/profiler/utils/dgd_generation.py index 304a7667b49e..83e17df14eb7 100644 --- a/components/src/dynamo/profiler/utils/dgd_generation.py +++ b/components/src/dynamo/profiler/utils/dgd_generation.py @@ -70,7 +70,12 @@ def assemble_final_config( 1. **Mocker** — swap the base to the mocker DGD template if enabled. 2. **Planner** — inject the Planner service + planner-config ConfigMap. 3. **Profile data** — attach interpolation-data ConfigMap when mocker - or planner-throughput is enabled. + or planner-throughput is enabled. The ConfigMap is only emitted + when the picked config is disaggregated AND the interpolation NPZ + files were produced on disk; agg picks skip interpolation entirely + (see the gate in ``profile_sla.py``), so no ConfigMap is attached + in that case and the planner / mocker have no profiling-data + fallback for aggregated deployments today. """ if not dgd_config: return dgd_config