컨테이너·VM용 NPU 노드 분리하기¶
컨테이너 워크로드와 VM 패스스루에 사용할 노드를 구분하고 각 노드의 NPU 리소스를 확인합니다.
컨테이너·VM 혼용을 위한 Helm 설정을 사용하고 VM 노드 사전 준비를 완료합니다. Operator가 아직 설치되어 있지 않다면 먼저 NPU Operator 설치 절차를 진행합니다.
선택한 노드에 실행 중인 NPU 워크로드가 없는 상태에서 시작합니다.
1. Helm values 적용하기¶
현재 릴리스의 사용자 설정을 npu-values.yaml로 가져옵니다.
컨테이너·VM 혼용을 위한 Helm 설정에서 할당 방식에 맞는 예제를 선택해 npu-values.yaml에 병합합니다.
현재 차트 버전을 유지하면서 수정한 values 파일을 적용합니다.
2. VM 노드 지정하기¶
<VM_NODE_NAME>을 VM 패스스루에 사용할 노드 이름으로 바꿉니다. 이 레이블은 해당 노드의 모든 NPU에 적용됩니다. 다른 노드는 기본 모드인 container를 사용합니다.
3. 두 노드 유형 확인하기¶
VM 노드의 컴포넌트와 노드별 NPU 리소스를 확인합니다.
VM 노드의 VFIO Manager와 Sandbox Device Plugin Pod, 제품별 NPU 리소스를 확인합니다.
$ kubectl get pods -n rbln-system --field-selector "spec.nodeName=$VM_NODE" \
-l 'app.kubernetes.io/component in (vfio-manager,sandbox-device-plugin)'
NAME READY STATUS RESTARTS AGE
rbln-sandbox-device-plugin-87lj8 1/1 Running 0 2m42s
rbln-vfio-manager-w9c97 1/1 Running 0 2m48s
$ kubectl get node "$VM_NODE" -o json | \
jq '.status.allocatable | with_entries(select(.key | startswith("rebellions.ai/")))'
{
"rebellions.ai/RBLN-CA25_PF": "16",
"rebellions.ai/npu": "0"
}
노드별 리소스 수를 비교합니다. 아래 예시는 VM 노드에서 RBLN-CA25_PF를 사용합니다.
$ kubectl get nodes -l rebellions.ai/npu.present=true \
-o 'custom-columns=NAME:.metadata.name,CONTAINER_NPUS:.status.allocatable.rebellions\.ai/npu,VM_NPUS:.status.allocatable.rebellions\.ai/RBLN-CA25_PF'
NAME CONTAINER_NPUS VM_NPUS
node-rebel100 1 <none>
node-atom 0 16
두 VM 컴포넌트가 Ready이고 컨테이너 노드의 CONTAINER_NPUS와 VM 노드의 VM_NPUS가 각각 1 이상이어야 합니다. 노드에서 사용하지 않는 리소스는 0 또는 <none>으로 표시될 수 있습니다.
VM 노드의 VFIO Manager와 DRA Kubelet Plugin Pod를 확인합니다.
$ 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 2m42s
rbln-vfio-manager-w9c97 1/1 Running 0 2m48s
DRA의 ResourceSlice에서 컨테이너용 장치(type: npu)와 VM용 장치(type: vfio)를 구분합니다. 출력은 노드 이름, 컨테이너용 NPU 수, VM용 NPU 수 순서입니다.
두 VM 컴포넌트가 Ready이고 컨테이너 노드에는 npu, VM 노드에는 vfio 장치가 1개 이상 표시되어야 합니다.
두 워크로드 유형의 상태를 확인합니다.
$ kubectl get rblnclusterpolicy rbln-cluster-policy \
-o jsonpath='{range .status.workloads[*]}{.type}{"\t"}{.state}{"\n"}{end}'
container ready
vm-passthrough ready
두 워크로드 상태는 모두 ready여야 합니다.
이제 컨테이너와 VM 워크로드를 실행할 수 있습니다. 이미 사용 중인 노드의 모드를 변경하려면 레이블 기반 워크로드 전환을 따릅니다.