RBLN NPU Operator로 샌드박스형 워크로드 구성¶
개요¶
RBLN NPU Operator는 VFIO를 통해 NPU를 게스트 VM에 직접 제공하여 가상화된 AI 워크로드를 구동할 수 있습니다. 이 모드에서 오퍼레이터는 다음을 수행합니다.
-
VFIO 드라이버로 장치를 바인딩
vfio-managerDaemonSet이 ConfigMap에 포함된vfio-manage.sh스크립트를 실행하여 Rebellions PCI 장치를 기본 드라이버에서 분리하고vfio-pci로 재바인딩해 안전한 패스스루를 제공합니다. -
VFIO 기반 리소스 공표
sandbox-device-pluginDaemonSet이 VFIO로 관리되는 NPU를 검사하고rebellions.ai/ATOM_CA22_PT,rebellions.ai/ATOM_CA25_PT와 같은 리소스를 광고합니다. kubernetes 디바이스 플러그인을 통해 리소스를 요청하는 모든 워크로드(예: KubeVirt 포함)는 해당 리소스를 사용할 수 있습니다. -
클러스터 라벨 일관성 유지
Node Feature Discovery(NFD)가feature.node.kubernetes.io/pci-1eff.present=true라벨로 하드웨어를 보고하면, 오퍼레이터가 해당 노드에rebellions.ai/npu.present=true등을 붙여 VFIO 패스스루가 가능한 노드만 샌드박스 컴포넌트를 실행하도록 합니다.
해당 컨트롤러들이 동기화된 후에는 각 hostDevices 절에 참조된 rebellions.ai/* 리소스 이름을 통해 NPU가 KubeVirt VirtualMachine 객체에 노출됩니다.
아래의 Helm 설정은 클러스터 전체에 샌드박스 모드를 활성화합니다. 대부분의 노드는 컨테이너 워크로드를 처리하면서 일부 노드만 VFIO 기반 VM을 호스팅하는 하이브리드 배포를 원한다면, 차트에서는 workloadType: container를 유지한 채 vfioManager.enabled와 sandboxDevicePlugin.enabled를 모두 켜고, VM을 호스팅할 노드에만 rebellions.ai/npu.workload.config=vm-passthrough 라벨을 부여하세요. 자세한 절차와 운영 시 주의사항은 노드별 워크로드 라벨링을 참고하세요.
사전 요구 사항¶
- Kubernetes 1.19+ 클러스터
- RBLN NPU(RBLN-CA22/CA25)가 장착된 워커 노드
- BIOS에서 IOMMU 활성화(
intel_iommu=on또는amd_iommu=on) 및 VFIO 커널 모듈(vfio,vfio_pci,vfio_iommu_type1) 로드 - VM 스케줄이 가능한 상태의 KubeVirt Operator
- Node Feature Discovery(NFD) — Helm 차트에서 함께 배포 가능
샌드박스형 워크로드를 위한 Helm 배포¶
-
Helm 설치(필요 시)
-
Rebellions 차트 리포지토리 추가
-
샌드박스 워크로드 프로필을 구성
차트에는 sample-values-SandboxWorkload.yaml 예제가 포함되어 있으며, VFIO Manager·Sandbox Device Plugin을 활성화하고 적절한 리소스 이름을 지정해 둡니다.기본
values.yaml을 복사해 수동으로 조정할 수도 있습니다. -sandboxDevicePlugin.enabled=true을 설정 -vfioManager.enabled=true을 설정 -sandboxDevicePlugin.resourceList[]에 카드별 VFIO 리소스 이름을 맞춤 설정 - NFD가 없으면nfd.enabled=true로 설정 -
샌드박스 프로파일로 설치
KubeVirt에서 VFIO 리소스 사용¶
Note
VM에 장치를 연결하기 전에 KubeVirt의 HostDevices 기능 게이트를 활성화하고 각 Rebellions PCI 리소스를 permittedHostDevices.pciHostDevices에 등록하세요:
sandbox-device-plugin이 공표한 리소스를 참조하는 VirtualMachine 매니페스트를 생성합니다.
팁¶
- 요청한 각 단위는 VFIO에 바인딩된 NPU 기능 한 개에 해당합니다.
- 여러 장치를 요구하려면
requests와limits값을 늘리고hostDevices항목을rbln1,rbln2처럼 추가하세요. - 하나의 Kubernetes 클러스터에 여러 종류의 RBLN 장치가 공존한다면 워크로드가 필요한 모델을 정확히 요청할 수 있도록 sandboxDevicePlugin.resourceList에서 장치별로 서로 다른 리소스 이름(예:
rebellions.ai/ATOM_CA22_PT,rebellions.ai/ATOM_CA25_PT)을 정의하세요.