| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- Continuous Deployment
- gitops
- Kubeflow
- 카오스 엔지니어링
- CI/CD
- serving
- seldon core
- tekton
- kubernetes operator
- keda
- opensearch
- Argo
- Kubernetes 인증
- mlops
- knative
- Kubernetes
- opentelemetry
- blue/green
- MLflow
- nginx ingress
- eBPF
- Kopf
- Model Serving
- argocd
- 오퍼레이터
- xdp
- operator
- CANARY
- Pulumi
- Litmus
- Today
- Total
Kubernetes 이야기
kubernetes에서 nvidia gpu 공유하기 본문

최근 AI 워크로드가 kubernetes위에 배포되어 운영되는 사례가 증가하고 있다. kubernetes에서 nvidia gpu를 여러 instance 로 사용하기 위해서는 대표적으로 mig, time slicing, multi-process server (mps) 방식이 있다. 이 외에 가상화를 이용한 vGPU ( vGPU 라이선스 필요 ) 기술도 있다.
이 중 gpu 공유기술의 대표적인 mig, time slicing, multi-process server (mps) 를 알아보자. 아래 그림은 time slicing, mps, mig 를 이해하기 쉽게 표현한 그림이다.

출처 : https://www.flaticon.com/kr/free-icon/gpu_1089003?related_id=1088744&origin=search
| 항목 | MIG | MPS | Time-Slicing |
| 지원 GPU | A30, A100, H100, B100 등 ( MIG 를 지원하는 GPU 모델이 존재함 ) |
Volta 이상 권장 | 대부분의 GPU가 지원 |
| 격리 수준 | |||
| 메모리 | 하드웨어 레벨 완전 격리 | 격리 없음 | 격리 없음 |
| 컴퓨팅 | SM (Streaming Multiprocessor) 파티셔닝 | 부분 격리 ( SM 비율 지정 ) | 격리 없음 |
| 장애 | 장애 전파 없음 | 한 프로세스 장애 시 전체 영향 | 한 프로세스 장애 시 전체 영향 |
| 리소스 분할 | |||
| 분할 방식 | GPU를 인스턴스로 분할 (pod 할당 시에는 nvidia.com/mig-1g.6gb: "1" 와 같이 프로파일 이름으로 할당해야 함) |
SM 비율(%) 기반 분할 | 시간 기반 교대 사용 (라운드로빈 스케줄링) |
| 분한 단위 | GPU Instance | 프로세스 단위 SM 비율 | 컨테이너/프로세스 단위 |
| 최대 공유 수 | 최대 7개 인스턴스 | 최대 48개 클라이언트 | 제한 없음 |
| 메모리 할당 | 고정 할당 | 동적 할당 (전체 메모리 공유) | 동적 할당 (전체 메모리 공유) |
| 성능 | |||
| 오버헤드 | 거의 없음 | 낮음 | 높음 ( 컨텍스트 스위칭 ) |
| 동시 실행 | 각 인스턴스 독립 동시 실행 | 커널 레벨 동시 실행 | 순차 실행 |
| 지연 시간 | 낮음 | 낮음 | 높음 |
| K8S 사용 | |||
| 필수 Plugin | nvidia-device-plugin (strategy: mig) |
nvidia-device-plugin (strategy: mps, K8s 1.28+) |
nvidia-device-plugin (strategy: time-slicing) |
| 리소스 요청 | nvidia.com/mig-1g.6gb: 1 ( kubectl describe node 정보의 Labels을 참고하면 된다.) |
nvidia.com/gpu: 1 또는 nvidia.com/gpu.shared: 1 (설정에 따라 다름) |
nvidia.com/gpu: 1 |
| 설정 복잡도 | 높음 (프로파일 계획 필요, 재구성 시 GPU 리셋 필요) | 중간 (MPS 데몬 관리 필요) | 낮음 (ConfigMap 설정만으로 가능) |
| 모니터링 (prometheus exporter 기준) |
전체 지원 | 일부지원 | N/A |
운영에서는 가급적 MIG를 추천하지만, 개발환경에서는 MPS나 Time-Slicing 방식이 적합할 것 같다.
참고문서
https://github.com/NVIDIA/k8s-device-plugin
https://docs.nvidia.com/deploy/mps/when-to-use-mps.html
https://docs.nvidia.com/deploy/mps/architecture.html
https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/gpu-sharing.html
https://www.researchgate.net/figure/Multi-Stream-MPS-and-MIG-Illustration-ture-Figure-2-a-As-a-software-based_fig1_359309310
'Kubernetes > MLOps' 카테고리의 다른 글
| 온라인 서빙과 배치 서빙 (0) | 2024.05.06 |
|---|---|
| Ollama and Chainlit으로 Langchain과 RAG 구현하기 (0) | 2023.12.30 |
| Kafka를 사용하여 실시간 데이터 파이프라인 구축 (1) | 2023.12.11 |
| MLflow Serving (0) | 2023.09.09 |
| mlflow (0) | 2023.09.09 |