本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
加速執行個體的分割成本分配資料範例
以下範例的目的是向您展示如何透過計算 Amazon EKS 叢集中 Kubernetes 命名空間和 Pod 的成本來計算分割成本分配資料。整個範例中使用的速率僅供說明之用。
您在一小時內有下列用量:
-
跨兩個命名空間執行四個 Pod 的單一 EC2 執行個體,您想要了解每個命名空間的成本。
-
EC2 執行個體是具有 8 個 GPU、64 個 vCPU 和 488 GB RAM 的 p3.16xlarge。
-
執行個體的攤銷成本為每小時 10 美元。
分割成本分配資料會根據 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
執行個體 | 執行個體類型 | vCPU 可用 | 可用的 GPU | ** | 可用的記憶體 | 每小時攤銷成本 | 每個 vCPU 小時的成本 | 每個 GPU 小時的成本 | 每小時每 GB 的成本 |
---|---|---|---|---|---|---|---|---|---|
執行個體 1 | p3.16xlarge | 64 | 8 | 488 | 10 美元 | 0.05 USD | 0.50 美元 | 0.005 |
步驟 2:計算已配置和未使用的容量
- 已配置容量
-
從父 EC2 執行個體配置給 Kubernetes Pod 的 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
在此範例中,執行個體具有 CPU over subscription,歸因於使用更多 GPU 和 vcpu 的 Pod 2。
Pod 名稱 | 命名空間 | vcpu 預留 | vcpu 已使用 | vcpu 已配置 | GPU 預留 | 使用的 GPU | GPU 已配置 | 記憶體預留 | 使用的記憶體 | 已配置的記憶體 |
---|---|---|---|---|---|---|---|---|---|---|
Pod 1 | 命名空間 1 | 16 | 4 | 16 | 1 | 1 | 1 | 100 | 60 | 100 |
Pod 2 | 命名空間 2 | 16 | 18 | 18 | 2 | 3 | 3 | 100 | 140 | 140 |
Pod 3 | 命名空間 1 | 16 | 4 | 16 | 2 | 1 | 2 | 100 | 60 | 100 |
Pod 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 Pod 使用的 CPU 或記憶體百分比。
- 未使用的比率
-
與 EC2 執行個體上使用的整體 CPU 或記憶體相比,Kubernetes Pod 使用的 CPU 或記憶體百分比 (即不會考慮執行個體上未使用的 CPU 或記憶體)。
相較於 EC2 執行個體上可用的整體 CPU 或記憶體,Kubernetes Pod 使用的 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
Pod 名稱 | 命名空間 | vcpu 使用率 | vcpu 分割比率 | GPU 使用率 | GPU 分割比率 | 記憶體使用率 | 記憶體分割比率 |
---|---|---|---|---|---|---|---|
Pod 1 | 命名空間 1 | 0.242 | 0 | 0.125 | 0 | 0.205 | 0.227 |
Pod 2 | 命名空間 2 | 0.277 | 0 | 0.375 | 0 | 0.287 | 0.318 |
Pod 3 | 命名空間 1 | 0.242 | 0 | 0.25 | 0 | 0.205 | 0.227 |
Pod 4 | 命名空間 2 | 0.242 | 0 | 0.25 | 0 | 0.205 | 0.227 |
未使用的 | 未使用的 | 0 | 0.098 | ||||
1 | 0 | 1 | 0 | 1 | 1 |
步驟 4:計算分割成本和未使用的成本
- 分割成本
-
根據 Kubernetes Pod 配置的 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
【注意:未使用的成本 = 未使用的使用率比率 * 資源總計 * 資源每小時成本】
Pod 名稱 | 命名空間 | 分割成本 | 未使用的成本 | 總成本 |
---|---|---|---|---|
Pod 1 | 命名空間 1 | 1.85 美元 | 0.06 美元 | 1.91 美元 |
Pod 2 | 命名空間 2 | 3.18 美元 | 0.09 美元 | 3.26 美元 |
Pod 3 | 命名空間 1 | 2.35 美元 | 0.06 美元 | 2.41 美元 |
Pod 4 | 命名空間 2 | 2.35 美元 | 0.06 美元 | 2.41 美元 |
總計 | 10 美元 |