加速型实例的拆分成本分配数据示例 - AWS Data Exports

加速型实例的拆分成本分配数据示例

以下示例的目的是,向您说明如何计算 Amazon EKS 集群中的 Kubernetes 命名空间和容器组(pod)的成本,从而计算拆分成本分配数据。在整个示例中使用的费率仅用于说明目的。

您在一小时内具有以下使用量:

  • 您拥有在两个命名空间中运行四个容器组(pod)的单个 EC2 实例,并且想要了解每个命名空间的成本。

  • EC2 实例是 p3.16xlarge,有 8 个 GPU、64 个 vCPU 和 488 GB RAM。

  • 实例的摊销成本为 10 美元/小时。

拆分成本分配数据根据 GPU:(CPU:内存)的相对比率为 9:1,对每个资源的成本进行标准化分摊。这意味着,一个单位的 GPU 成本高达 CPU 和内存单位成本的 9 倍。然后将 CPU 和内存的权重分配为 9:1。对于非加速型 EC2 实例,将采用当前的默认行为,即 CPU:内存权重默认为 9:1。

步骤 1:计算单位成本

根据 EC2 实例上的 CPU 和内存资源,并使用上述比率,拆分成本分配数据先计算每个 GPU、每 vCPU 小时和每 GB 小时的单位成本。

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

表 1:单位成本计算
实例 实例类型 可用 vCPU 可用 GPU ** 可用内存 每小时摊销成本 每 vCPU 小时成本 每 GPU 小时成本 每 GB 小时成本
实例 1 p3.16xlarge 64 8 488 10 美元 0.05 美元 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,这是由于容器组(pod)2 实际使用的 GPU 和 vCPU 数量超过了预留数量。

表 2:计算已分配容量和未使用的容量
容器组(pod)名称 命名空间 预留的 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:计算拆分使用率和利用率

拆分使用率

Kubernetes 容器组(pod)使用的 CPU 或内存占 EC2 实例上提供的总体 CPU 或内存的百分比。

未使用率

Kubernetes 容器组(pod)使用的 CPU 或内存占 EC2 实例上使用的总体 CPU 或内存的百分比(即,不考虑实例上未使用的 CPU 或内存)。

Kubernetes 容器组(pod)使用的 CPU 或内存占 EC2 实例上提供的总体 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

表 3:计算利用率
容器组(pod)名称 命名空间 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:计算拆分成本和未使用成本

拆分成本

EC2 实例成本的按使用付费成本分配,基于 Kubernetes 容器组(pod)使用的分配 CPU 和内存。

未使用实例成本

实例上未使用的 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

[注意:未使用成本 = 未使用的利用率 * 总资源量 * 资源每小时成本]

表 4 - 每小时针对集群内运行的所有容器组(pod)计算得出的拆分成本和未使用成本摘要
容器组(pod)名称 命名空间 拆分成本 未使用成本 总成本
容器组 1 命名空间 1 1.85 美元 0.06 美元 1.91 美元
容器组 2 命名空间 2 3.18 美元 0.09 美元 3.26 美元
容器组 3 命名空间 1 2.35 美元 0.06 美元 2.41 美元
容器组 4 命名空间 2 2.35 美元 0.06 美元 2.41 美元
Total 10 美元