AI Infrastructure
Why Enterprise GPU Capacity Goes Unused—and What to Fix First
Before buying more GPUs, separate allocation from productive work. A practical assessment of memory, inference behavior, scheduling and governance can reveal what to reclaim—and what capacity to protect.
Key takeaways
- Measure allocation, device activity and successful application work separately; none is a substitute for the others.
- Size inference for model weights, runtime overhead and KV-cache demand at realistic concurrency and context lengths.
- Evaluate prefill and decode separately, using time to first token and inter-token latency alongside throughput.
- Verify the isolation behind fractional GPU claims; basic time-slicing does not guarantee memory isolation or proportional compute.
- Reclaim confirmed waste first, protect explicit resilience requirements, and expand only against a measured service need.
1. Start with the service, not the utilization target
Consider an enterprise cluster where every GPU is assigned, new workloads are waiting, and application owners still report slow responses. That combination does not establish a hardware shortage. Allocation records tell you who holds resources; device telemetry describes activity; application measurements show whether useful work finishes on time. These are different views of capacity, and treating them as interchangeable leads to the wrong remedy. Kubernetes scheduling documentation and NVIDIA monitoring definitions make that distinction important.
The first management question should therefore be: which service cannot meet which requirement? An interactive assistant needs acceptable response latency. A nightly processing job needs completion before its deadline. A development notebook needs convenient access, but not necessarily permanent ownership of a device. Establish these requirements before discussing a fleet-wide utilization target.
Use successful work delivered within agreed service objectives as the organizing measure. Keep device activity, allocated capacity, queue time and memory pressure as diagnostic evidence underneath it. Inference benchmarking guidance distinguishes throughput from time to first token, inter-token latency and total request latency; improving one does not automatically improve the others. A busier GPU is not, by itself, evidence of a better service.
2. Separate allocation, activity and productive output
Allocation means a scheduler has assigned a resource to a workload. In the standard Kubernetes device-plugin model, GPU requests and limits must match when both are specified. This is not the same as CPU-style elastic sharing, nor does the assignment prove the application continuously uses the device. Review allocations alongside workload ownership, lifecycle and scheduling events rather than interpreting a fully allocated cluster as fully productive.
GPU utilization also requires careful reading. NVIDIA defines its basic GPU utilization measure as the proportion of a sampling period during which at least one kernel executes. It is not a percentage of theoretical computational throughput. Likewise, memory activity and occupied memory are different measurements. A high activity reading cannot establish that all execution resources are efficiently used, and occupied memory does not establish active demand.
Build three connected views: resource assignment by project, device behavior over time, and completed application work. Preserve workload identifiers across them. Examine busy periods and quiet periods separately, and distinguish a running process from a useful service. The serving engine’s metrics should help explain application latency, not replace it; vLLM explicitly separates server-level state from request-level measurements for this purpose.
3. Budget memory for requests, not just model weights
A model fitting in memory is only the starting point for inference sizing. Model weights consume space, but attention-based generation also retains keys and values from processed tokens in a KV cache. Cache demand depends on model architecture, cache precision, sequence lengths and concurrent requests. Consequently, a deployment that loads successfully may still have insufficient memory for the traffic pattern it must serve. NVIDIA’s inference guidance identifies weights and KV cache as major memory requirements.
Treat the memory budget as weights, runtime overhead, working space and request state, with operating headroom. Ask how much context applications actually submit, how long outputs become, and how many requests overlap. Do not accept the model’s advertised maximum context as a default capacity requirement for every endpoint. Size distinct service classes when occasional long-document requests differ materially from ordinary conversations.
Inspect cache pressure and request preemption alongside latency. vLLM documents that insufficient KV-cache space can trigger preemption and recomputation, adding work and delaying completion. Possible responses include lowering concurrency or increasing available cache memory. Raising a memory-allocation setting is not a substitute for checking what other processes need. The objective is sustainable concurrency, not merely a successful startup or an impressive memory-occupancy percentage.
4. Diagnose prefill and decode separately
Inference combines phases with different resource behavior. Prefill processes the input prompt and builds the state needed for generation. Decode then produces output incrementally. Prefill commonly benefits from substantial parallel computation, while decode often faces memory-bandwidth constraints, particularly at smaller batch sizes. These are tendencies rather than universal rules: model architecture, batching and workload shape influence the actual bottleneck.
Measure time to first token separately from inter-token latency. The former includes more than GPU prompt processing: queuing and network delays can contribute. The latter reveals whether an answer arrives smoothly after generation starts. A service can begin answering promptly but generate slowly, or make users wait initially and then stream quickly. An aggregate tokens-per-second figure cannot distinguish these experiences.
Ask application owners to classify traffic by input length, expected output length and arrival pattern. Long-document analysis, short conversational turns and bulk generation should not be represented by one convenient test prompt. Compare their latency distributions under realistic overlap. NVIDIA’s benchmarking guidance emphasizes that concurrent arrivals and varied request lengths expose behavior hidden by a single-user baseline. That evidence should precede decisions about adding replicas or changing the serving architecture.
5. Tune the serving engine before expanding the fleet
Batching changes the relationship between throughput and responsiveness. Continuous batching admits and retires requests as generation progresses rather than waiting for an entire static batch to finish. It can improve resource use, but the useful configuration depends on request lengths and latency requirements. More simultaneous work should be accepted only when the resulting service behavior remains acceptable.
Chunked prefill is another control worth examining. It divides large prompt-processing operations into smaller pieces that can be scheduled alongside decoding. vLLM documents a tradeoff in its token budget: smaller budgets can favor inter-token latency, while larger budgets can favor time to first token. Change one setting at a time and compare both measurements, alongside throughput and preemption, rather than copying a configuration from unrelated hardware.
Prefix caching can avoid repeated computation when requests share an identical initial token sequence. It is relevant to repeated document prefixes or shared instructions, but it does not eliminate the work of generating new output. Its value depends on actual prefix reuse. Measure that reuse before attributing projected savings to caching, and distinguish a cache-enabled test from a cold run. These are different operating conditions, not interchangeable results.
6. Choose sharing according to the required isolation
A fractional GPU label does not explain the isolation mechanism. Basic time-slicing lets workloads take turns on a device, but NVIDIA’s documentation states that its time-sliced replicas do not provide the memory or fault isolation of hardware partitioning. Requesting additional replicas also does not guarantee a proportional compute entitlement. A scheduling fraction should therefore never be presented as a guaranteed performance fraction without further evidence.
Hardware partitioning offers stronger resource boundaries on supported devices, but predefined partition sizes constrain placement. Newer software mechanisms can enforce memory boundaries as well; their guarantees depend on the exact implementation and supported stack. Neither the word “shared” nor the word “isolated” is sufficiently precise for an architecture decision. Ask separately about memory enforcement, compute contention, fault propagation and administrative access.
Adopt a workload-specific policy. Consider compatible development and batch workloads for shared pools; evaluate stricter boundaries for latency-sensitive or differently trusted workloads. Require evidence about behavior under contention, including memory exhaustion and workload termination. Also define who investigates cross-workload incidents. Consolidation should be approved against an explicit risk and service envelope, not justified solely by the possibility of fitting more processes on a card.
7. Make governance release capacity instead of freezing it
Quotas answer who may consume resources, but quota enforcement alone is not a fair-sharing system. Kubernetes supports quotas for extended resources, while queue-management mechanisms can add nominal entitlements, borrowing limits and preemption policies. These are separate controls. If the organization wants teams to borrow idle capacity, that behavior must be designed and configured rather than assumed from the presence of project quotas.
Define a baseline entitlement, a borrowing ceiling and a reclaim policy for each workload class. Specify which jobs may be interrupted, what notice they receive, and whether they must checkpoint. Queue documentation shows that reclaiming capacity can involve preemption; it is not necessarily an instantaneous, disruption-free transfer. Production availability and experimental throughput should not compete under an undocumented priority rule.
Make ownership mandatory. Require a named service owner, purpose, expiry or review date, and a decision about idle shutdown. Introduce showback before punitive chargeback: report reserved capacity, active use and delivered work separately so teams can challenge misleading attribution. For shared devices, avoid pretending that device-wide activity precisely describes each tenant. NVIDIA documents limitations in per-container metric attribution with its time-slicing configuration.
Finally, make exceptions visible. Protect necessary resilience reserves explicitly, and give temporary reservations an expiry. The goal is accountable access, not maximum reclamation regardless of business consequences.
8. Right-size the complete deployment
Right-sizing starts with the workload and its accepted quality level, not the largest model the infrastructure can load. Evaluate a smaller model or lower precision only against representative task-quality checks. NVIDIA’s optimization guidance discusses quantization as a way to reduce resource requirements, but lower precision is a technical choice requiring validation, not a free efficiency multiplier. Keep the model version, precision and evaluation criteria attached to every capacity result.
Then choose the deployment layout. vLLM recommends starting with a single GPU when the model fits and considering distributed inference when necessary. Multiple devices can provide additional memory, but communication topology matters. Compare replication against model sharding for the actual service requirement; do not assume that spreading a model across more devices always creates the best capacity outcome.
Include the host and platform in the assessment. Record CPU and host-memory requests, storage readiness, device compatibility and placement constraints. Kubernetes uses resource declarations and node-selection rules to determine placement; a pending workload needs investigation of those constraints, not merely a count of apparently free cards. Require the assessment to explain why each waiting workload cannot run.
Keep a separate resilience allowance. Ask whether the proposed footprint remains acceptable during maintenance, a failed node or a demand surge. Treat this as a service-design decision rather than allowing an optimization exercise to remove it silently.
9. Run a practical assessment in a deliberate order
Begin with an inventory, not a tuning session. Record each deployment’s owner, model, engine version, precision, GPU assignment, memory settings, concurrency limits, context limit and service objective. Identify duplicates, abandoned experiments and reservations without a current justification. Mark protected production capacity before proposing any reclamation.
Next, collect a representative demand window that includes normal activity and known peaks. Align allocation history with request arrivals, running and waiting requests, cache occupancy, preemption, errors and latency percentiles. Serving-engine metrics provide the connection between internal pressure and user-visible outcomes; device telemetry supplies a different, complementary view. Preserve both rather than collapsing them into a single efficiency score.
Classify each constraint as demand, placement, memory, execution, dependency or policy. Then choose the smallest reversible intervention. Reclaim a confirmed orphan before changing a production scheduler. Adjust one endpoint’s concurrency before changing fleet-wide defaults. Evaluate sharing with compatible workloads before opening a common pool to every team.
For each change, document the expected result, acceptance criteria, rollback trigger and accountable owner. Ask the operating team to compare before-and-after behavior under comparable conditions. Finish with three explicit decisions: what capacity can be reclaimed, what must remain protected, and what additional capacity is justified by a measured requirement. This produces an actionable operating plan rather than another dashboard.
10. A qualified Tiada Solutions perspective
Tiada Solutions’ perspective is to diagnose the constraint before selecting the platform. Better orchestration is relevant when ownership, placement and access policies are the problem. It cannot be assumed to solve an unsuitable model, insufficient memory or an unrealistic response-time requirement. Vendor comparison pages can help frame procurement questions, but should be treated as vendor-authored context rather than independent performance evidence.
For organizations considering a consolidated platform, Tiada Solutions’ available offering includes Clastiq Orchestrator. The supplied solution scope combines Kubernetes, storage, virtual machines, fractional GPU sharing and an OpenAI-compatible inference gateway. Its relevance should be assessed against the organization’s workload mix, operational responsibilities and required isolation—not inferred from the wider product portfolios mentioned on reference websites.
A consultation should establish the current estate, service objectives, tenancy boundaries, support expectations and evidence gaps. It should also clarify the sharing mechanism and enforcement guarantees for the proposed configuration, and distinguish confirmed scope from optional or future capabilities. Tiada Solutions can help structure that consultation and the resulting decision criteria. The intended outcome is a defensible next step—configuration changes, governance improvements, consolidation or expansion—not a promised utilization percentage or performance gain.
Sources & further reading
- kubernetes.io · scheduling gpus
- docs.nvidia.com · gpu sharing.html
- https://developer.nvidia.com/blog/co-designing-ai-model-attention-for-fast-interactive-long-context-inference
- https://developer.nvidia.com/blog/memory-enforced-gpu-sharing-in-kubernetes-with-nvidia-cuda-13-4
- developer.nvidia.com · ?p=83013
- developer.nvidia.com · ?p=98215
- developer.nvidia.com · mastering llm techniques inference optimization
- developer.nvidia.com · benchmarking llm inference at scale with aiperf
- https://developer.nvidia.com/blog/maximize-ai-infrastructure-throughput-by-consolidating-underutilized-gpu-workloads/
- https://developer.nvidia.com/blog/when-to-use-encode-prefill-decode-disaggregation-to-accelerate-multimodal-model-serving/
- docs.nvidia.com · index.html
- docs.vllm.ai · metrics
- docs.vllm.ai · optimization
- docs.vllm.ai · automatic_prefix_caching
- kubernetes.io · resource quotas
- kueue.sigs.k8s.io · cluster_queue
- docs.vllm.ai · parallelism_scaling
- clastiq.ai · compare
Vendor material is cited as product context, not independent proof of performance. Outcomes depend on workload, configuration and deployment.
Build around your enterprise needs.
Discuss the right NVIDIA infrastructure and enterprise solution for your team.
Book a consultation