본문 바로가기
문서 목차
ORKESTRIXAI 플랫폼

gpu_sharing

정보 — 요건 정적 GPU 공유를 지원하는 가속기에 대해, 활용률 향상을 위한 GPU 공유 전략을 최소 하나 제공한다. 하드웨어 파티셔닝(MIG 등)을 지원하면 분할 GPU가 스케줄 가능한 리소스로 노출 되어야 하고, 소프트웨어 공유(time slicing 등)를 지원하면 GPU oversubscription이 허용 되어

QUANTUM C&S

정보 — 요건

정적 GPU 공유를 지원하는 가속기에 대해, 활용률 향상을 위한 GPU 공유 전략을 최소 하나 제공한다. 하드웨어 파티셔닝(MIG 등)을 지원하면 분할 GPU가 스케줄 가능한 리소스로 노출되어야 하고, 소프트웨어 공유(time-slicing 등)를 지원하면 GPU oversubscription이 허용되어야 한다.

카테고리: 가속기 (Accelerators) · 수준: SHOULD · 상태: Implemented

적용 솔루션

QKS는 NVIDIA GPU Operator를 통해 두 가지 공유 전략을 동시에 운영합니다.

  • 하드웨어 파티셔닝 (MIG): MIG 파티션(nvidia.com/mig-*)이 노드의 스케줄 가능 리소스로 노출되며, 추론 워크로드가 파티션 단위로 스케줄됩니다.
  • 소프트웨어 공유 (time-slicing): device plugin의 time-slicing 설정으로 물리 GPU 1장을 nvidia.com/gpu: 5로 oversubscription 광고합니다.

증명 (명령어 + 출력)

캡처: 2026-07-02T01:39:35Z

1. 노드별 GPU 공유 전략 구성

$ kubectl get nodes -L nvidia.com/gpu.present -L nvidia.com/device-plugin.config
NAME    STATUS   ROLES                AGE    VERSION   GPU.PRESENT   DEVICE-PLUGIN.CONFIG
qcs01   Ready    control-plane        427d   v1.35.1
qcs02   Ready    control-plane        424d   v1.35.1
qcs03   Ready    control-plane        427d   v1.35.1
qcs04   Ready    worker               427d   v1.35.1
qcs05   Ready    accelerator,worker   84d    v1.35.1   true          time-slicing-5
qcs06   Ready    accelerator,worker   337d   v1.35.1   true          none
qcs07   Ready    accelerator,worker   118d   v1.35.1   true          mig-mixed

2. 하드웨어 파티셔닝 — MIG 파티션이 스케줄 가능 리소스로 노출

$ kubectl get node qcs07 -o jsonpath="{.status.allocatable}"
{"cpu":"64","devices.kubevirt.io/kvm":"1k","devices.kubevirt.io/tun":"1k","devices.kubevirt.io/vhost-net":"1k","ephemeral-storage":"860321675478","hugepages-1Gi":"0","hugepages-2Mi":"0","memory":"527910868Ki","nvidia.com/gpu":"0","nvidia.com/mig-1g.24gb":"4","nvidia.com/mig-4g.96gb":"1","pods":"160"}

→ nvidia.com/mig-1g.24gb: 4, nvidia.com/mig-4g.96gb: 1이 개별 스케줄 가능 리소스로 노출됨.

3. 소프트웨어 공유 — time-slicing oversubscription

물리 GPU 1장이 5개 replica로 광고됩니다.

$ kubectl get cm device-plugin-configs -n gpu-operator -o jsonpath="{.data.time-slicing-5}"
version: v1
sharing:
  timeSlicing:
    resources:
    - name: nvidia.com/gpu
      replicas: 5

$ kubectl get node qcs05 -o jsonpath="{.status.allocatable.nvidia\.com/gpu}"
5

4. 실사용 — MIG 파티션 단위로 스케줄된 워크로드

$ kubectl describe node qcs07 | grep -A14 "Allocated resources"
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource                       Requests           Limits
  --------                       --------           ------
  cpu                            40020m (62%)       50200m (78%)
  memory                         93674139008 (17%)  206543136Ki (39%)
  ephemeral-storage              2298Mi (0%)        8Gi (0%)
  hugepages-1Gi                  0 (0%)             0 (0%)
  hugepages-2Mi                  0 (0%)             0 (0%)
  devices.kubevirt.io/kvm        0                  0
  devices.kubevirt.io/tun        0                  0
  devices.kubevirt.io/vhost-net  0                  0
  nvidia.com/gpu                 0                  0
  nvidia.com/mig-1g.24gb         3                  3
  nvidia.com/mig-4g.96gb         1                  1

→ MIG 파티션 4개(1g.24gb ×3 + 4g.96gb ×1)가 추론 서비스에 파티션 단위로 할당되어 실사용 중.

관련 링크

  • NVIDIA GPU Operator device plugin 공유 설정: gpu-operator 네임스페이스 device-plugin-configs ConfigMap