23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
GPU를 활용한 클라우드 환경에서는 비용 효율적이고 안정적인 운영을 위해 GPU 자원의 성능 지표(Metric)를 정확하게 수집하고 분석할 수 있는 모니터링 시스템 구축이 필수적입니다.
특히 GPU 인스턴스는 높은 성능만큼 비용도 상대적으로 높아 효율적인 자원 관리와 비용 최적화가 매우 중요합니다.
본 글에서는 이러한 과제를 해결하기 위해 AWS의 GPU 스팟(Spot) 인스턴스(g4dn, g5, g6)를 기반으로 Kubernetes(EKS) NodeGroup을 구성하고,
NVIDIA GPU Operator를 통해 GPU 자원을 모니터링하는 PoC(Proof of Concept) 환경을 구축하는 방법을 소개합니다.
스팟 인스턴스는 온디맨드 인스턴스 대비 약 70~80%까지 비용을 절감할 수 있지만,
모든 리전 및 가용영역(AZ)에서 사용할 수 있는 것은 아니므로, 사전에 각 인스턴스 타입의 비용과 가용성을 확인하는 것이 중요합니다.
본 가이드에서는 다음과 같은 작업을 진행하겠습니다.
AWS에서 GPU 스팟 인스턴스를 이용한 EKS 클러스터 및 NodeGroup 구성
NVIDIA GPU Operator 설치 및 설정을 통한 GPU 자원 인식 및 관리
Prometheus와 Grafana 설치를 통한 GPU 성능 지표 수집 및 시각화
이 글을 통해 GPU 기반 클라우드 자원의 효율적인 관리 방안을 확인하고, 비용 효율성을 높이는 실질적인 방법을 익힐 수 있습니다.
K8s 클러스터를 생성하기 위해 필수적인 정보를 입력한 cluster.yaml 파일을 생성합니다.
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: ai-dc
region: ap-northeast-2
version: "1.31"
vpc:
cidr: 10.10.0.0/16
clusterEndpoints:
publicAccess: true
privateAccess: true
nodeGroups:
- name: spot-nodegroup
minSize: 1
desiredCapacity: 1
maxSize: 3
instancesDistribution:
maxPrice: 0.3
instanceTypes: ["t3.xlarge", "t3.large"] # At least two instance types should be specified
onDemandBaseCapacity: 0
onDemandPercentageAboveBaseCapacity: 0
spotAllocationStrategy: "capacity-optimized-prioritized"
volumeSize: 100
volumeType: gp3
volumeDeleteOnTermination: true
iam:
withAddonPolicies:
ebs: true
- name: spot-gpu-nodegroup
minSize: 1
desiredCapacity: 3
maxSize: 3
instancesDistribution:
maxPrice: 1.1
instanceTypes: ["g4dn.xlarge", "g4dn.2xlarge"] # At least two instance types should be specified
onDemandBaseCapacity: 0
onDemandPercentageAboveBaseCapacity: 0
spotAllocationStrategy: "capacity-optimized-prioritized"
volumeSize: 100
volumeType: gp3
volumeDeleteOnTermination: true
iam:
withAddonPolicies:
ebs: true
addons:
- name: aws-ebs-csi-driver
version: latest
wellKnownPolicies:
ebsCSIController: trueeksctl 명령어를 이용하여 K8s 클러스터를 생성합니다.
$ eksctl create cluster -f cluster.yaml성공적으로 구성이 완료되었다면, 다음 명령어를 통해 kubeconfig를 업데이트하고 노드를 조회합니다.
$ eksctl get cluster --region ap-northeast-2
NAME REGION EKSCTL CREATED
ai-dc ap-northeast-2 True
$ aws eks --region ap-northeast-2 update-kubeconfig --name <<< MY-CLUSTER-NAME >>
Added new context arn:aws:eks:ap-northeast-2:0193123123:cluster/ai-dc to /Users/eclipse/.kube/config
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ip-10-10-30-34.ap-northeast-2.compute.internal Ready <none> 3m34s v1.31.9-eks-5d632ec 10.10.30.34 3.36.51.87 Amazon Linux 2 5.10.233-224.894.amzn2.x86_64 containerd://1.7.25NVIDIA GPU Operator는 Kubernetes 환경에서 GPU 자원을 효율적으로 관리할 수 있도록 지원하는 오픈소스 솔루션입니다.
GPU Operator는 NVIDIA 드라이버 설치부터, GPU 자원 할당 및 관리, 성능 모니터링까지의 전체 과정을 자동화합니다.
이를 통해 GPU 기반 워크로드의 배포와 관리가 쉬워지고, 운영 효율성을 높일 수 있습니다.
NVIDIA GPU 드라이버의 자동 설치 및 관리
NVIDIA CUDA Toolkit 및 관련 라이브러리 제공
GPU 자원 상태 모니터링 및 성능 지표 수집
Kubernetes 클러스터 환경에서 GPU 자원 활용 최적화 지원
GPU Operator는 Helm을 사용하여 Kubernetes 클러스터에 쉽게 설치할 수 있습니다. 아래와 같은 순서로 진행합니다:
$ helm repo add nvidia https://nvidia.github.io/gpu-operator
$ helm repo update// 필요시 values.yaml 수정
$ helm show values gpu-operator nvidia/gpu-operator > values.yaml
$ helm upgrade --install gpu-operator --create-namespace -n gpu-operator nvidia/gpu-operator --values values.yaml \
--set driver.enabled=true모든 Pod가 정상적으로 실행되고 있으면 설치가 성공적으로 완료된 것입니다.
$ kubectl get pods -n gpu-operator
$ kubectl get nodes -o json | jq '.items[].status.allocatable'Prometheus는 Kubernetes 환경에서 메트릭을 수집하고 저장하는 대표적인 모니터링 시스템입니다.
Grafana는 수집된 메트릭을 시각화하여 분석할 수 있게 지원합니다.
본 글에서는 Prometheus와 Grafana를 Helm을 사용하여 설치하는 방법을 안내합니다.
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo add kube-state-metrics https://kubernetes.github.io/kube-state-metrics
$ helm repo update
$ helm upgrade --install prometheus --create-namespace -n devops-prometheus prometheus-community/kube-prometheus-stack \
--set persistence.storageClassName="gp3" \
--set persistence.enabled=true \
--set persistence.size=40Gi \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false \
--set grafana.ini.server.root_url="https://<<< grafana.YOUR_DOMAIN >>>" \
--set grafana.persistence.storageClassName="gp3" \
--set grafana.persistence.enabled=true \
--set grafana.persistence.size=20Gi \
--set nodeSelector.failure-domain.beta.kubernetes.io/zone="ap-northeast-2a"Prometheus와 Grafana의 설치 확인
$ kubectl get all -n devops-prometheus브라우저에서 http://localhost:9090 으로 접속할 수 있습니다.
$ kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n devops-prometheus 9090:9090DCGM 메트릭을 입력하여 정상적으로 조회되는지 확인합니다.
Prometheus 로 수집된 메트릭을 시각적으로 확인하기 위해서 Grafana 대시보드를 사용합니다.
$ kubectl get secret -n devops-prometheus prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
prom-operator메트릭에 따라 사전에 정의된 대시보드가 있으며 Grafana 공식사이트에서 조회 후 대시보드 ID를 복사하여 사용하거나, 기존에 사용하는 대시보드를 json 파일로 등록할 수 있습니다.
https://grafana.com/grafana/dashboards/
배포한 Grafana에 접속하여 복사한 대시보드 ID를 로드합니다.
Grafana에서 NVIDIA DCGM Exporter Dashboard를 가져오면 GPU 사용률, 전력 소비량, 메모리 사용량 등을 시각화할 수 있습니다.
값이 조회되지 않는 경우에는 편집 모드로 변경 후 Metrics browser의 메트릭 값을 복사하여 Prometheus 콘솔에서 조회되는지 확인합니다.
이제 AWS GPU 인스턴스 환경에서 NVIDIA GPU Operator를 활용하여 GPU 자원 모니터링이 가능합니다.
Kubernetes 환경에 구축된 Prometheus와 Grafana를 통해 GPU 성능 데이터를 실시간으로 수집하고 분석할 수 있습니다.
본 글에서 구축한 환경은 클라우드뿐만 아니라 On-Premise 환경에서도 활용 가능하며, 이를 통해 GPU 자원의 최적화와 운영 비용의 효율적 관리가 가능합니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.