(devices-gpu)=
# Type: `gpu`

```{youtube} https://www.youtube.com/watch?v=T0aV2LsMpoA
```

GPU devices make the specified GPU device or devices appear in the instance.

```{note}
For containers, a `gpu` device may match multiple GPUs at once.
For VMs, each device can match only a single GPU.
```

The following types of GPUs can be added using the `gputype` device option:

- [`physical`](gpu-physical) (container and VM): Passes an entire GPU through into the instance.
  This value is the default if `gputype` is unspecified.
- [`mdev`](gpu-mdev) (VM only): Creates and passes a virtual GPU through into the instance.
- [`mig`](gpu-mig) (container only): Creates and passes a MIG (Multi-Instance GPU) through into the instance.
- [`sriov`](gpu-sriov) (VM only): Passes a virtual function of an SR-IOV-enabled GPU into the instance.

The available device options depend on the GPU type and are listed in the tables in the following sections.

(gpu-physical)=
## `gputype`: `physical`

```{note}
The `physical` GPU type is supported for both containers and VMs.
It supports hotplugging only for containers, not for VMs.
```

A `physical` GPU device passes an entire GPU through into the instance.

### Device options

GPU devices of type `physical` have the following device options:

Key         | Type      | Default           | Description
:--         | :--       | :--               | :--
`gid`       | int       | `0`               | GID of the device owner in the instance (container only)
`id`        | string    | -                 | The DRM card ID of the GPU device
`mode`      | int       | `0660`            | Mode of the device in the instance (container only)
`pci`       | string    | -                 | The PCI address of the GPU device
`productid` | string    | -                 | The product ID of the GPU device
`uid`       | int       | `0`               | UID of the device owner in the instance (container only)
`vendorid`  | string    | -                 | The vendor ID of the GPU device

(gpu-mdev)=
## `gputype`: `mdev`

```{note}
The `mdev` GPU type is supported only for VMs.
It does not support hotplugging.
```

An `mdev` GPU device creates and passes a virtual GPU through into the instance.
You can check the list of available `mdev` profiles by running `lxc info --resources`.

### Device options

GPU devices of type `mdev` have the following device options:

Key         | Type      | Default           | Description
:--         | :--       | :--               | :--
`id`        | string    | -                 | The DRM card ID of the GPU device
`mdev`      | string    | -                 | The `mdev` profile to use (required - for example, `i915-GVTg_V5_4`)
`pci`       | string    | -                 | The PCI address of the GPU device
`productid` | string    | -                 | The product ID of the GPU device
`vendorid`  | string    | -                 | The vendor ID of the GPU device

(gpu-mig)=
## `gputype`: `mig`

```{note}
The `mig` GPU type is supported only for containers.
It does not support hotplugging.
```

A `mig` GPU device creates and passes a MIG compute instance through into the instance.
Currently, this requires NVIDIA MIG instances to be pre-created.

### Device options

GPU devices of type `mig` have the following device options:

Key         | Type      | Default           | Description
:--         | :--       | :--               | :--
`id`        | string    | -                 | The DRM card ID of the GPU device
`mig.ci`    | int       | -                 | Existing MIG compute instance ID
`mig.gi`    | int       | -                 | Existing MIG GPU instance ID
`mig.uuid`  | string    | -                 | Existing MIG device UUID (`MIG-` prefix can be omitted)
`pci`       | string    | -                 | The PCI address of the GPU device
`productid` | string    | -                 | The product ID of the GPU device
`vendorid`  | string    | -                 | The vendor ID of the GPU device

You must set either `mig.uuid` (NVIDIA drivers 470+) or both `mig.ci` and `mig.gi` (old NVIDIA drivers).

(gpu-sriov)=
## `gputype`: `sriov`

```{note}
The `sriov` GPU type is supported only for VMs.
It does not support hotplugging.
```

An `sriov` GPU device passes a virtual function of an SR-IOV-enabled GPU into the instance.

### Device options

GPU devices of type `sriov` have the following device options:

Key         | Type      | Default           | Description
:--         | :--       | :--               | :--
`id`         | string   | -                 | The DRM card ID of the parent GPU device
`pci`        | string   | -                 | The PCI address of the parent GPU device
`productid`  | string   | -                 | The product ID of the parent GPU device
`vendorid`   | string   | -                 | The vendor ID of the parent GPU device
