RBLN NPU DRA 드라이버¶
RBLN NPU DRA 드라이버는 Kubernetes의 Dynamic Resource Allocation(DRA) 프레임워크로 RBLN NPU를 할당합니다.
Kubernetes Device Plugin은 노드별로 고정된 수의 NPU 리소스를 제공합니다. DRA를 사용하면 워크로드가 제품 타입, NUMA 위치, PCIe 토폴로지 등의 조건에 맞는 NPU를 요청할 수 있습니다. 디바이스 목록과 선택 조건은 Kubernetes Resource API(resource.k8s.io) 오브젝트로 정의합니다.
설치는 NPU Operator 설치와 DRA 구성을 따릅니다. 기본 요청과 할당 결과 확인은 DRA로 NPU 요청하기에서, 수량·제품명·PCIe 토폴로지·UUID 조건을 지정하는 예제는 DRA로 NPU 할당 조건 지정하기에서 확인할 수 있습니다.
사전 준비¶
- Kubernetes v1.34.0 이상
- RBLN NPU Operator 설치 및 DRA 모드 활성화
- RBLN Container Toolkit 활성화(CDI 기반 장치 주입)
Warning
NPU DRA 드라이버는 Device Plugin이나 Sandbox Device Plugin과 함께 활성화할 수 없습니다. 같은 NPU가 중복으로 노출되기 때문입니다. 기존에 Device Plugin을 사용 중이라면, 비활성화하기 전에 rebellions.ai/npu limits로 NPU를 요청하던 워크로드를 ResourceClaim 방식으로 옮겨야 합니다.
핵심 리소스 모델¶
DRA 기반 워크로드는 보통 아래 흐름으로 구성됩니다.
- DeviceClass: 어떤 디바이스를 사용할 것인지를 정의(컨테이너는
npu.rebellions.ai, VM 패스스루는vfio-npu.rebellions.ai. 자세한 내용은 NPU DRA 드라이버를 통한 VM 패스스루 참고) - ResourceSlice: 노드가 가진 디바이스 목록과 속성(attributes)을 노출합니다.
- ResourceClaim: 파드가 요청하는 디바이스를 선언합니다.
ResourceClaimTemplate을 쓰면 파드마다 Claim이 자동 생성되고 파드와 함께 삭제됩니다. 여러 파드가 같은 디바이스를 공유하거나 파드보다 오래 유지해야 하면ResourceClaim을 직접 만듭니다. - Pod:
resources.claims로ResourceClaim을 소비합니다.
노드마다 ResourceSlice가 하나씩 생성되고, POOL은 노드 이름과 같습니다. ResourceSlice는 클러스터 범위 오브젝트이므로 조회할 때 네임스페이스 플래그가 필요 없습니다.
컨테이너 안에는 할당된 NPU의 디바이스 파일(/dev/rbln0)과 함께 RSD 그룹 디바이스(/dev/rsd0)가 생성됩니다. 자세한 내용은 Device Plugin의 RSD 그룹 설명에서 확인할 수 있습니다.
NPU 속성(ResourceSlice attributes)¶
RBLN NPU의 ResourceSlice는 각 노드별로 배포되며, 하나의 디바이스는 다음과 같은 속성(attributes)를 제공합니다. 디바이스는 rbln0, rbln1처럼 노드의 디바이스 파일 이름으로 게시됩니다.
이러한 속성은 selector 표현식(selectors.cel.expression)에서 사용되어, 워크로드에 할당될 디바이스를 선택하고 결정하는 데 활용됩니다. 드라이버 속성은 device.attributes["npu.rebellions.ai"].<이름>으로, 표준 속성은 해당 도메인으로 참조합니다(예: device.attributes["resource.kubernetes.io"].pcieRoot). 디바이스에 NUMA 정보가 없으면 numaNode 속성은 게시되지 않습니다.
| 이름 | 타입 | 예시 값 | 설명 |
|---|---|---|---|
driverVersion | string | 3.5.1 | 설치된 NPU 드라이버 버전 |
firmwareVersion | string | 3.5.1 | 디바이스 펌웨어 버전 |
pciDeviceID | string | 0x2130 | PCI Device ID. VFIO 디바이스는 0x 접두사 없이 게시 |
pciLinkSpeed | string | 32.0GT/s | PCIe 링크 속도 |
pciLinkWidth | string | 16 | PCIe 링크 레인 수 |
productName | string | RBLN-CR13 | NPU 제품명 |
sid | string | 0000000052631015 | 카드/보드 식별자 |
type | string | npu | 디바이스 유형. 컨테이너는 npu, VM 패스스루는 vfio |
uuid | string | 34428712-d887-840b-a7b9-1c9e05807fc3 | 디바이스 고유 식별자. rbln-smi -L이 출력하는 UUID에서 NPU- 접두사를 뺀 값 |
resource.kubernetes.io/numaNode | int | 0 | 디바이스가 연결된 NUMA 노드 |
resource.kubernetes.io/pciBusID | string | 0000:fd:00.0 | PCI Bus 주소 |
resource.kubernetes.io/pcieRoot | string | pci0000:fc | PCIe 루트 컴플렉스(pci<domain>:<bus>) |
dra.net/numaNode | int | 0 | resource.kubernetes.io/numaNode와 같은 값 |
속성과 별도로 디바이스 메모리 용량이 capacity.memory로 게시됩니다(예: 140Gi). CEL에서는 device.capacity["npu.rebellions.ai"].memory로 참조합니다.