How can multiple workloads share one GPU: MIG, time slicing or MPS?

NVIDIA GPUs can be shared between Kubernetes workloads in three ways. Multi-Instance GPU (MIG) splits a supported GPU in hardware into up to seven instances, each with its own memory and compute. Time slicing lets several Pods take turns on the whole GPU, with no memory or fault isolation between them. Multi-Process Service (MPS) runs work from several processes on the GPU at the same time and can cap each one’s memory and compute.

Why share a GPU

Kubernetes allocates GPUs as whole units: a Pod that requests nvidia.com/gpu: 1 holds the entire card, as explained in how GPUs work in Kubernetes. An embedding model, a small LLM or a notebook rarely needs a full H100. Sharing lets several such workloads use one physical GPU, which raises utilization and cuts the number of GPUs you pay for.

The three methods compared

MIGTime slicingMPS
How it sharesPartitions the GPU in hardwareWorkloads take turns on the whole GPUWork from several processes runs concurrently
Memory isolationDedicated memory per instanceNone, any Pod can use all memoryIsolated address spaces; per-client memory limit
Fault isolationYes, between instancesNone, one fault domainA fatal fault affects the other clients on that GPU
Performance isolationDedicated SMs, L2 cache and memory bandwidthNoneCompute limit per client
Kubernetes resourcenvidia.com/mig-1g.10gb and similar, or nvidia.com/gpunvidia.com/gpunvidia.com/gpu
Supported GPUsA100, A30, H100, H200, B200, B300 and RTX PRO 6000 Blackwell, among othersMost NVIDIA data center GPUsVolta generation and newer
Typical useMulti-tenant serving, predictable latencyDevelopment, notebooks, bursty servicesMany small inference processes

MIG partitions the GPU in hardware

MIG divides a GPU into instances that each get their own streaming multiprocessors (SMs), L2 cache banks, memory controllers and DRAM. NVIDIA’s MIG user guide describes each instance as having separate and isolated paths through the memory system, with fault isolation between clients. A workload in one instance cannot read another instance’s memory or slow it down by thrashing the cache.

Partitions come in fixed profiles. On an 80 GB H100, 1g.10gb is one-seventh of the compute with 10 GB of memory, and 3g.40gb is three-sevenths with 40 GB. The supported GPUs list allows up to seven instances on A100, H100, H200, B200 and B300, and up to four on the A30 and RTX PRO 6000 Blackwell. The L4, L40S and T4 do not support MIG.

In Kubernetes, the NVIDIA device plugin exposes MIG instances in one of two ways. With the single strategy, every GPU on a node uses the same profile and Pods keep requesting nvidia.com/gpu. With the mixed strategy, each profile becomes its own resource, such as nvidia.com/mig-1g.10gb, and Pods request it by name. Changing the profile layout requires stopping the workloads on that GPU. The GPU Operator’s MIG Manager applies a layout chosen through a node label.

Time slicing takes turns

Time slicing makes the device plugin advertise each physical GPU as several replicas. Pods request nvidia.com/gpu: 1, get a replica, and the GPU switches between their processes. The GPU Operator documentation is direct about the limits: unlike MIG, there is no memory or fault isolation between replicas. One Pod can allocate all GPU memory and cause the others to fail, and a request for two replicas does not guarantee twice the compute.

Time slicing needs no application changes and works on GPUs without MIG, such as the L4 and L40S. It fits notebooks, test environments and services that are idle most of the time.

MPS runs processes concurrently

MPS runs CUDA work from several processes on the GPU at once through a control daemon, instead of switching between them. That removes the context-switching overhead of time slicing and lowers latency for small inference batches. According to NVIDIA’s MPS documentation, clients on Volta and newer GPUs have fully isolated GPU address spaces, and each MPS server supports up to 60 client CUDA contexts per device by default. A fatal fault in one client still affects the other clients on the same GPU.

In the NVIDIA device plugin, MPS shares full GPUs only. Each client gets an equal fraction of device memory, and the daemon limits the compute each one can use. The plugin’s README still labels MPS support experimental.

Can you combine them?

Partly. The GPU Operator documentation states that you can combine MIG and time slicing to share access to MIG instances, so several Pods can take turns on one 1g.10gb slice. MPS cannot be combined with MIG: the device plugin README states that MPS sharing is not supported on devices with MIG enabled.

Which one to choose

  • Choose MIG when workloads belong to different teams or customers, or need predictable latency, and the GPU supports it. See Kubernetes multi-tenancy for the rest of the isolation picture.
  • Choose MPS for several trusted inference processes that each need a small, steady share of compute.
  • Choose time slicing for development, notebooks and bursty internal services, or on GPUs without MIG.
  • Share nothing for training. Training keeps a GPU busy on its own and depends on full memory and bandwidth.

For a worked setup with whole-GPU training next to shared inference in one cluster, see training and inference in one Kubernetes cluster. For how batching on a single GPU compares with sharing it, see how to run LLM inference on Kubernetes.

Where sharing is heading

Dynamic Resource Allocation lets several containers or Pods share one device by referencing the same resource claim, and lets drivers describe devices in more detail than a count. NVIDIA’s DRA driver for GPUs lists dynamic MIG allocation as a goal, but as of November 2026 its GPU allocation features are not yet officially supported. The device plugin with MIG, time slicing or MPS remains the production path.

GPU sharing on Cloudfleet

Cloudfleet Kubernetes Engine supports time slicing and MPS as a cluster-level setting on the Pro and Enterprise tiers. You choose the strategy and the maximum number of Pods per GPU in the Console, CLI or Terraform provider, and Pods keep requesting nvidia.com/gpu: 1, as the GPU workloads documentation describes.

On this page