Mobilint Device Plugin for Kubernetes#

The Mobilint Device Plugin integrates ARIES NPUs with Kubernetes so that you can request an NPU the same way you request a CPU or GPU.

Overview#

The Mobilint Device Plugin implements the Kubernetes Device Plugin API to register ARIES NPUs as Kubernetes resources.

After installation, the kubelet publishes the node’s ARIES devices as the mobilint.com/npu resource, and you request that resource from a Pod.

When a Pod is allocated an NPU, the device plugin uses the Container Device Interface (CDI) to inject the selected device into the container.

Prerequisites#

  • The ARIES driver must be installed on every NPU node. See Driver Installation. Verify on each node with:

    lsmod | grep aries
    ls /dev/aries*
    
  • The container runtime must support CDI (Container Device Interface).

    Runtime

    Version

    containerd

    1.7+

    CRI-O

    1.23+

Installation#

1. Label the NPU nodes#

The device plugin is deployed only to nodes that carry the mobilint.com/npu.present=true label. Label each NPU node:

kubectl label node <NODE_NAME> mobilint.com/npu.present=true --overwrite

List node names with kubectl get nodes. You can automate this step with Node Feature Discovery (see NFD Integration below).

2. Install the device plugin#

Install with Helm:

helm install mobilint-device-plugin \
  oci://ghcr.io/mobilint/charts/mobilint-device-plugin \
  -n kube-system

If you are not using Helm, apply the DaemonSet manifest directly:

kubectl apply -f https://raw.githubusercontent.com/mobilint/mobilint-device-plugin/main/deploy/daemonset.yaml

Verifying the Installation#

Check that the device plugin Pod is running:

kubectl -n kube-system get pods \
  -l app.kubernetes.io/name=mobilint-device-plugin

The device plugin Pod should be READY 1/1 on every NPU node.

Check that the node advertises the NPU resource:

kubectl get node <NODE_NAME> \
  -o jsonpath='{.status.allocatable.mobilint\.com/npu}'

It prints the number of NPUs on the node (for example, 4).

Using It in a Workload#

Request an NPU by setting mobilint.com/npu under the Pod’s resources.limits:

apiVersion: v1
kind: Pod
metadata:
  name: npu-example
spec:
  containers:
    - name: app
      image: ubuntu:latest
      command: ["sleep", "infinity"]
      resources:
        limits:
          mobilint.com/npu: 1

Save the manifest as npu-example.yaml, apply it, and confirm the NPU device is visible inside the container:

kubectl apply -f npu-example.yaml
kubectl exec -it npu-example -- ls -l /dev/aries*

NFD Integration#

Node Feature Discovery (NFD) can apply the mobilint.com/npu.present=true label automatically through the NodeFeatureRule that Mobilint provides.

First, install NFD:

helm repo add nfd https://kubernetes-sigs.github.io/node-feature-discovery/charts
helm install nfd nfd/node-feature-discovery \
  -n node-feature-discovery --create-namespace \
  --set master.extraLabelNs={mobilint.com}

Then enable NFD integration when installing the device plugin:

helm install mobilint-device-plugin \
  oci://ghcr.io/mobilint/charts/mobilint-device-plugin \
  -n kube-system \
  --set nodeFeatureDiscovery.enabled=true

Uninstalling#

If you installed with Helm:

helm uninstall mobilint-device-plugin -n kube-system

If you installed from the manifest:

kubectl delete -f https://raw.githubusercontent.com/mobilint/mobilint-device-plugin/main/deploy/daemonset.yaml

Remove the node label as well:

kubectl label node <NODE_NAME> mobilint.com/npu.present-