Schedule a Pod by NPU family¶
Select an NPU family (ATOM™ or Rebel100™) and verify that the Pod runs on a node of that family.
Use the Device Plugin configuration. If the Operator is not installed, follow Installing the NPU Operator.
1. Find the available families¶
Query the nodes' NPU family labels.
$ kubectl get nodes -l rebellions.ai/npu.present=true \
-o 'custom-columns=NAME:.metadata.name,FAMILY:.metadata.labels.rebellions\.ai/npu\.family,PRODUCT:.metadata.labels.rebellions\.ai/npu\.product,ALLOCATABLE:.status.allocatable.rebellions\.ai/npu'
NAME FAMILY PRODUCT ALLOCATABLE
node-rebel100 rebel100 RBLN-CR13 1
$ kubectl get nodes -l rebellions.ai/npu.present=true \
-o 'custom-columns=NAME:.metadata.name,FAMILY:.metadata.labels.rebellions\.ai/npu\.family,PRODUCT:.metadata.labels.rebellions\.ai/npu\.product,ALLOCATABLE:.status.allocatable.rebellions\.ai/npu'
NAME FAMILY PRODUCT ALLOCATABLE
node-atom atom RBLN-CA25 16
Choose one of the listed families.
Available NPU count
To check how many NPUs remain available on a node, run kubectl describe node <NODE_NAME> and compare Allocatable with Allocated resources. Allocatable includes NPUs that are already allocated.
2. Select the family and create a Pod¶
Create the npu-tutorial namespace and select Rebel100™. For ATOM™ nodes, set NPU_FAMILY=atom instead.
Use nodeSelector to select the family and resources.limits to request one NPU.
The first line of the output depends on whether the namespace already exists.
Wait for the new Pod to become Ready.
$ kubectl wait -n npu-tutorial --for=condition=Ready pod/selected-npu --timeout=180s
pod/selected-npu condition met
3. Verify the selected family and device¶
Example outputs are shown for each family.
$ NODE=$(kubectl get pod -n npu-tutorial selected-npu -o jsonpath='{.spec.nodeName}')
$ kubectl get node "$NODE" \
-o 'custom-columns=NAME:.metadata.name,FAMILY:.metadata.labels.rebellions\.ai/npu\.family,PRODUCT:.metadata.labels.rebellions\.ai/npu\.product'
NAME FAMILY PRODUCT
node-rebel100 rebel100 RBLN-CR13
$ kubectl exec -n npu-tutorial selected-npu -- rbln-smi -L
NPU 0 : RBLN-CR13 (UUID: NPU-34428712-d887-840b-a7b9-1c9e05807fc3)
$ NODE=$(kubectl get pod -n npu-tutorial selected-npu -o jsonpath='{.spec.nodeName}')
$ kubectl get node "$NODE" \
-o 'custom-columns=NAME:.metadata.name,FAMILY:.metadata.labels.rebellions\.ai/npu\.family,PRODUCT:.metadata.labels.rebellions\.ai/npu\.product'
NAME FAMILY PRODUCT
node-atom atom RBLN-CA25
$ kubectl exec -n npu-tutorial selected-npu -- rbln-smi -L
NPU 0 : RBLN-CA25 (UUID: NPU-c5ba8327-5b18-847e-953e-4ca4b4daeb44)
The check passes when the node family equals $NPU_FAMILY and the device product matches the node's npu.product label.
Pod stays Pending
Run kubectl describe pod -n npu-tutorial selected-npu and check Events for a selector mismatch, insufficient NPUs or an untolerated taint.