Skip to content

VM Passthrough with the NPU DRA Driver

Complete the sandboxed workload setup, then use the NPU DRA Driver to attach an NPU through a ResourceClaim. Select NPUs by product or topology.

VMs use the vfio-npu.rebellions.ai DeviceClass. For allocation through extended resources instead, see Sandbox Device Plugin.


Operator Configuration

For a VM-only cluster, use the DRA tab in KubeVirt VM passthrough. For a mixed container and VM cluster, use the same tab in the Helm settings for mixed container and VM workloads.


Installation Verification

Check the pod status and the NPU resources available to VMs.

Pod Status

Check the VFIO Manager and DRA kubelet plugin pods:

$ export VM_NODE='<VM_NODE_NAME>'
$ kubectl get pods -n rbln-system --field-selector "spec.nodeName=$VM_NODE" \
  -l 'app.kubernetes.io/component in (vfio-manager,dra-kubelet-plugin)'
NAME                            READY   STATUS    RESTARTS   AGE
rbln-dra-kubelet-plugin-z72sz   1/1     Running   0          115s
rbln-vfio-manager-zx4tx         1/1     Running   0          2m1s

The VFIO Manager and DRA kubelet plugin pods should be running.

NPU Resources

Check the DeviceClasses and the devices published for each node. The inventory columns show the pool, device count and first device name:

$ kubectl get deviceclasses
NAME                     AGE
npu.rebellions.ai        2m2s
vfio-npu.rebellions.ai   2m2s
$ kubectl get resourceslices -o json | \
  jq -r '.items[] | select(.spec.driver == "npu.rebellions.ai") | [.spec.pool.name, (.spec.devices | length), .spec.devices[0].name] | @tsv'
node-rebel100   1   vfio-0000-27-00-0
$ kubectl get resourceslices -o json | \
  jq -r '.items[] | select(.spec.driver == "npu.rebellions.ai") | [.spec.pool.name, (.spec.devices | length), .spec.devices[0].name] | @tsv'
node-atom   16  vfio-0000-23-00-0

Both npu.rebellions.ai and vfio-npu.rebellions.ai must be listed. The pool of each passthrough node must list devices with the vfio- prefix, such as vfio-0000-27-00-0. Inventory refresh is periodic; if a newly bound node is missing, wait for the next scan and repeat the query.


Resource Naming

Identifier Naming rule Example
DeviceClass vfio-<driverName> vfio-npu.rebellions.ai
ResourceSlice.spec.devices[].name vfio-<PCI_ADDRESS>; lowercase, : and . → - 0000:27:00.0 → vfio-0000-27-00-0

The following table lists device identifiers for each product.

Product Card model (SKU) PCI device ID (PF) productName
Rebel100™ RBLN-CR13 2130 RBLN-CR13
ATOM™+ RBLN-CA22 1220 RBLN-CA22
ATOM™-Max RBLN-CA25 1250 RBLN-CA25

Passthrough Device Attributes

The following device attributes can be used in CEL selectors.

Name Type Example Value Description
type string vfio Device type
iommuGroup int 42 IOMMU group ID
pciDeviceID string 2130 PCI device ID without the 0x prefix
productName string RBLN-CR13 NPU product name
vf bool false Whether the device is an SR-IOV Virtual Function
resource.kubernetes.io/pciBusID string 0000:27:00.0 PCI bus address
resource.kubernetes.io/pcieRoot string pci0000:20 PCIe root complex
resource.kubernetes.io/numaNode int 0 NUMA node ID; omitted when unavailable
dra.net/numaNode int 0 Same value as resource.kubernetes.io/numaNode