콘텐츠로 이동

RBLN NPU Operator 설치

Helm으로 RBLN NPU Operator를 설치합니다. OpenShift에서 OLM으로 설치하는 방법은 OpenShift 설치에서 확인할 수 있습니다. 설치 후 Pod를 실행하는 과정은 NPU Pod 실행하기에서 다룹니다.

사전 요구사항

이미지 풀 시크릿 생성

rbln-system 네임스페이스를 만들고 RBLN Portal 계정을 drivercred 이미지 풀 시크릿에 저장합니다. 드라이버와 RSMD 모두 이 시크릿을 사용합니다.

1
2
3
4
5
6
7
8
9
kubectl create namespace rbln-system --dry-run=client -o yaml | kubectl apply -f -
export REGISTRY_USER='<RBLN_PORTAL_USERNAME>'
export REGISTRY_PASSWORD='<RBLN_PORTAL_PASSWORD>'
kubectl create secret docker-registry drivercred \
  --docker-server=repo.rebellions.ai \
  --docker-username="$REGISTRY_USER" \
  --docker-password="$REGISTRY_PASSWORD" \
  -n rbln-system
unset REGISTRY_PASSWORD

시크릿 이름이 my-registry-secret이면 아래에서 작성할 npu-values.yaml에 다음 이미지 풀 시크릿 설정을 추가합니다.

1
2
3
driver:
  imagePullSecrets:
    - my-registry-secret

설치 값 설정

드라이버 컨테이너와 Device Plugin을 사용하는 기본 구성입니다. 기본 Helm 설정값을 재정의할 npu-values.yaml 파일로 저장합니다.

npu-values.yaml
1
2
3
4
5
6
7
8
9
nfd:
  enabled: false
workloadType: container
driver:
  enabled: true
devicePlugin:
  enabled: true
draKubeletPlugin:
  enabled: false

DRA 구성은 NPU DRA Driver 문서에서 확인할 수 있습니다.

Helm 설치

차트 버전을 지정해 설치합니다.

1
2
3
4
export CHART_VERSION=0.6.0
helm install rbln-npu-operator oci://docker.io/rebellions/rbln-npu-operator-chart \
  --version "$CHART_VERSION" -n rbln-system \
  -f npu-values.yaml --wait --timeout 10m

설치 확인

Helm 설치 후 리소스 상태를 확인합니다. 아래는 정상 상태의 출력 예시로, 이름과 노드 수는 환경에 따라 다릅니다.

$ kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblndriver --all --timeout=600s
rblndriver.rebellions.ai/rbln-driver-rebel100 condition met

$ kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblnclusterpolicy/rbln-cluster-policy --timeout=600s
rblnclusterpolicy.rebellions.ai/rbln-cluster-policy condition met

$ kubectl get rblnclusterpolicy rbln-cluster-policy \
  -o 'custom-columns=NAME:.metadata.name,STATE:.status.state'
NAME                  STATE
rbln-cluster-policy   ready
$ kubectl get rblndriver \
  -o 'custom-columns=NAME:.metadata.name,STATE:.status.state,READY:.status.readyNodes,DESIRED:.status.desiredNodes'
NAME                   STATE   READY   DESIRED
rbln-driver-rebel100   ready   1       1

Device Plugin 구성에서는 노드의 NPU 리소스도 확인합니다.

$ kubectl get nodes -l rebellions.ai/npu.present=true \
  -o 'custom-columns=NAME:.metadata.name,FAMILY:.metadata.labels.rebellions\.ai/npu\.family,PRODUCT:.metadata.labels.rebellions\.ai/npu\.product,ALLOCATABLE:.status.allocatable.rebellions\.ai/npu'
NAME            FAMILY     PRODUCT     ALLOCATABLE
node-rebel100   rebel100   RBLN-CR13   1
$ kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblndriver --all --timeout=600s
rblndriver.rebellions.ai/rbln-driver-atom condition met

$ kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblnclusterpolicy/rbln-cluster-policy --timeout=600s
rblnclusterpolicy.rebellions.ai/rbln-cluster-policy condition met

$ kubectl get rblnclusterpolicy rbln-cluster-policy \
  -o 'custom-columns=NAME:.metadata.name,STATE:.status.state'
NAME                  STATE
rbln-cluster-policy   ready
$ kubectl get rblndriver \
  -o 'custom-columns=NAME:.metadata.name,STATE:.status.state,READY:.status.readyNodes,DESIRED:.status.desiredNodes'
NAME               STATE   READY   DESIRED
rbln-driver-atom   ready   1       1

Device Plugin 구성에서는 노드의 NPU 리소스도 확인합니다.

$ kubectl get nodes -l rebellions.ai/npu.present=true \
  -o 'custom-columns=NAME:.metadata.name,FAMILY:.metadata.labels.rebellions\.ai/npu\.family,PRODUCT:.metadata.labels.rebellions\.ai/npu\.product,ALLOCATABLE:.status.allocatable.rebellions\.ai/npu'
NAME        FAMILY   PRODUCT     ALLOCATABLE
node-atom   atom     RBLN-CA25   16