콘텐츠로 이동

RBLN NPU Operator로 샌드박스형 워크로드 구성

개요

RBLN NPU Operator는 VFIO를 통해 NPU를 게스트 VM에 직접 제공하여 가상화된 AI 워크로드를 구동할 수 있습니다. 이 모드에서 오퍼레이터는 다음을 수행합니다.

  1. VFIO 드라이버로 장치를 바인딩
    vfio-manager DaemonSet이 ConfigMap에 포함된 vfio-manage.sh 스크립트를 실행하여 Rebellions PCI 장치를 기본 드라이버에서 분리하고 vfio-pci로 재바인딩해 안전한 패스스루를 제공합니다.

  2. VFIO 기반 리소스 공표
    sandbox-device-plugin DaemonSet이 VFIO로 관리되는 NPU를 검사하고 rebellions.ai/ATOM_CA22_PT, rebellions.ai/ATOM_CA25_PT와 같은 리소스를 광고합니다. kubernetes 디바이스 플러그인을 통해 리소스를 요청하는 모든 워크로드(예: KubeVirt 포함)는 해당 리소스를 사용할 수 있습니다.

  3. 클러스터 라벨 일관성 유지
    Node Feature Discovery(NFD)가 feature.node.kubernetes.io/pci-1eff.present=true 라벨로 하드웨어를 보고하면, 오퍼레이터가 해당 노드에 rebellions.ai/npu.present=true 등을 붙여 VFIO 패스스루가 가능한 노드만 샌드박스 컴포넌트를 실행하도록 합니다.

해당 컨트롤러들이 동기화된 후에는 각 hostDevices 절에 참조된 rebellions.ai/* 리소스 이름을 통해 NPU가 KubeVirt VirtualMachine 객체에 노출됩니다.

사전 요구 사항

  • Kubernetes 1.19+ 클러스터
  • RBLN NPU(CA12/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 배포

  1. Helm 설치(필요 시)

    1
    2
    3
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \
         && chmod 700 get_helm.sh \
         && ./get_helm.sh
    

  2. Rebellions 차트 리포지토리 추가

    helm repo add rebellions https://rebellions-sw.github.io/rbln-npu-operator
    helm repo update
    

  3. 샌드박스 워크로드 프로필을 구성
    차트에는 sample-values-SandboxWorkload.yaml 예제가 포함되어 있으며, VFIO Manager·Sandbox Device Plugin을 활성화하고 적절한 리소스 이름을 지정해 둡니다.

    name: rbln
    nfd:
      enabled: true
    
    operator:
      replicas: 1
    
    sandboxDevicePlugin:
      enabled: true
      resourceList:
      - resourceName: ATOM_CA22_PT
        resourcePrefix: rebellions.ai
        productCardNames:
        - RBLN-CA22
      - resourceName: ATOM_CA25_PT
        resourcePrefix: rebellions.ai
        productCardNames:
        - RBLN-CA25
    
    vfioManager:
      enabled: true
    

    기본 values.yaml을 복사해 수동으로 조정할 수도 있습니다. - sandboxDevicePlugin.enabled=true을 설정 - vfioManager.enabled=true을 설정 - sandboxDevicePlugin.resourceList[]에 카드별 VFIO 리소스 이름을 맞춤 설정 - NFD가 없으면 nfd.enabled=true로 설정

  4. 샌드박스 프로파일로 설치

    1
    2
    3
    4
    helm install rbln-npu-operator \
         rebellions/rbln-npu-operator \
         -n rbln-system --create-namespace \
         -f sample-values-SandboxWorkload.yaml
    

KubeVirt에서 VFIO 리소스 사용

Note

VM에 장치를 연결하기 전에 KubeVirt의 HostDevices 기능 게이트를 활성화하고 각 Rebellions PCI 리소스를 permittedHostDevices.pciHostDevices에 등록하세요:

apiVersion: kubevirt.io/v1
kind: KubeVirt
metadata:
  name: kubevirt
  namespace: kubevirt
spec:
  configuration:
    developerConfiguration:
      featureGates:
      - HostDevices
    permittedHostDevices:
      pciHostDevices:
      - pciVendorSelector: 1eff:1220
        resourceName: rebellions.ai/ATOM_CA22_PT
      - pciVendorSelector: 1eff:1250
        resourceName: rebellions.ai/ATOM_CA25_PT

sandbox-device-plugin이 공표한 리소스를 참조하는 VirtualMachine 매니페스트를 생성합니다.

apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: vm-npu-workload
spec:
  runStrategy: Always
  template:
    metadata:
      labels:
        app: vm-npu
    spec:
      domain:
        devices:
          hostDevices:
          - name: rbln0
            deviceName: rebellions.ai/ATOM_CA25_PT
            tag: "pci"
        resources:
          requests:
            rebellions.ai/ATOM_PT: 1
          limits:
            rebellions.ai/ATOM_PT: 1

  • 요청한 각 단위는 VFIO에 바인딩된 NPU 기능 한 개에 해당합니다.
  • 여러 장치를 요구하려면 requestslimits 값을 늘리고 hostDevices 항목을 rbln1, rbln2처럼 추가하세요.
  • 하나의 Kubernetes 클러스터에 여러 종류의 RBLN 장치가 공존한다면 워크로드가 필요한 모델을 정확히 요청할 수 있도록 sandboxDevicePlugin.resourceList에서 장치별로 서로 다른 리소스 이름(예: rebellions.ai/ATOM_CA22_PT, rebellions.ai/ATOM_CA25_PT)을 정의하세요.