콘텐츠로 이동

NPU 드라이버 수동 업그레이드

관리자가 드라이버 Pod를 수동으로 삭제하여 노드별 업그레이드 시점과 순서를 정합니다.

업그레이드 설정

기존 Helm values에서 driver.upgradePolicy.autoUpgrade: false를 설정합니다.

1
2
3
4
5
6
7
driver:
  enabled: true
  upgradePolicy:
    autoUpgrade: false
    npuPodDeletion:
      force: false
      deleteEmptyDirData: false

npuPodDeletion으로 NPU Pod의 eviction 허용 범위를 지정합니다.

설정 효과 기본값
npuPodDeletion.force 컨트롤러 없는 NPU Pod의 eviction 허용 false
npuPodDeletion.deleteEmptyDirData emptyDir를 사용하는 NPU Pod의 eviction 허용 false

노드별 업그레이드 진행

기존 Helm values의 driver.image.tag 또는 대상 인스턴스의 driver.instances.<key>.image.tag를 원하는 버전으로 변경해 적용합니다. 직접 관리하는 RBLNDriver는 spec.version을 변경합니다.

기존 Helm values와 차트 버전을 유지하면서 드라이버 태그를 변경합니다. <DRIVER_VERSION>을 원하는 드라이버 버전으로 바꿉니다.

CHART_VERSION=$(helm get metadata rbln-npu-operator -n rbln-system -o json | jq -r .version)
export DRIVER_VERSION='<DRIVER_VERSION>'
1
2
3
4
5
helm upgrade rbln-npu-operator oci://docker.io/rebellions/rbln-npu-operator-chart \
  --version "$CHART_VERSION" -n rbln-system --reuse-values \
  --set driver.upgradePolicy.autoUpgrade=false \
  --set-string driver.image.tag="$DRIVER_VERSION" \
  --wait --timeout 10m

<INSTANCE_KEY>를 기존 driver.instances의 키(예: atom, rebel100)로 바꿉니다.

1
2
3
4
5
6
export DRIVER_INSTANCE='<INSTANCE_KEY>'
helm upgrade rbln-npu-operator oci://docker.io/rebellions/rbln-npu-operator-chart \
  --version "$CHART_VERSION" -n rbln-system --reuse-values \
  --set driver.upgradePolicy.autoUpgrade=false \
  --set-string "driver.instances.${DRIVER_INSTANCE}.image.tag=${DRIVER_VERSION}" \
  --wait --timeout 10m

업그레이드할 노드의 드라이버 Pod를 확인하고 삭제합니다. 새 Pod는 변경한 버전으로 생성됩니다.

kubectl get pods -n rbln-system -o wide -l app.kubernetes.io/component=rbln-driver
kubectl delete pod <DRIVER_POD> -n rbln-system

로드된 드라이버가 교체되면 해당 노드가 cordon되고 NPU Pod가 evict됩니다.

업그레이드 확인

대상 노드의 새 드라이버 Pod가 Ready인지 확인하고, rbln-smi를 실행하여 업그레이드된 드라이버 버전을 확인합니다.

kubectl get pods -n rbln-system -o wide -l app.kubernetes.io/component=rbln-driver
kubectl exec -n rbln-system <DRIVER_POD> -c rbln-driver-container -- rbln-smi

확인 명령의 출력 예시는 드라이버 자동 업그레이드하기의 로드된 버전 확인 단계에 나와 있습니다.

Eviction 문제와 재시도

eviction이 막히면 노드는 cordon을 유지하며 initContainer가 재시작될 때 다시 시도합니다. 노드의 rebellions.ai/npu-pod-eviction-blocked 어노테이션에서 원인을 확인할 수 있습니다.

Driver Manager의 eviction 타임아웃은 NPU_POD_EVICTION_TIMEOUT_SECONDS로 설정하며 기본값은 300초입니다. 타임아웃 후에도 cordon을 유지한 채 재시도합니다.