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
| 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에 장치가 할당되고 컨테이너에 NPU 1개가 표시되면 성공입니다.
정리
Pod와 ResourceClaimTemplate을 삭제합니다. 템플릿에서 생성된 Claim은 자동으로 삭제됩니다.
| kubectl delete pod -n npu-tutorial dra-npu
kubectl delete resourceclaimtemplate -n npu-tutorial npu-request
|