콘텐츠로 이동

노드별로 다른 드라이버 버전 사용하기

다음 두 가지 구성 중 하나로 노드별 드라이버 버전을 지정합니다.

  • ATOM™ + Rebel100™: 제품군별로 서로 다른 드라이버 버전을 설치합니다.
  • Rebel100™ 두 노드: nodeSelector로 노드를 구분해 서로 다른 드라이버 버전을 설치합니다.

Operator가 아직 설치되어 있지 않다면 먼저 NPU Operator 설치 절차를 진행합니다.

1. Helm values 수정하기

현재 릴리스의 사용자 설정을 npu-values.yaml로 가져옵니다.

helm get values rbln-npu-operator -n rbln-system -o yaml > npu-values.yaml

두 예제 중 하나를 선택해 driver 설정을 npu-values.yaml에 병합합니다. 기존 driver.instances 항목이 있다면 선택한 예제의 항목으로 교체하고, 나머지 설정은 유지합니다.

ATOM™ 노드에는 3.4.1, Rebel100™ 노드에는 3.5.1을 설치합니다. nodeSelector에 제품군 레이블을 지정합니다.

npu-values.yaml
driver:
  enabled: true
  deployDefault: false
  instances:
    atom:
      image:
        tag: "3.4.1"
      nodeSelector:
        rebellions.ai/npu.family: atom
    rebel100:
      image:
        tag: "3.5.1"
      nodeSelector:
        rebellions.ai/npu.family: rebel100

같은 제품군의 노드 두 대에 driver-group 레이블을 지정합니다. <REBEL100_NODE_1>과 <REBEL100_NODE_2>를 각각 다른 Rebel100™ 노드 이름으로 바꿉니다.

kubectl label node <REBEL100_NODE_1> driver-group=stable --overwrite
kubectl label node <REBEL100_NODE_2> driver-group=canary --overwrite

stable 노드는 공통 설정의 3.5.0을 상속하고, canary 노드는 인스턴스에서 지정한 3.5.1을 사용합니다. 각 nodeSelector는 제품군과 그룹 레이블을 함께 확인합니다.

npu-values.yaml
driver:
  enabled: true
  deployDefault: false
  image:
    tag: "3.5.0"
  instances:
    rebel100-stable:
      nodeSelector:
        rebellions.ai/npu.family: rebel100
        driver-group: stable
    rebel100-canary:
      image:
        tag: "3.5.1"
      nodeSelector:
        rebellions.ai/npu.family: rebel100
        driver-group: canary

driver.deployDefault: false이므로 각 인스턴스가 선택한 노드에만 드라이버를 설치합니다. 드라이버를 설치할 모든 NPU 노드가 인스턴스 중 하나에 포함되어야 합니다. 레지스트리와 이미지 풀 시크릿 등 인스턴스에서 생략한 값은 공통 driver 설정을 상속합니다.

2. Helm values 적용하기

현재 차트 버전을 유지하면서 수정한 values 파일을 적용합니다.

1
2
3
4
CHART_VERSION=$(helm get metadata rbln-npu-operator -n rbln-system -o json | jq -r .version)
helm upgrade rbln-npu-operator oci://docker.io/rebellions/rbln-npu-operator-chart \
  --version "$CHART_VERSION" -n rbln-system \
  --reset-values -f npu-values.yaml --wait --timeout 10m

RBLNDriver 인스턴스와 RBLNClusterPolicy 인스턴스가 준비될 때까지 기다립니다.

1
2
3
4
kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblndriver --all --timeout=600s
kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblnclusterpolicy/rbln-cluster-policy --timeout=600s

3. 노드별 RBLNDriver 인스턴스 확인하기

driver.instances의 각 항목은 rbln-driver-<인스턴스 이름> 리소스로 생성됩니다. 드라이버 버전과 노드의 rebellions.ai/npu.driver.owner 레이블을 확인합니다. 아래 출력은 인스턴스마다 노드 한 대를 사용하는 예시이며, 노드 이름과 수는 환경에 따라 달라집니다.

$ kubectl get rblndriver \
  -o 'custom-columns=NAME:.metadata.name,VERSION:.spec.version,STATE:.status.state,READY:.status.readyNodes,DESIRED:.status.desiredNodes'
NAME                   VERSION   STATE   READY   DESIRED
rbln-driver-atom       3.4.1     ready   1       1
rbln-driver-rebel100   3.5.1     ready   1       1

$ kubectl get nodes -l rebellions.ai/npu.present=true \
  -o 'custom-columns=NAME:.metadata.name,DRIVER:.metadata.labels.rebellions\.ai/npu\.driver\.owner'
NAME            DRIVER
node-atom       rbln-driver-atom
node-rebel100   rbln-driver-rebel100
$ kubectl get rblndriver \
  -o 'custom-columns=NAME:.metadata.name,VERSION:.spec.version,STATE:.status.state,READY:.status.readyNodes,DESIRED:.status.desiredNodes'
NAME                          VERSION   STATE   READY   DESIRED
rbln-driver-rebel100-canary   3.5.1     ready   1       1
rbln-driver-rebel100-stable   3.5.0     ready   1       1

$ kubectl get nodes -l rebellions.ai/npu.present=true \
  -o 'custom-columns=NAME:.metadata.name,DRIVER:.metadata.labels.rebellions\.ai/npu\.driver\.owner'
NAME              DRIVER
node-rebel100-a   rbln-driver-rebel100-stable
node-rebel100-b   rbln-driver-rebel100-canary

각 노드의 DRIVER가 선택한 인스턴스와 일치하고 두 인스턴스가 ready인지 확인합니다.