Skip to content

Helm Configuration Examples

Choose a configuration and save its YAML as npu-values.yaml. Each example is for a new installation; omitted values use the chart defaults.

Deployment configuration Use case
Driver container + Device Plugin Install the driver through a container and allocate NPUs to Pods
Host driver + Device Plugin Use a host-installed driver
DRA allocation Allocate NPUs through ResourceClaims
KubeVirt VM passthrough Attach NPUs to VMs through Sandbox Device Plugin or DRA
Helm settings for mixed container and VM workloads Enable the components needed for container and VM workloads
Driver versions by product family Use different driver versions for each NPU family
RDS Expose RDS devices to containers with allocated NPUs

Common Preparation

Item Preparation
NFD Installed in the cluster
drivercred Image pull secret for driver containers. Update driver.imagePullSecrets if the name differs.
<...> Replace with values for your environment
Driver version Select an image for the NPU family, OS, and kernel. Every family using the version needs an image.

Then follow Helm installation. For an existing installation, retain its settings as described in Applying Helm values.

Driver Container + Device Plugin

Install the driver through a container on nodes without a host driver, and advertise rebellions.ai/npu.

npu-values.yaml
workloadType: container
driver:
  enabled: true
  image:
    tag: "<DRIVER_VERSION>"
  imagePullSecrets:
    - drivercred
devicePlugin:
  enabled: true
draKubeletPlugin:
  enabled: false
sandboxDevicePlugin:
  enabled: false

Set <DRIVER_VERSION> to the version to use. For different versions by family, use driver versions by product family.

Host Driver + Device Plugin

Use nodes with a host-installed driver and working rbln-smi. Manage driver installation and updates on the host.

npu-values.yaml
1
2
3
4
5
6
7
8
9
workloadType: container
driver:
  enabled: false
devicePlugin:
  enabled: true
draKubeletPlugin:
  enabled: false
sandboxDevicePlugin:
  enabled: false

DRA Allocation

Allocate NPUs with the DRA Kubelet Plugin on Kubernetes 1.34 or later. This configuration uses a driver container and the Container Toolkit.

npu-values.yaml
workloadType: container
driver:
  enabled: true
  image:
    tag: "<DRIVER_VERSION>"
  imagePullSecrets:
    - drivercred
devicePlugin:
  enabled: false
draKubeletPlugin:
  enabled: true
sandboxDevicePlugin:
  enabled: false
containerToolkit:
  enabled: true

Set <DRIVER_VERSION> to the version to use. The DRA Kubelet Plugin cannot be enabled alongside either the Device Plugin or the Sandbox Device Plugin.

KubeVirt VM Passthrough

For NPU nodes used only for VMs, configure IOMMU, VFIO, and KubeVirt, then choose the Sandbox Device Plugin or DRA to allocate NPUs. See Prerequisites for the requirements of each method. The guest VM needs a driver to use its NPU.

Attach an NPU by specifying its product-specific Kubernetes resource in the VM's hostDevices.

npu-values.yaml
workloadType: vm-passthrough
driver:
  enabled: false
devicePlugin:
  enabled: false
draKubeletPlugin:
  enabled: false
sandboxDevicePlugin:
  enabled: true
vfioManager:
  enabled: true
containerToolkit:
  enabled: false
metricsExporter:
  enabled: false

Request an NPU through a ResourceClaim using the vfio-npu.rebellions.ai DeviceClass.

npu-values.yaml
workloadType: vm-passthrough
driver:
  enabled: false
devicePlugin:
  enabled: false
draKubeletPlugin:
  enabled: true
sandboxDevicePlugin:
  enabled: false
vfioManager:
  enabled: true
containerToolkit:
  enabled: false
metricsExporter:
  enabled: false

Helm Settings for Mixed Container and VM Workloads

Enable the components needed for container and VM workloads. Set the default workload mode to container and select VM nodes with the workload label. For node selection, follow Separate NPU nodes for containers and VMs.

npu-values.yaml
workloadType: container
driver:
  enabled: true
  image:
    tag: "<DRIVER_VERSION>"
  imagePullSecrets:
    - drivercred
devicePlugin:
  enabled: true
draKubeletPlugin:
  enabled: false
sandboxDevicePlugin:
  enabled: true
vfioManager:
  enabled: true
containerToolkit:
  enabled: true
metricsExporter:
  enabled: true
npu-values.yaml
workloadType: container
driver:
  enabled: true
  image:
    tag: "<DRIVER_VERSION>"
  imagePullSecrets:
    - drivercred
devicePlugin:
  enabled: false
draKubeletPlugin:
  enabled: true
sandboxDevicePlugin:
  enabled: false
vfioManager:
  enabled: true
containerToolkit:
  enabled: true
metricsExporter:
  enabled: true

Driver Versions by Product Family

Assign different driver versions to Rebel100™ and ATOM™ nodes. Replace both version values for your environment.

npu-values.yaml
workloadType: container
driver:
  enabled: true
  deployDefault: false
  imagePullSecrets:
    - drivercred
  instances:
    atom:
      image:
        tag: "<ATOM_DRIVER_VERSION>"
      nodeSelector:
        rebellions.ai/npu.family: atom
    rebel100:
      image:
        tag: "<REBEL100_DRIVER_VERSION>"
      nodeSelector:
        rebellions.ai/npu.family: rebel100
devicePlugin:
  enabled: true
draKubeletPlugin:
  enabled: false
sandboxDevicePlugin:
  enabled: false

With driver.deployDefault: false, nodes not selected by an instance receive no driver. Select every node that needs a driver.

RDS

RDS exposes NPU and RDS devices to containers on Rebel100™ nodes through Device Plugin v0.5.0 or DRA Kubelet Plugin v0.2.1.

Item Requirement
Driver RDS-capable image for the target OS and kernel
DRA Kubelet Plugin v0.2.1
Device Plugin v0.5.0
Container Toolkit v0.2.3 or later
Kubernetes (DRA only) 1.34 or later

NVMe Data Loss

RDS takes control of the selected NVMe devices. Select only devices dedicated to RDS, with no operating system or data you need to retain.

npu-values.yaml
workloadType: container
driver:
  enabled: true
  image:
    tag: "<RDS_DRIVER_VERSION>"
  imagePullSecrets:
    - drivercred
devicePlugin:
  enabled: false
draKubeletPlugin:
  enabled: true
  image:
    tag: v0.2.1
sandboxDevicePlugin:
  enabled: false
containerToolkit:
  enabled: true
rds:
  enabled: true
  deviceSelection:
    - nodeName: "<RDS_NODE_NAME>"
      targetBDFs:
        - "<NVME_PCI_ADDRESS>"
npu-values.yaml
workloadType: container
driver:
  enabled: true
  image:
    tag: "<RDS_DRIVER_VERSION>"
  imagePullSecrets:
    - drivercred
devicePlugin:
  enabled: true
  image:
    tag: v0.5.0
draKubeletPlugin:
  enabled: false
sandboxDevicePlugin:
  enabled: false
containerToolkit:
  enabled: true
rds:
  enabled: true
  deviceSelection:
    - nodeName: "<RDS_NODE_NAME>"
      targetBDFs:
        - "<NVME_PCI_ADDRESS>"
Value What to specify
<RDS_DRIVER_VERSION> RDS-capable driver version
<RDS_NODE_NAME> Target node's metadata.name
<NVME_PCI_ADDRESS> NVMe PCI address, such as 0000:08:00.0

After deploying the NPU Operator with the RDS configuration, follow the RDS Support guide to set the rebellions.ai/rds.present=true node label.