TL;DR
KAI Scheduler로 GPU를 계층형 큐와 quota 기반으로 분배하고 vCluster로 팀별 제어 플레인을 가상화하면 단일 물리 GPU를 여러 팀이 논리적으로 완전 격리된 클러스터처럼 사용할 수 있다. 튜토리얼은 MicroK8s + L40S 환경에서 Helm과 CLI 명령으로 GPU Operator, KAI Scheduler, vCluster를 순차적으로 설치하는 과정을 제시하며 큐 YAML과 kubectl 출력(예: Allocated: nvidia.com/gpu: 330m)을 통해 동작을 확인한다. 단, GPU 공유는 메모리 물리 격리를 제공하지 않으므로 애플리케이션 쪽 메모리 제한 설정 또는 MIG 같은 하드웨어 파티셔닝을 병행해야 안정적이다.
빠른 이해
새로운 점
GPU 공유를 위한 KAI Scheduler의 계층형 큐와 vCluster의 제어 플레인 가상화를 결합해 물리적 하드웨어 분할 없이 팀별 전용 클러스터 경험을 제공하는 실습 패턴.
핵심 메커니즘
KAI Scheduler는 Queue CRD로 팀별 quota·limit을 선언해 GPU 시간·노드 배치를 정책대로 할당하고, vCluster는 각 팀에 별도 API 서버와 RBAC를 제공해 동일 물리 노드에서 논리적 완전 격리를 구현한다.
핵심 수치
- 데모 하드웨어: 1 × NVIDIA L40S, 40 vCPU, 160 GiB RAM- Nebius Brev 인스턴스 구성으로 문서에 명시됨
- 큐 할당 예시: Allocated: nvidia.com/gpu: 330m / Requested: nvidia.com/gpu: 330m- kubectl describe queue 출력에서 발췌된 할당값
섹션별 상세
문제와 해결 패턴 개요
KAI Scheduler의 역할과 동작
- KAI Scheduler는 수천 노드 규모의 GPU 클러스터와 높은 워크로드 처리량을 관리하도록 설계되었다. — 본문 문장: 'designed to manage large-scale GPU clusters, including thousands of nodes, and a high throughput of workloads.'
vCluster의 역할과 제어 플레인 격리
- vCluster는 각 테넌트에 독립적인 API 서버·CRD·RBAC를 제공해 테넌트가 전용 클러스터처럼 동작하도록 만든다. — 본문 문장: 'Each tenant cluster gets its own API server, custom resource definitions (CRDs), and role-based access control (RBAC), indistinguishable from a dedicated Kubernetes cluster.'
데모 환경과 준비 사항
sudo snap refresh --hold microk8s
sudo snap install kubectl --classic --channel=1.35/stable
sudo snap install helm --classic
mkdir -p ~/.kube
sudo microk8s config > ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
chmod 600 ~/.kube/config이 명령어들은 로컬에서 MicroK8s 클러스터에 접속하기 위한 툴링을 준비하고 kubeconfig를 설정하는 과정이다. kubectl과 helm을 스냅으로 설치해 명령 행 클라이언트를 확보하고, microk8s로 생성된 kubeconfig를 사용자 홈으로 복사해 권한을 조정한다. 이 과정이 완료돼야 이후 Helm 차트 설치와 vCluster 접속이 원활히 이루어진다.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update이 명령어들은 NVIDIA Helm 차트 저장소를 추가하고 메타데이터를 갱신해 GPU Operator 같은 차트를 설치할 준비를 한다. Helm이 올바른 차트 버전을 찾을 수 있어야 GPU 관련 컴포넌트를 클러스터에 배포할 수 있다. MicroK8s 환경에서 GPU Operator 설치 전 단계로 반드시 수행해야 한다.
helm install gpu-operator nvidia/gpu-operator \
-n gpu-operator-resources --create-namespace \
--version v26.3.3 \
--set driver.enabled=false \
--set operator.defaultRuntime=containerd \
--set toolkit.env[0].name=CONTAINERD_CONFIG \
--set toolkit.env[0].value=/var/snap/microk8s/current/args/containerd.toml이 Helm 명령은 NVIDIA GPU Operator를 gpu-operator-resources 네임스페이스에 설치해 노드에서 GPU 드라이버와 툴킷을 관리하도록 한다. MicroK8s처럼 containerd 기반 환경에서는 runtime과 환경 변수를 맞춰 설치해야 정상 동작한다. 설치 후 gpu-operator-resources 네임스페이스의 파드들을 통해 GPU 디바이스가 노드에 노출되는지 확인할 수 있다.
핵심 설치·구성·배포 단계 요약
helm upgrade -i kai-scheduler \
oci://ghcr.io/kai-scheduler/kai-scheduler/kai-scheduler \
-n kai-scheduler --create-namespace \
--version v0.16.4 \
--set "global.gpuSharing=true"이 Helm 명령은 KAI Scheduler를 클러스터에 설치하고 GPU 공유 기능을 활성화한다. schedulerName 필드에 kai-scheduler를 설정한 파드는 KAI Scheduler가 스케줄링하며, 다른 파드는 기본 kube-scheduler로 처리된다. 설치 완료 후 kai-scheduler 네임스페이스의 컨트롤러와 스케줄러 파드를 통해 작동 상태를 확인할 수 있다.
apiVersion: scheduling.run.ai/v2
kind: Queue
metadata:
name: team-nlp
spec:
parentQueue: ml-org
priority: 100
resources: gpu: { quota: 0.33, limit: 1, overQuotaWeight: 1 }이 Queue CRD는 ml-org 부모 아래 team-nlp라는 팀 큐를 선언해 GPU 예산을 할당한다. quota는 보장치(0.33 GPU), limit은 최대값(1 GPU), overQuotaWeight는 초과 자원 분배 시 우선도를 조정하는 파라미터다. 이 YAML을 적용하면 KAI Scheduler가 해당 팀의 요청을 집계해 할당 상태를 기록한다.
- 예제 적용 후 큐 상태에는 Allocated: nvidia.com/gpu: 330m, Requested: nvidia.com/gpu: 330m으로 나타난다. — 본문의 kubectl describe queue 출력 스니펫: 'Status: Allocated: nvidia.com/gpu: 330m Requested: nvidia.com/gpu: 330m'.
운영 상의 한계와 주의점
결론과 다음 단계
용어 해설
- Multi-Instance GPU(MIG)
- — MIG는 단일 NVIDIA GPU를 하드웨어 수준에서 여러 독립 인스턴스로 분할해 각 인스턴스가 자체 메모리와 컴퓨팅 리소스를 갖도록 만든다. 하드웨어 기반 분할이므로 GPU 메모리와 컨텍스트 충돌 위험이 줄어들며, 워크로드별로 엄격한 자원 경계를 유지할 수 있다. KAI Scheduler는 MIG 파티션을 스케줄링 대상으로 삼아 물리적 분할을 예약할 수 있다.
- CUDA 컨텍스트 시간 분할
- — GPU 공유 모드에서는 서로 다른 컨테이너의 CUDA 컨텍스트가 커널 경계에서 시간 분할로 스케줄되어 GPU 사용 시간을 나눈다. 이 방식은 메모리 물리 격리를 제공하지 않으므로 각 애플리케이션은 스스로 메모리 사용 한도를 지켜야 한다. vLLM 같은 소프트웨어 쪽 설정으로 메모리 소비를 제한하는 것이 권장된다.
- Container Device Interface (CDI)(Container Device Interface)
- — CDI는 컨테이너에 하드웨어 디바이스 접근을 표준화해서 제공하는 인터페이스로, NVIDIA GPU Operator와 같은 컴포넌트가 GPU 디바이스를 컨테이너에 안전하게 연결하는 데 사용된다. Kubernetes 노드에서 GPU 자원을 노출하고 할당 정보를 관리하는 데 필수적이다. KAI Scheduler는 CDI가 활성화된 클러스터에서 GPU 공유 기능을 활용한다.
- Queue CRD
- — KAI Scheduler가 사용하는 Queue CRD는 조직→팀 계층과 팀별 GPU 예산(quota, limit)을 선언하는 Kubernetes 커스텀 리소스다. parent/child 관계로 트리를 구성하고 quota로 최소 보장을, limit으로 최대 사용을 지정하며 overQuotaWeight로 초과 분배 비율을 조절한다. 실제 예제로 각 팀에 quota: 0.33, limit: 1으로 설정해 전체 GPU를 공유하도록 구성한다.
- vCluster shared-nodes 모델(vCluster shared-nodes)
- — vCluster의 shared-nodes 모델은 각 테넌트에 별도 제어 플레인을 제공하면서 동일한 물리 노드를 공유하게 만든다. 테넌트는 자체 API 서버, CRD, RBAC를 통해 전용 클러스터처럼 동작하고, 물리적 노드와 GPU는 호스트 클러스터에서 그대로 사용된다. 신뢰된 내부 팀에 적합하며 node-level 격리가 필요한 외부 테넌트는 private-nodes 모델을 선택할 수 있다.
기술
- MicroK8s
- NVIDIA L40S
- KAI Scheduler
- vCluster
- NVIDIA GPU Operator
- Helm
- kubectl
- Container Device Interface
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.