Feature Description
Introduce a more explicit resident model policy instead of relying mainly on a single max_loaded_models value.
The policy should support:
- a global limit for all loaded models,
- per-hardware limits for CPU, GPU, and NPU,
- and optionally different handling for utility models such as embedders or rerankers.
Example goals:
- keep 1 primary LLM loaded,
- allow 1 small utility model to stay resident,
- limit NPU residency more strictly than GPU or CPU,
- avoid unnecessary eviction of useful small models.
The eviction logic should also be more policy-aware than plain LRU. It should consider things like:
- hardware type,
- current resource pressure,
- whether the model is active,
- whether the model is a small utility model,
- and estimated reload cost.
In the Web UI, this should be presented as a resident model policy rather than a single ambiguous number. For example:
- Total loaded models
- CPU loaded models
- GPU loaded models
- NPU loaded models
- Keep utility models warm
- Eviction preference
This would make the behavior easier to predict and easier to explain.
Use Case / Motivation
Motivation
The current UX is difficult to understand because a single numeric setting does not reflect the real scheduling problem.
Users usually do not want “N arbitrary loaded models”. They want something more specific, such as:
- one main model,
- plus one small embedder,
- with different limits depending on whether the model is on CPU, GPU, or NPU.
This becomes especially confusing when the configured number is increased above 1, but the actual behavior still depends on backend limits, hardware constraints, or runtime placement decisions.
There is also an important UX problem when multiple models are kept loaded without distinguishing between small and large models:
- keeping multiple small models resident may be fine,
- but keeping multiple large models resident can unexpectedly cause memory pressure,
- which may lead to swapping, severe slowdown, or load/runtime errors.
- In extreme cases, loading multiple large models can lead to OOM conditions and system instability.
From the user perspective this feels inconsistent:
- sometimes increasing the number works,
- sometimes it silently causes eviction,
- sometimes it causes poor performance,
- and sometimes it fails with an error.
A more explicit policy would make the system safer and more predictable:
- small helper models could remain loaded when reasonable,
- large models could be limited more conservatively,
- and hardware-specific constraints could be reflected directly in both logic and UI.
Platform Relevance
All platforms
Additional Context
No response
Feature Description
Introduce a more explicit resident model policy instead of relying mainly on a single
max_loaded_modelsvalue.The policy should support:
Example goals:
The eviction logic should also be more policy-aware than plain LRU. It should consider things like:
In the Web UI, this should be presented as a resident model policy rather than a single ambiguous number. For example:
This would make the behavior easier to predict and easier to explain.
Use Case / Motivation
Motivation
The current UX is difficult to understand because a single numeric setting does not reflect the real scheduling problem.
Users usually do not want “N arbitrary loaded models”. They want something more specific, such as:
This becomes especially confusing when the configured number is increased above
1, but the actual behavior still depends on backend limits, hardware constraints, or runtime placement decisions.There is also an important UX problem when multiple models are kept loaded without distinguishing between small and large models:
From the user perspective this feels inconsistent:
A more explicit policy would make the system safer and more predictable:
Platform Relevance
All platforms
Additional Context
No response