가속화된 인스턴스에 대한 분할 비용 할당 데이터의 예제
다음 예제의 목적은 Amazon EKS 클러스터의 Kubernetes 네임스페이스 및 포드의 비용을 계산하여 분할 비용 할당 데이터를 계산하는 방법을 보여주는 것입니다. 예제 전체에서 사용된 요금은 설명 목적으로만 사용됩니다.
한 시간 동안 다음과 같은 사용량이 발생합니다.
-
두 네임스페이스에서 포드 4개를 실행 중이며 각 네임스페이스의 비용을 이해하고자 하는 단일 EC2 인스턴스입니다.
-
EC2 인스턴스는 8개의 GPU, 64개의 vCPU 및 488GB RAM이 있는 p3.16xlarge입니다.
-
인스턴스의 분할 상환 비용은 시간당 10 USD입니다.
분할 비용 할당 데이터는 9:1의 GPU:(cpu: 메모리) 상대 비율을 기반으로 리소스당 비용을 정규화합니다. 즉, GPU 단위의 비용은 CPU 및 메모리 단위의 9배입니다. 그런 다음 CPU와 메모리에 9:1의 가중치가 할당됩니다. 가속화되지 않은 EC2 인스턴스의 경우, 현재 기본 동작이 채택되며 cpu: 메모리 가중치 기본값은 9:1입니다.
1단계: 단위 비용 계산
EC2 인스턴스의 cpu 및 메모리 리소스를 기반으로 하고 위에서 언급한 비율을 사용하여, 분할 비용 할당 데이터는 먼저 GPU당, vCPU-hr 및 GB-hr 단위 비용을 계산합니다.
GPU-Weight =9
GPU+Memory-Weight =1
CPU-Weight=1*.9=.9
Memory-Weight=1*0.1=0.1
Hourly-Instance-Cost=$10
GPU-Available=8
Memory-Available=488
CPU-Available=64
UnitCostPerResource = Hourly-Instance-Cost/(( GPU-Weight * GPU-Available) + (Memory-Weight * Memory-Available) + (CPU-Weight * CPU-Available))
= $10/((9*8gpu)+ (0.1 * 488GB) + (.9 * 64vcpu)) = $0.056
Cost-per-GPU-Hour = GPU-Weight * UnitCostPerResource = 9 * $0.056 = $0.504
Cost-per-vcpu-Hour = CPU-Weight * UnitCostPerResource = .9 * $0.056 = $0.05
Cost-per-GB-Hour = Memory-Weight * UnitCostPerResource = .1 * $0.056 = $0.00506
| Instance | 인스턴스 유형 | vCPU 사용 가능 | GPU 사용 가능 | ** | 사용할 수 있는 메모리 | 시간당 분할 상환 비용 | vCPU 시간당 비용 | GPU 시간당 비용 | GB 시간당 비용 |
|---|---|---|---|---|---|---|---|---|---|
| 인스턴스 1 | p3.16xlarge | 64 | 8 | 488 | 10 USD | 0.05 USD | 0.50 USD | 0.005 |
2단계: 할당 및 미사용 용량 계산
- 할당된 용량
-
상위 EC2 인스턴스에서 Kubernetes 포드에 할당된 GPU, vCPU 및 메모리는 예약 용량, 사용된 용량 중 최대값으로 정의됩니다.
- 인스턴스 미사용 용량
-
GPU, vcpu 및 메모리의 미사용 용량
Pod1-Allocated-GPU = Max (1 GPU, 1 GPU) = 1 GPU
Pod1-Allocated-vcpu = Max (16 vcpu, 4 vcpu) = 16 vcpu
Pod1-Allocated-Memory = Max (100 GB, 60 GB) = 100 GB
Instance-Unused-GPU = Max (GPU-Available - SUM(Allocated-vcpu), 0)
= Max (8 – 8, 0) = 0
Instance-Unused-vcpu = Max (CPU-Available - SUM(Allocated-vcpu), 0)
= Max (16 – 18, 0) = 0
Instance-Unused-Memory = Max (Memory-Available - SUM(Allocated-Memory), 0)
= Max (488 – 440, 0) = 48 GB
이 예제에서 인스턴스는 예약된 양보다 더 많은 GPU와 vCPU를 사용한 포드 2로 인해 CPU 초과 구독을 사용하고 있습니다.
| 포드 이름 | 네임스페이스 | vcpu 예약 | vcpu 사용 | vcpu 할당 | GPU 예약 | GPU 사용 | GPU 할당 | 메모리 예약 | 메모리 사용 | 메모리 할당 |
|---|---|---|---|---|---|---|---|---|---|---|
| 포드 1 | 네임스페이스 1 | 16 | 4 | 16 | 1 | 1 | 1 | 100 | 60 | 100 |
| 포드 2 | 네임스페이스 2 | 16 | 18 | 18 | 2 | 3 | 3 | 100 | 140 | 140 |
| 포드 3 | 네임스페이스 1 | 16 | 4 | 16 | 2 | 1 | 2 | 100 | 60 | 100 |
| 포드 4 | 네임스페이스 2 | 16 | 4 | 16 | 2 | 2 | 2 | 100 | 40 | 100 |
| 미사용 | 미사용 | 0 | 34 | 0 | 1 | 1 | 0 | 88 | 188 | 48 |
| *** | 64 | 32 | 66 | 8 | 8 | 8 | 488 | 488 | 488 |
3단계: 분할 사용률 및 사용률 계산
- 분할 사용률
-
EC2 인스턴스에서 사용 가능한 전체 CPU 또는 메모리 대비 Kubernetes 포드에 사용된 CPU 또는 메모리의 비율입니다.
- 미사용 비율
-
EC2 인스턴스에서 사용된 전체 CPU 또는 메모리 대비 Kubernetes 포드에 사용된 CPU 또는 메모리의 백분율(즉, 인스턴스의 미사용 CPU 또는 메모리를 고려하지 않음)입니다.
EC2 인스턴스에서 사용 가능한 전체 CPU 또는 메모리 대비 Kubernetes 포드에 사용된 CPU 또는 메모리의 비율입니다.
Pod1-GPU-Utilization-Ratio = Allocated-GPU / Total-GPU
= 1 gpu / 8 gpu = 0.125
Pod1-vcpu-Utilization-Ratio = Allocated-vcpu / Total-vcpu
= 16 vcpu / 66 vcpu = 0.24
Pod1-Memory-Utilization-Ratio = Allocated-GB / Total-GB
= 100 GB/ 488GB = 0.205
Pod1-GPU-Split-Ratio = Pod1-GPU-Utilization-Ratio / (Total-GPU-Utilization-Ratio – Instance-Unused-GPU). Set to 0 if Instance-Unused-GPU = 0
= 0 since Instance-Unused-GPU is 0
Pod1-vcpu-Split-Ratio = Pod1-CPU-Utilization-Ratio / (Total-CPU-Utilization-Ratio – Instance-Unused-CPU). Set to 0 if Instance-Unused-CPU = 0
= 0 since Instance-Unused-CPU is 0
Pod1-Memory-Split-Ratio = Pod-Memory-Utilization-Ratio / (Total-Utilization-Ratio – Instance-Unused-Memory). Set to 0 if Instance-Unused-Memory = 0
= 0.204/ (1-0.102) = 0.227
| 포드 이름 | 네임스페이스 | vcpu 사용률 | vcpu 분할 비율 | GPU 사용률 | GPU 분할 비율 | 메모리 사용률 | 메모리 분할 비율 |
|---|---|---|---|---|---|---|---|
| 포드 1 | 네임스페이스 1 | 0.242 | 0 | 0.125 | 0 | 0.205 | 0.227 |
| 포드 2 | 네임스페이스 2 | 0.277 | 0 | 0.375 | 0 | 0.287 | 0.318 |
| 포드 3 | 네임스페이스 1 | 0.242 | 0 | 0.25 | 0 | 0.205 | 0.227 |
| 포드 4 | 네임스페이스 2 | 0.242 | 0 | 0.25 | 0 | 0.205 | 0.227 |
| 미사용 | 미사용 | 0 | 0.098 | ||||
| 1 | 0 | 1 | 0 | 1 | 1 |
4단계: 분할 비용 및 미사용 비용 계산
- 비용 분할
-
Kubernetes 포드에 할당된 CPU 및 메모리 사용량을 기준으로 EC2 인스턴스 비용을 할당하는 용도입니다.
- 미사용 인스턴스 비용
-
인스턴스에서 미사용 CPU 또는 메모리 리소스의 비용입니다.
Pod1-Split-Cost = (Pod1-GPU-Utilization-Ratio * GPU-Available * Cost per GPU-Hour) + (Pod1-vcpu-Utilization-Ratio * vcpu-Available * Cost per vcpu-Hour) + (Pod1-Memory-Utilization-Ratio * Memory-Available * Cost per GB-Hour)
= (.125*8gpu*$0.504) + (0.242 * 64 vcpu * $0.05) + (0.204 * 488GB * $0.00506) = 0.504+ 0.774 + 0.503 = $1.85
Pod1-Unused-Cost = (GPU-Split-Ratio * Unused-Cost) + (vcpu-Split-Ratio * Unused-Cost) + (Memory-Split-Ratio * Unused-Cost)
= (0*0*8*$0.504) + (0 * $0.05) + (0.227 *.102*488GB*$.00506) = $0.06
Pod1-Total-Split-Cost = Pod1-Split-Cost + Pod1-Unused-Cost = $1.85 + $0.06 = $1.91
[참고: 미사용 비용 = 미사용 사용률 * 총 리소스 * 리소스 시간당 비용]
| 포드 이름 | 네임스페이스 | 비용 분할 | 미사용 비용 | 총 비용 |
|---|---|---|---|---|
| 포드 1 | 네임스페이스 1 | 1.85 USD | 0.06 USD | 1.91 USD |
| 포드 2 | 네임스페이스 2 | 3.18 USD | 0.09 USD | 3.26 USD |
| 포드 3 | 네임스페이스 1 | 2.35 USD | 0.06 USD | 2.41 USD |
| 포드 4 | 네임스페이스 2 | 2.35 USD | 0.06 USD | 2.41 USD |
| 합계 | 10 USD |