ALBANIA

ARGENTINA

AUSTRALIA

AUSTRIA

AZERBAIJAN

BANGLADESH

BELGIUM

BOSNIA AND HERZEGOVINA

BRAZIL

BULGARIA

CANADA

CHILE

CHINA

COLOMBIA

COSTA RICA

CROATIA

CYPRUS

CZECH REPUBLIC

DENMARK

ECUADOR

EGYPT

EL SALVADOR

ESTONIA

FINLAND

FRANCE

GEORGIA

GERMANY

GREECE

GUATEMALA

HUNGARY

ICELAND

INDIA

INDONESIA

IRELAND

ISRAEL

ITALY

JAPAN

KAZAKHSTAN

KENYA

KOSOVO

LATVIA

LIBYA

LITHUANIA

LUXEMBOURG

MALAYSIA

MALTA

MEXICO

MOLDOVA

MONTENEGRO

MOROCCO

NETHERLANDS

NEW ZEALAND

NIGERIA

NORWAY

PAKISTAN

PANAMA

PARAGUAY

PERU

PHILIPPINES

POLAND

PORTUGAL

QATAR

ROMANIA

RUSSIA

SAUDI ARABIA

SERBIA

SINGAPORE

SLOVAKIA

SLOVENIA

SOUTH AFRICA

SOUTH KOREA

SPAIN

SWEDEN

SWITZERLAND

TAIWAN

THAILAND

TUNISIA

TURKEY

UKRAINE

UNITED ARAB EMIRATES

UNITED KINGDOM

URUGUAY

USA

UZBEKISTAN

VIETNAM

How to Split One GPU Between Workloads with NVIDIA MIG (Multi-Instance GPU) on a Dedicated Server

A single data-center GPU is often far more than one workload needs. A small inference model might use 8 GB of an 80 GB card, while the rest of the GPU, which you are paying for, sits idle. NVIDIA Multi-Instance GPU (MIG) solves that by partitioning one physical GPU into several smaller, fully isolated GPUs, each with its own dedicated compute, memory and memory bandwidth.

This tutorial shows you how to do it on a GPU dedicated server running Linux: check support, enable MIG mode, choose profiles, create instances, run containers on them, make the setup survive reboots, and monitor it. Every command comes from NVIDIA's MIG documentation and works the same on bare metal, which is why MIG is a natural fit for dedicated servers, where you control the driver and the host.

Short answer: enable MIG with sudo nvidia-smi -i 0 -mig 1, create instances with sudo nvidia-smi mig -cgi <profiles> -C, then point each workload at its own MIG device using the MIG-<UUID> shown by nvidia-smi -L. On Hopper and newer GPUs, MIG mode does not persist across reboots, so automate it with NVIDIA's mig-parted tool.

Last updated October 2026 and checked against NVIDIA's Multi-Instance GPU User Guide (revised September 2026). Profile names, driver minimums and supported GPUs change with new hardware, so confirm them on your own server with nvidia-smi mig -lgip.

In this tutorial

  • What MIG is and why use it

  • Which GPUs support MIG

  • MIG vs time-slicing vs MPS

  • Before you start

  • Step 1: Confirm your GPU and driver

  • Step 2: Enable MIG mode

  • Step 3: Choose your MIG profiles

  • Step 4: Create GPU instances and compute instances

  • Step 5: Verify the MIG devices

  • Step 6: Run workloads on MIG devices

  • Step 7: Make your MIG layout persistent

  • Step 8: Monitor MIG devices

  • Step 9: Change or remove your MIG layout

  • MIG on Kubernetes and Slurm

  • Troubleshooting

  • When MIG is not the right tool

  • FAQ

What MIG is and why use it

MIG is a hardware feature of NVIDIA data-center GPUs, introduced with the Ampere generation. It divides one GPU into as many as seven independent GPU instances. Each instance gets its own streaming multiprocessors (SMs), its own slice of memory, and its own paths through the memory system. A job running in one instance cannot read another instance's memory, and a crash or memory overrun in one instance does not take down its neighbors.

That hardware-level isolation is what separates MIG from software sharing. It gives you predictable performance (quality of service) and clean separation between tenants, teams or services.

Common reasons to partition a GPU dedicated server this way:

  • Several small inference services on one card, each with guaranteed memory instead of fighting over it.

  • Multi-tenant setups, such as a hosting business, a research group or an internal platform team giving each user a dedicated slice.

  • Development, testing and CI, where many people need "a GPU" but nobody needs a whole one.

  • Higher utilization. Instead of one lightly loaded workload per GPU, you fill the card with right-sized workloads.

MIG needs administrator access to the host, because you enable it at the driver level. That is trivial on a dedicated server with root access, and usually not possible on shared or virtualized GPU services where the provider controls the hardware. If you are weighing server options, our GPU dedicated servers for AI workload-matching guide explains how to match GPU memory and compute to your workload.

Which GPUs support MIG

MIG works only on GPUs starting with the NVIDIA Ampere generation (compute capability 8.0 or higher), and only on products NVIDIA lists as supported. According to NVIDIA's current documentation:

GPU family Examples Maximum MIG instances
Ampere A100 (40 GB and 80 GB), A30 7 (A100), 4 (A30)
Hopper H100 (80 GB, 94 GB, 96 GB), H200 (141 GB), H20 7
Blackwell, data center B200 (180 GB), GB200 7
Blackwell, workstation/server RTX PRO 6000 Blackwell (96 GB), RTX PRO 5000 Blackwell (48 GB), RTX PRO 4500 Blackwell (32 GB) 4 (RTX PRO 6000), 2 (RTX PRO 5000 and 4500)

GeForce RTX cards and GPUs that are not on NVIDIA's supported list, as of this writing, cannot use MIG. If you plan to buy or rent hardware specifically for partitioning, compare options in our guides to B200 vs H100 dedicated servers and the NVIDIA RTX PRO 6000 Blackwell on dedicated servers.

MIG vs time-slicing vs MPS

MIG is one of several ways to share a GPU. Picking the right one depends on how much isolation you need.

Feature MIG Time-slicing CUDA MPS
How it shares Hardware partitions with dedicated compute and memory Processes take turns on the whole GPU Cooperating processes run kernels concurrently
Memory isolation Yes, per instance No, memory is shared Limited
Fault isolation Yes No Limited
Predictable performance Yes No Partial
Hardware support Supported GPUs only Most NVIDIA GPUs Most NVIDIA GPUs
Flexibility Fixed profile sizes Any number of clients Any number of cooperating clients
Best for Multi-tenant or mixed workloads needing guarantees Light, bursty or development use Several processes from the same team or application

MIG and MPS can also be combined: NVIDIA documents running one MPS server per MIG instance for workloads that benefit from it.

Before you start

You need:

  • A dedicated server with a supported NVIDIA GPU from the table above.

  • Root or sudo access to the host.

  • A Linux distribution supported by CUDA. This guide uses Ubuntu Server 24.04 (see our Ubuntu Server overview if you are setting one up).

  • A recent NVIDIA data-center driver. NVIDIA recommends the latest. Documented minimums include R525 or later for A100/A30, R570 (570.133.20 or later) for B200, and R575 (575.51.03 or later) for RTX PRO 6000 and RTX PRO 5000 Blackwell.

  • For containers: Docker and the NVIDIA Container Toolkit (v2.5.0 or later of the original nvidia-docker2 package, or any current toolkit release).

  • No running GPU workloads or monitoring agents using the GPU at the moment you enable MIG, so the driver can apply the change cleanly.

If you have an RTX PRO 6000 or RTX PRO 5000 Blackwell workstation-class card, there are two extra requirements: the GPU's vBIOS must meet NVIDIA's minimum version, and for the Workstation and Max-Q Workstation editions the display mode must be switched from graphics to compute with NVIDIA's DisplayModeSelector tool before MIG can be enabled. On a single-card system that disables physical display output, so make sure you have SSH access first.

Step 1: Confirm your GPU and driver

Check that the driver sees your GPU and shows the MIG mode state:

nvidia-smi
nvidia-smi --query-gpu=index,name,driver_version,mig.mode.current --format=csv

You should see your GPU model, a driver version that meets the minimum above, and Disabled in the MIG column. MIG is off by default.

If nvidia-smi is not found or reports no devices, finish your driver and CUDA installation first. A step-by-step driver setup is the first prerequisite for every other GPU tutorial.

Step 2: Enable MIG mode

Enable MIG on a specific GPU by index (here, GPU 0):

sudo nvidia-smi -i 0 -mig 1

A successful run prints Enabled MIG Mode for GPU .... Confirm it:

nvidia-smi -i 0 --query-gpu=pci.bus_id,mig.mode.current --format=csv

Omit -i to apply the change to every GPU in the server. Behavior differs by GPU generation, and the difference matters later:

  • Hopper and newer (H100, H200, B200, RTX PRO Blackwell): enabling MIG does not require a GPU reset. However, MIG mode is not persistent across reboots. It lasts only while the driver's kernel modules stay loaded, so unloading and reloading the driver disables it.

  • Ampere (A100, A30): the driver attempts a GPU reset to apply the change, and MIG mode does persist across reboots. You must disable it explicitly to return the GPU to normal mode.

If the command warns that MIG mode is "in pending enable state" because the GPU is in use by another client, stop whatever is using the GPU (CUDA jobs, monitoring agents such as DCGM, or even another nvidia-smi session), then retry. Rebooting also makes the change take effect.

Step 3: Choose your MIG profiles

A profile defines the size of a GPU instance. Names follow the pattern Ng.Mgb, where N is the number of compute slices and M is the memory in gigabytes. So 3g.40gb means three compute slices and roughly 40 GB of memory.

List the profiles your GPU supports:

nvidia-smi mig -lgip

The output shows each profile's ID, how many instances you can create, its memory, and its SM count. To see how instances can physically be placed on the GPU, list the placements:

nvidia-smi mig -lgipp

For reference, the main profiles on an H100 80 GB look like this. Other GPUs use different sizes, so always trust -lgip on your own machine:

Profile Compute slices Approx. memory Max instances
1g.10gb 1 of 7 10 GB 7
1g.20gb 1 of 7 20 GB 4
2g.20gb 2 of 7 20 GB 3
3g.40gb 3 of 7 40 GB 2
4g.40gb 4 of 7 40 GB 1
7g.80gb 7 of 7 80 GB 1

How to pick sizes. Memory is usually the limiting factor, so size by VRAM first:

  • A 7-billion-parameter model in 16-bit precision needs roughly 14 GB for the weights alone, before the KV cache and framework overhead. That does not fit a 10 GB slice, but a 4-bit quantized version of the same model typically does.

  • Leave headroom for context length, batch size and CUDA overhead. A slice that is exactly the size of your weights will run out of memory under real traffic.

  • Partition for the workloads you have, not an idealized layout. Common layouts are two halves (3g.40gb × 2), seven small slices (1g.10gb × 7), or a mix such as 4g.40gb + 2g.20gb + 1g.10gb.

Step 4: Create GPU instances and compute instances

Creating MIG devices takes two layers: GPU instances (GIs), which carve out memory and SMs, and compute instances (CIs), which are the schedulable compute inside a GI. The -C flag creates a default compute instance for each GPU instance automatically.

You can name profiles by ID (for example 9), by short name (3g.40gb), or by full name (MIG 3g.40gb). Create two equal halves on an H100 80 GB:

sudo nvidia-smi mig -cgi 3g.40gb,3g.40gb -C

Or seven small instances for lightweight inference:

sudo nvidia-smi mig -cgi 1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb,1g.10gb -C

Or a mixed layout:

sudo nvidia-smi mig -cgi 4g.40gb,2g.20gb,1g.10gb -C

Two practical notes from NVIDIA's documentation:

  • Order can matter for mixed layouts. If the driver cannot place a profile it reports Insufficient Resources. Listing the largest profile first avoids this, and on A100 40 GB the 3g.20gb profile must come first.

  • Enabling MIG mode is not enough. Without creating GPU instances and compute instances, CUDA workloads cannot run on the GPU at all.

Step 5: Verify the MIG devices

List the MIG devices and their UUIDs:

nvidia-smi -L

You will see the parent GPU followed by one MIG ... Device N: (UUID: MIG-xxxxxxxx-...) line per instance. Copy these UUIDs, because that is how you assign workloads.

To inspect the layers separately:

sudo nvidia-smi mig -lgi    # GPU instances
sudo nvidia-smi mig -lci    # compute instances
nvidia-smi                  # MIG devices table with per-instance memory

Step 6: Run workloads on MIG devices

Directly on the host

Select a MIG device with the CUDA_VISIBLE_DEVICES environment variable, using the MIG UUID:

CUDA_VISIBLE_DEVICES=MIG-<UUID-1> python inference_a.py &
CUDA_VISIBLE_DEVICES=MIG-<UUID-2> python inference_b.py &

Each process sees only its own slice and its own memory limit. A single CUDA process works with one MIG device, so you cannot combine slices into one larger device. If a job needs more memory or compute, choose a bigger profile instead.

In Docker containers

With the NVIDIA Container Toolkit installed, give each container its own MIG device with the --gpus flag, using either the MIG UUID or the GPUindex:MIGindex format:

# By UUID
sudo docker run --rm --gpus '"device=MIG-<UUID-1>"' \
  nvidia/cuda:<tag>-base-ubuntu24.04 nvidia-smi -L

# By GPU index and MIG device index (GPU 0, MIG device 1)
sudo docker run --rm --gpus '"device=0:1"' \
  nvidia/cuda:<tag>-base-ubuntu24.04 nvidia-smi -L

Replace <tag> with a current CUDA image tag from Docker Hub. Inside each container, nvidia-smi -L lists exactly one MIG device. This is the cleanest way to hand a dedicated slice to each tenant, team or service. For larger container platforms, see our guide to dedicated servers as the foundation for Kubernetes clusters.

Step 7: Make your MIG layout persistent

This is the step most tutorials skip, and it is why a working MIG setup can seem to vanish after a reboot. Two separate things are involved:

  • The MIG devices themselves are never persistent. GPU instances and compute instances you create with nvidia-smi mig are gone after a reboot or GPU reset.

  • On Hopper and newer GPUs, MIG mode is also not persistent. On Ampere it is.

So after a reboot you must re-enable MIG mode (on Hopper+) and recreate the layout. NVIDIA's recommended tool for this is MIG Partition Editor (mig-parted), which applies a declarative layout and can run as a systemd service at startup.

A minimal configuration file looks like this:

version: v1
mig-configs:
  all-disabled:
    - devices: all
      mig-enabled: false

  two-halves:
    - devices: all
      mig-enabled: true
      mig-devices:
        "3g.40gb": 2

  seven-small:
    - devices: all
      mig-enabled: true
      mig-devices:
        "1g.10gb": 7

Apply a named layout:

sudo nvidia-mig-parted apply -f config.yaml -c two-halves

Install mig-parted from NVIDIA's repository at github.com/nvidia/mig-parted, and follow its README to run the layout as a boot-time service. After a reboot, run nvidia-smi -L and confirm the MIG devices are back before starting any workload.

Note that MIG UUIDs can change when instances are recreated. Scripts and container definitions that hard-code a MIG-<UUID> need to look it up again, or use the stable GPUindex:MIGindex form where it fits.

Step 8: Monitor MIG devices

Plain nvidia-smi shows per-instance memory and which process is running where, but it does not attribute GPU utilization to individual MIG devices, and utilization often shows N/A. For real per-instance metrics, NVIDIA recommends DCGM (Data Center GPU Manager) version 3 or later.

A common production setup is DCGM exporting metrics to Prometheus, with Grafana dashboards per MIG instance, so you can see which tenant is saturating its slice. For tooling options and how GPU metrics fit into the rest of your server monitoring, see our overview of dedicated server management tools.

Step 9: Change or remove your MIG layout

You can reconfigure MIG dynamically while the GPU stays in MIG mode, but only when no workload is using the instances you are changing. Stop jobs and containers first. Then destroy the compute instances, followed by the GPU instances:

sudo nvidia-smi mig -dci && sudo nvidia-smi mig -dgi

Create a new layout with Step 4, or return the GPU to normal operation:

sudo nvidia-smi -i 0 -mig 0

MIG on Kubernetes and Slurm

If you schedule workloads rather than assigning them by hand, MIG integrates with the common orchestrators:

  • Kubernetes: supported through the NVIDIA device plugin (v0.7.0 or later) and, in practice, the NVIDIA GPU Operator, which includes tooling to manage MIG layouts across nodes. Each MIG instance appears as a schedulable resource.

  • Slurm: version 21.08 and later can use MIG devices as generic resources.

Both are best set up after you have the single-server workflow in this guide working.

Troubleshooting

Symptom Likely cause Fix
MIG mode is in pending enable state ... In use by another client A process or agent holds the GPU Stop CUDA jobs and GPU-using services such as DCGM, retry the command, or reboot
Insufficient Resources when creating instances Requested profiles do not fit the placement rules Check nvidia-smi mig -lgipp, list the largest profile first, reduce the layout
MIG disabled after a reboot (Hopper, Blackwell) MIG mode is not persistent on these GPUs Re-enable at boot with mig-parted
No MIG devices after a reboot GPU and compute instances are never persistent Recreate the layout automatically at startup
CUDA app reports no device or uses the wrong GPU Pointing at a GPU index instead of a MIG UUID, or compute instances were not created Use CUDA_VISIBLE_DEVICES=MIG-<UUID>, and confirm you used -C or created CIs
GPU utilization shows N/A nvidia-smi cannot attribute utilization to MIG devices Use DCGM for per-instance metrics
Cannot enable MIG on RTX PRO workstation cards Display mode is graphics, or vBIOS is below the minimum Switch to compute mode with DisplayModeSelector and update the vBIOS
MIG enabled but pending inside a VM with passthrough (Ampere) The hypervisor does not allow a GPU reset Reboot the VM so MIG mode can take effect

When MIG is not the right tool

MIG is excellent for isolation, but it is not always the best choice:

  • Large training jobs that need the full GPU, all of its memory, or multi-GPU scaling over NVLink. Partitioning only gets in the way, and these jobs belong on whole GPUs.

  • Workloads that do not fit any profile. MIG offers fixed sizes, so odd-sized needs can waste a slice.

  • Graphics or non-CUDA workloads, since MIG is about partitioning compute for CUDA applications.

  • Unsupported GPUs, including GeForce cards. There, time-slicing or MPS are your options.

If you are still choosing hardware for AI work, our guide to choosing GPU dedicated servers for machine learning covers memory, bandwidth and workload fit in more depth.

FAQ

What is NVIDIA MIG?

NVIDIA Multi-Instance GPU (MIG) is a hardware feature that partitions one supported data-center GPU into up to seven isolated GPU instances. Each instance has dedicated compute, memory and bandwidth, so workloads sharing the card cannot interfere with one another.

Which GPUs support MIG?

NVIDIA's supported list includes the A100 and A30, the H100, H200 and H20, the B200 and GB200, and the RTX PRO 6000, 5000 and 4500 Blackwell cards. GeForce RTX cards are not supported.

How many MIG instances can I create on one GPU?

Up to seven on A100, H100, H200 and B200, four on A30 and RTX PRO 6000 Blackwell, and two on RTX PRO 5000 and 4500 Blackwell. The real number depends on the profiles you choose.

Does MIG persist after a reboot?

The MIG devices you create never persist, so you must recreate them after a reboot. MIG mode itself persists on Ampere GPUs but not on Hopper and newer, so on those you re-enable it too. Use NVIDIA's mig-parted to automate both.

Can I run MIG instances in Docker or Kubernetes?

Yes. With the NVIDIA Container Toolkit, pass a specific MIG device to a container with --gpus '"device=MIG-<UUID>"'. Kubernetes supports MIG through the NVIDIA device plugin and GPU Operator.

Can I combine several MIG instances for one job?

No. A CUDA process works with a single MIG device. If one job needs more memory or compute, create a larger profile for it, or use the whole GPU.

Is MIG better than time-slicing?

For isolation, yes. MIG gives each workload its own memory and compute and contains faults, while time-slicing shares everything and offers no memory isolation. Time-slicing is more flexible and works on more GPUs, so it suits light or development workloads.

Do I need a dedicated server to use MIG?

You need root access to the host and control of the NVIDIA driver, because MIG is enabled at the driver level. A dedicated GPU server gives you that. Shared or virtualized GPU services generally do not.

Conclusion

MIG turns one expensive GPU into several right-sized, isolated ones, so each workload gets guaranteed memory and compute and your hardware stays busy. The workflow is short: enable MIG mode, pick profiles, create GPU and compute instances, assign each workload its own MIG-<UUID>, and automate the layout with mig-parted so it survives reboots.

Start with a simple layout, such as two halves or seven small slices, verify it with nvidia-smi -L, and add DCGM monitoring before you put real tenants on it. If you are planning a deployment, you can compare GPU dedicated server options at COLO BIRD, where you get full root access to configure MIG, containers and monitoring your way.

Last reviewed: October 2026. This tutorial is revisited when NVIDIA changes MIG-supported GPUs, driver requirements or nvidia-smi mig behavior. For the full reference, see NVIDIA's Multi-Instance GPU User Guide.