콘텐츠로 이동

NPU DRA 드라이버를 통한 VM 패스스루

샌드박스형 워크로드 설정을 마친 뒤 NPU DRA 드라이버의 ResourceClaim으로 VM에 NPU를 연결합니다. 제품이나 토폴로지로 NPU를 선택할 수 있습니다.

VM은 vfio-npu.rebellions.ai DeviceClass를 사용합니다. 확장 리소스 기반 할당은 Sandbox Device Plugin에서 확인할 수 있습니다.


Operator 설정

VM 전용 클러스터는 KubeVirt VM 패스스루 구성의 DRA 탭을 사용합니다. 컨테이너와 VM을 함께 운영한다면 컨테이너·VM 혼용을 위한 Helm 설정의 같은 탭을 사용합니다.


설치 확인

Pod 상태와 VM에서 사용할 NPU 리소스를 확인합니다.

Pod 상태

VFIO Manager와 DRA kubelet 플러그인 Pod를 확인합니다.

$ 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

VFIO Manager와 DRA kubelet 플러그인 Pod가 실행 중이어야 합니다.

NPU 리소스

인벤토리 출력은 풀 이름, 장치 수, 첫 번째 장치 이름 순서입니다. 새로 바인딩한 노드가 없으면 다음 인벤토리 갱신 후 다시 조회합니다.

DeviceClass와 노드별로 게시된 디바이스를 확인합니다.

$ 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

npu.rebellions.ai와 vfio-npu.rebellions.ai가 모두 표시되어야 합니다. 패스스루 노드의 풀에는 vfio-0000-27-00-0과 같은 vfio- 접두사 디바이스가 나열되어야 합니다.


리소스 이름 규칙

식별자 이름 규칙 예시
DeviceClass vfio-<driverName> vfio-npu.rebellions.ai
ResourceSlice.spec.devices[].name vfio-<PCI_ADDRESS>; 소문자, :과 . → - 0000:27:00.0 → vfio-0000-27-00-0

제품별 디바이스 식별 정보는 다음과 같습니다.

제품명 카드 모델(SKU) PCI 디바이스 ID(PF) productName
Rebel100™ RBLN-CR13 2130 RBLN-CR13
ATOM™+ RBLN-CA22 1220 RBLN-CA22
ATOM™-Max RBLN-CA25 1250 RBLN-CA25

패스스루 디바이스 속성

다음 디바이스 속성을 CEL 셀렉터에서 사용할 수 있습니다.

이름 타입 예시 값 설명
type string vfio 디바이스 유형
iommuGroup int 42 IOMMU 그룹 ID
pciDeviceID string 2130 0x 접두사가 없는 PCI 디바이스 ID
productName string RBLN-CR13 NPU 제품명
vf bool false SR-IOV Virtual Function 여부
resource.kubernetes.io/pciBusID string 0000:27:00.0 PCI 버스 주소
resource.kubernetes.io/pcieRoot string pci0000:20 PCIe 루트 컴플렉스
resource.kubernetes.io/numaNode int 0 NUMA 노드 ID. 정보가 없으면 생략
dra.net/numaNode int 0 resource.kubernetes.io/numaNode와 동일한 값