콘텐츠로 이동

DRA로 NPU 요청하기

Dynamic Resource Allocation(DRA)의 ResourceClaimTemplate으로 NPU 1개를 요청하고 Pod 안에서 할당된 장치를 확인합니다. 수량·제품명·PCIe 토폴로지·UUID 조건을 지정하는 방법은 DRA로 NPU 할당 조건 지정하기에서 다룹니다.

이 튜토리얼은 DRA 구성을 기준으로 합니다. Operator가 아직 설치되어 있지 않다면 먼저 NPU Operator 설치 절차를 진행합니다.

1. Claim과 Pod 생성하기

npu-tutorial 네임스페이스와 ResourceClaimTemplate, Pod를 생성합니다.

Pod의 resources.claims와 resourceClaims에는 모두 npu라는 이름을 지정해 컨테이너가 사용할 Claim을 연결합니다.

kubectl create namespace npu-tutorial --dry-run=client -o yaml | kubectl apply -f -
kubectl apply -f - <<'EOF'
apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: npu-request
  namespace: npu-tutorial
spec:
  spec:
    devices:
      requests:
      - name: npu
        exactly:
          deviceClassName: npu.rebellions.ai
          count: 1
---
apiVersion: v1
kind: Pod
metadata:
  name: dra-npu
  namespace: npu-tutorial
spec:
  containers:
  - name: ubuntu
    image: ubuntu:22.04
    command: ["sleep", "infinity"]
    resources:
      claims:
      - name: npu
  resourceClaims:
  - name: npu
    resourceClaimTemplateName: npu-request
EOF

2. 장치 확인하기

Pod가 준비되면 Claim 할당 결과와 컨테이너 안의 장치를 확인합니다.

Pod 준비 상태
$ kubectl wait -n npu-tutorial --for=condition=Ready pod/dra-npu --timeout=180s
pod/dra-npu condition met
1
2
3
4
CLAIM=$(kubectl get pod -n npu-tutorial dra-npu -o jsonpath='{.status.resourceClaimStatuses[0].resourceClaimName}')
kubectl get resourceclaim -n npu-tutorial "$CLAIM" \
  -o json | \
  jq '.status.allocation.devices.results | map({driver, pool, device})'
Claim 할당 결과
[
  {
    "driver": "npu.rebellions.ai",
    "pool": "node-rebel100",
    "device": "rbln0"
  }
]
컨테이너의 NPU
$ kubectl exec -n npu-tutorial dra-npu -- rbln-smi -L
NPU 0 : RBLN-CR13 (UUID: NPU-34428712-d887-840b-a7b9-1c9e05807fc3)
Claim 할당 결과
[
  {
    "driver": "npu.rebellions.ai",
    "pool": "node-atom",
    "device": "rbln0"
  }
]
컨테이너의 NPU
$ kubectl exec -n npu-tutorial dra-npu -- rbln-smi -L
NPU 0 : RBLN-CA25 (UUID: NPU-c5ba8327-5b18-847e-953e-4ca4b4daeb44)

Claim에 장치가 할당되고 컨테이너에 NPU 1개가 표시되면 성공입니다.

정리

Pod와 ResourceClaimTemplate을 삭제합니다. 템플릿에서 생성된 Claim은 자동으로 삭제됩니다.

kubectl delete pod -n npu-tutorial dra-npu
kubectl delete resourceclaimtemplate -n npu-tutorial npu-request