ExplainerKubernetes platforms

MIG, MPS or time-slicing: sharing GPUs on Kubernetes

MIG vs time-slicing vs MPS on Kubernetes: what each GPU sharing method isolates, what measurements show, how the device plugin exposes it and how to size a slice.

Cover of the full report: MIG, MPS or time-slicing: sharing GPUs on Kubernetes
The research behind this article, with every source listed. 20 pages.

Key points

From the Summary of the full report

  1. By default a Kubernetes device plugin hands out whole devices, which cannot be shared between containers [1]. In a 2020 trace of one production cluster with over 6,000 GPUs, the median instance used 0.042 GPUs' worth of streaming multiprocessors [3].
  2. Time-slicing advertises each GPU as several replicas that take turns on it. NVIDIA's GPU Operator documentation says there is no memory or fault isolation between replicas, and that a request for more than one replica does not guarantee a proportional share of compute [5].
  3. MPS, NVIDIA's Multi-Process Service, runs kernels from several processes on one GPU at the same time, and each client process has its own GPU address space. NVIDIA calls its error containment limited: a fatal fault is reported to every client on the GPUs where the fault is contained [13].

Kubernetes gives a container whole GPUs, even when its work needs a fraction of one [1, 2]. Three NVIDIA methods let several workloads share a GPU: time-slicing, the Multi-Process Service (MPS) and Multi-Instance GPU (MIG) [2]. MIG vs time-slicing is a choice between hardware partitions, each with its own memory, and replicas that take turns on one GPU with no memory or fault isolation between them [5, 17]. MPS sits apart from both: it runs kernels from several processes at the same time, with limits set in software [2, 8].

In a two-month trace from 2020 of one production cluster with over 6,000 GPUs, the median instance used 0.042 GPUs' worth of streaming multiprocessors (SMs), the GPU's compute units [3]. Against a simulated replay of the same trace without sharing, the cluster with sharing needed only half the GPUs on average [3].

Why Kubernetes does not share GPUs by default

Kubernetes offers GPUs to Pods through device plugins. Its documentation says extended resources are only supported as integers and cannot be overcommitted, and that devices cannot be shared between containers [1]. A Pod can ask for a fraction of a CPU and not of a GPU, so an entire physical GPU goes to one container even when it needs only a fraction [2].

Method How it shares a GPU Memory and faults Main limit
Time-slicing Replicas take turns on the whole GPU No memory or fault isolation between replicas [5] No proportional compute per replica [5]
MPS Kernels from several processes run at once Own address space per client, limited error containment [13] One user per server by default [13]
MIG Hardware instances with their own memory paths Memory and fault isolation per instance [5, 17] Fixed profiles per GPU model, a GPU reset to turn on [20, 21]

Time-slicing: replicas that take turns

The NVIDIA device plugin, set up through NVIDIA's GPU Operator, can advertise each GPU as several replicas [5]. With four replicas, a node with two GPUs advertises eight [5]. The GPU gives an equal share of time to all GPU processes, and a Pod that asks for two replicas is not promised twice the compute [5]. The failRequestsGreaterThanOne setting rejects such requests [5]. The device plugin's README recommends turning it on, and it is off by default [6].

What time-slicing gives up is isolation. NVIDIA's documentation says there is no memory or fault isolation between replicas [5], and the README adds that if one workload crashes, they all do [6]. NVIDIA lists the tradeoffs as increased latency, jitter and potential out-of-memory conditions [8]. Amazon's EKS documentation warns that one Pod can exhaust the memory other Pods rely on [9]. Per-container GPU metrics go too: NVIDIA's DCGM-Exporter cannot associate metrics with containers when time-slicing is on [5]. Time-slicing also works on older GPUs that do not support MIG [5].

MPS: kernels from several processes at once

MPS lets kernels from different processes run in parallel on one GPU [8]. Each client has its own GPU address space [13], and NVIDIA describes MPS as useful when a single process does not generate enough work to saturate the GPU [13]. Clients can be held to a device memory limit and an active thread percentage [8, 13]. The thread limit reserves nothing. It only caps what a client can use, and kernels from different clients may run on the same SM [13].

Its isolation is partial. NVIDIA calls MPS error containment limited: a fatal fault is reported to every client on the GPUs where it is contained, without saying which client caused it [13]. Only one user may have an active MPS server on a system, and a multiuser mode drops isolation between users [13]. On GKE, memory bandwidth, encoders and decoders fall outside MPS limits, and Pods need hostIPC: true, which GKE's documentation says introduces security risks [14].

NVIDIA's documentation also covers MPS v3, with named servers and namespaces, while legacy v2 remains the default [12, 15]. Its memory partitioning divides device memory across cgroups and containers and does not work on MIG devices [16]. In the device plugin, MPS splits full GPUs into equal fractions of memory and compute [6].

MIG: hardware partitions from a fixed menu

MIG splits GPUs of the Ampere generation and later into up to seven GPU instances [17, 19]. Each instance has its own paths through the memory system, from crossbar ports and L2 cache banks to memory controllers [17]. NVIDIA says this gives predictable throughput and latency even when other tasks thrash their own caches or saturate their DRAM interfaces [17].

The sizes come from a fixed menu for each GPU model. On an H100 80GB, the profiles run from seven 1g.10gb instances through 2g.20gb and 3g.40gb to one 7g.80gb [20]. Changing MIG mode requires a GPU reset [21, 24], and NVIDIA's MIG Manager terminates the GPU Pods on a node before it enables MIG mode [22]. In Kubernetes, the single strategy shows every MIG device as nvidia.com/gpu, with one profile across the node, and the mixed strategy names each profile as its own resource, such as nvidia.com/mig-1g.10gb [22].

MIG vs time-slicing vs MPS in measurements

A 2026 study on an A30 found that MPS improved performance by up to 30% in favorable pairings and worsened it by around 30% under memory contention [25]. MIG gave more consistent gains at a higher overhead, and memory-intensive pairs finished almost twice as fast under MIG as under MPS [25]. In the memory-intensive pairs with the worst slowdowns, those with the Sort test, average memory utilization reached roughly 60% under MPS, against barely over 20% under time-slicing [25].

A second 2026 study, on an A100 and an edge GPU with image classification models, found that MIG gave more robust temporal isolation than MPS and Green Contexts, though timeouts still appeared under MIG with two processes [26]. A study of model training on an A100 found that collocating jobs could give up to four times the throughput, and its authors recommend MPS for one user's training jobs [27].

MIG's isolation has edges. Contention persists through shared components such as PCIe bandwidth, and MIG's few valid configurations and rigid placement fragment a GPU as jobs arrive and finish [28]. Amazon notes that compute is not strictly proportional to instance size [24]. An October 2026 preprint reported covert channels across MIG instances on one platform, the Grace Hopper GH200, at roughly 8,500 bits per second [29].

Setting it up on Kubernetes

The device plugin applies time-slicing or MPS to every GPU on a node, never to one GPU alone, and the two are mutually exclusive [6]. Shared GPUs carry a product label ending in -SHARED, so a node selector can ask for shared or exclusive GPUs [5]. Installing the operator, drivers and node labels belongs to the wider subject of GPU scheduling on Kubernetes. Batch training on GPU clusters, and how one cluster runs both schedulers, is covered in Slurm or Kubernetes for GPU clusters: how to choose.

Dynamic Resource Allocation (DRA), which the Kubernetes documentation lists as stable since v1.35, lets Pods share a device by referencing the same resource claim [30]. The CNCF's conformance checklist for Kubernetes v1.37 lists GPU sharing at level SHOULD: for accelerators that support static sharing, at least one sharing strategy, hardware partitions exposed as schedulable resources where the accelerator supports partitioning, and oversubscription where it supports software sharing such as time-slicing [31]. Inference services on shared GPUs still need the routing, scaling and rollbacks set out in Deploying LLMs on Kubernetes: serving, scaling and rollbacks.

Across tenants: trust decides the method

GKE's documentation says only workloads in the same trust boundary should use time-sharing, GKE's name for time-slicing [10]. MPS serves one user per server, and its multiuser mode drops isolation between users [13]. NVIDIA presents MIG for cloud providers with several tenants, saying one client cannot affect the work or scheduling of others [17]. The authors of the 2026 preprint write that their results call MIG's isolation guarantees into question [29]. With the NVIDIA DRA driver, sharing cannot cross namespaces, because the claims are namespace-scoped [9].

Read together, these sources fit time-slicing and MPS to workloads that trust each other, and MIG to tenants who must stay apart [10, 13, 17].

Sizing a slice from memory first

Memory is the first number to check. A MIG profile fixes the memory of each instance [20]. Time-slicing enforces no memory limit, and GKE advises setting GPU memory limits in the workloads themselves [10]. For a hypothetical workload that needs 15 GB, a 1g.10gb instance on an H100 80GB is too small, and a 1g.20gb or 2g.20gb fits, up to four or three per GPU (computed here from [20]). The weights, key-value cache and engine reserve that set that memory figure for an LLM are worked out in How much GPU memory LLM inference needs. Whether a shared GPU pays for itself then turns on how busy it stays, the subject of Self-hosted LLM vs API cost: a break-even method.

Rillor designs and builds Kubernetes platforms for superintelligence (SI) work on GPUs, on servers the client controls, where GPUs are offered to the scheduler through the device plugin and a workload gets only the GPUs it requests.

Read the full report

The full report adds the MIG profile menus of five GPU models, MPS v3, the three studies in detail, sharing through resource claims, and all 31 sources.

The full report

MIG, MPS or time-slicing: sharing GPUs on Kubernetes

The research behind this article, with every source listed. 20 pages.

  1. Summary
  2. Background
  3. Method
  4. Findings
  5. Implications
  6. Limits of this analysis
  7. Sources

Sources

  1. Device Plugins. Kubernetes documentation, last modified 27 July 2026, viewed 8 November 2026. https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/
  2. About GPU sharing strategies in GKE. Google Cloud documentation, last updated 7 November 2026, viewed 8 November 2026. https://docs.cloud.google.com/kubernetes-engine/docs/concepts/timesharing-gpus
  3. MLaaS in the Wild: Workload Analysis and Scheduling in Large-Scale Heterogeneous GPU Clusters. Qizhen Weng, Wencong Xiao, Yinghao Yu, Wei Wang and others, 19th USENIX Symposium on Networked Systems Design and Implementation (NSDI 22), USENIX Association, April 2022, pp. 945-960, viewed 8 November 2026. https://www.usenix.org/conference/nsdi22/presentation/weng
  4. Time-Slicing GPUs in Kubernetes. NVIDIA GPU Operator documentation, version 26.7, last updated 3 November 2026, viewed 8 November 2026. https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/gpu-sharing.html
  5. NVIDIA device plugin for Kubernetes (README). NVIDIA, GitHub repository NVIDIA/k8s-device-plugin, main branch at release v0.20.1 of 22 September 2026, viewed 8 November 2026. https://github.com/NVIDIA/k8s-device-plugin
  6. Improving GPU Utilization in Kubernetes. Kevin Klues, Kyrylo Perelygin and Pramod Ramarao, NVIDIA Technical Blog, 16 June 2022, viewed 8 November 2026. https://developer.nvidia.com/blog/improving-gpu-utilization-in-kubernetes/
  7. Use time-slicing with NVIDIA GPUs on Amazon EKS. Amazon Web Services, Amazon EKS User Guide, undated, viewed 8 November 2026. https://docs.aws.amazon.com/eks/latest/userguide/device-management-nvidia-time-slicing.html
  8. Share GPUs across workloads with GPU time-sharing. Google Cloud documentation, last updated 7 November 2026, viewed 8 November 2026. https://docs.cloud.google.com/kubernetes-engine/docs/how-to/timesharing-gpus
  9. Multi-Process Service. NVIDIA documentation, last updated 4 November 2026, viewed 8 November 2026. https://docs.nvidia.com/deploy/mps/latest/index.html
  10. When to Use MPS. NVIDIA documentation, last updated 4 November 2026, viewed 8 November 2026. https://docs.nvidia.com/deploy/mps/latest/when-to-use-mps.html
  11. Share GPUs with multiple workloads using NVIDIA MPS. Google Cloud documentation, last updated 7 November 2026, viewed 8 November 2026. https://docs.cloud.google.com/kubernetes-engine/docs/how-to/nvidia-mps-gpus
  12. MPS v3 Interface. NVIDIA documentation, last updated 4 November 2026, viewed 8 November 2026. https://docs.nvidia.com/deploy/mps/latest/mpsv3-interface.html
  13. MPS v3 Memory Partitioning. NVIDIA documentation, last updated 4 November 2026, viewed 8 November 2026. https://docs.nvidia.com/deploy/mps/latest/mpsv3-memory-partitioning.html
  14. MIG User Guide: Introduction. NVIDIA documentation, last updated 4 November 2026, viewed 8 November 2026. https://docs.nvidia.com/datacenter/tesla/mig-user-guide/latest/introduction.html
  15. MIG User Guide: Supported GPUs. NVIDIA documentation, last updated 4 November 2026, viewed 8 November 2026. https://docs.nvidia.com/datacenter/tesla/mig-user-guide/latest/supported-gpus.html
  16. MIG User Guide: Supported MIG Profiles. NVIDIA documentation, last updated 4 November 2026, viewed 8 November 2026. https://docs.nvidia.com/datacenter/tesla/mig-user-guide/latest/supported-mig-profiles.html
  17. MIG User Guide: Deployment Considerations. NVIDIA documentation, last updated 4 November 2026, viewed 8 November 2026. https://docs.nvidia.com/datacenter/tesla/mig-user-guide/latest/deployment-considerations.html
  18. GPU Operator with MIG. NVIDIA GPU Operator documentation, version 26.7, last updated 3 November 2026, viewed 8 November 2026. https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/gpu-operator-mig.html
  19. Use multi-instance GPUs (MIG) with NVIDIA GPUs on Amazon EKS. Amazon Web Services, Amazon EKS User Guide, undated, viewed 8 November 2026. https://docs.aws.amazon.com/eks/latest/userguide/device-management-nvidia-mig.html
  20. A comprehensive evaluation of spatial co-execution on GPUs using MPS and MIG technologies. Jorge Villarrubia, Luis Costero, Francisco D. Igual and Katzalin Olcoz, arXiv:2604.22430, version 2, 29 April 2026 (first version 24 April 2026), viewed 8 November 2026. https://arxiv.org/abs/2604.22430
  21. Performance Isolation for Inference Processes in Edge GPU Systems. Juan José Martín, José Flich and Carles Hernández, arXiv:2601.07600, version 3, 13 July 2026 (first version 12 January 2026), viewed 8 November 2026. https://arxiv.org/abs/2601.07600
  22. An Analysis of Collocation on GPUs for Deep Learning Training. Ties Robroek, Ehsan Yousefzadeh-Asl-Miandoab and Pınar Tözün, arXiv:2209.06018, version 3, 24 April 2023 (first version 13 September 2022), viewed 8 November 2026. https://arxiv.org/abs/2209.06018
  23. An Online Fragmentation-Aware Scheduler for Managing GPU-Sharing Workloads on Multi-Instance GPUs. Hsu-Tzu Ting, Jerry Chou, Ming-Hung Chen and I-Hsin Chung, arXiv:2512.16099, 18 December 2025, viewed 8 November 2026. https://arxiv.org/abs/2512.16099
  24. PAGE404: Breaking GPU Isolation Through Hardware-assisted Page Migration. Ravan Nazaraliyev, Yicheng Zhang and Nael Abu-Ghazaleh, arXiv:2610.20962, version 3, 21 October 2026 (first version 14 October 2026), viewed 8 November 2026. https://arxiv.org/abs/2610.20962
  25. Dynamic Resource Allocation. Kubernetes documentation, last modified 27 July 2026, viewed 8 November 2026. https://kubernetes.io/docs/concepts/resource-management/dynamic-resource-allocation/
  26. AIConformance-1.37.yaml, requirement gpu_sharing. CNCF, GitHub repository cncf/k8s-ai-conformance, added 26 August 2026 (commit 287b44f0), viewed 8 November 2026. https://github.com/cncf/k8s-ai-conformance/blob/main/docs/AIConformance-1.37.yaml

Notices

Rillor is not a registered investment adviser or commodity trading advisor and does not provide investment or trading advice. Research, forecasts, data and software described on this site are for research and engineering use. Nothing here is an offer or recommendation to buy or sell any security, commodity interest or digital asset. Past or simulated results do not indicate future results.

NVIDIA, AMD, Ceph, Kubernetes and related product names are trademarks of their owners and are used only to identify products. No affiliation or endorsement is implied.

Tell us what your cluster must run.

Send the workloads, the GPUs and servers they run on, the teams that deploy to the cluster and who runs it afterward.

Scope a Kubernetes platform