As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Exemplo de dados de alocação de custos divididos para instâncias aceleradas
O objetivo do exemplo a seguir é mostrar como os dados de alocação de custos divididos são calculados calculando o custo do namespace e dos pods do Kubernetes nos clusters do Amazon EKS. As taxas usadas em todo o exemplo são apenas para fins ilustrativos.
Você tem o seguinte uso em uma única hora:
-
EC2 Instância única que executa quatro pods em dois namespaces, e você quer entender os custos de cada namespace.
-
A EC2 instância é p3.16xlarge com 8 GPU, 64 vCPU e 488 GB de RAM.
-
O custo amortizado da instância é de 10 USD/hora.
Os dados de alocação de custos divididos normalizam o custo por recurso com base em uma proporção relativa de GPU: (cpu: memória) de 9:1. Isso implica que uma unidade de GPU custa 9x mais do que uma unidade de CPU e memória. A CPU e a memória recebem então um peso de 9:1. Para uma EC2 instância não acelerada, o comportamento padrão atual será adotado, que é cpu: o peso da memória é padronizado para 9:1.
Etapa 1: Calcular o custo unitário
Com base nos recursos de CPU e memória da EC2 instância e usando a proporção mencionada acima, os dados de alocação de custos divididos calculam primeiro o custo unitário por GPU, vCPU-HR e GB-h.
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
Instância | Tipo de instância | vCPU disponível | GPU disponível | ** | Memória disponível | Custo amortizado por hora | Custo por hora de vCPU | Custo por hora de GPU | Custo por GB/hora |
---|---|---|---|---|---|---|---|---|---|
Instância 1 | p3.16xlarge | 64 | 8 | 488 | $10 | 0,05 USD | $0,50 | 0.005 |
Etapa 2: Calcular a capacidade alocada e não utilizada
- Capacidade alocada
-
A GPU, a vcpu e a memória alocadas para o pod Kubernetes a partir da EC2 instância principal, definidas como a capacidade máxima (reservada, usada)
- Capacidade não utilizada da instância
-
A capacidade não utilizada da GPU, vcpu e memória
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
Neste exemplo, a instância tem CPU em vez de assinatura, atribuída ao Pod 2, que usou mais GPU e vcpu do que o reservado.
Nome do pod | Namespace | vcpu reservado | vcpu Usado | vcpu alocado | GPU reservada | GPU usada | GPU alocada | Memória reservada | Memória usada | Memória alocada |
---|---|---|---|---|---|---|---|---|---|---|
Pod 1 | Namespace 1 | 16 | 4 | 16 | 1 | 1 | 1 | 100 | 60 | 100 |
Pod 2 | Namespace 2 | 16 | 18 | 18 | 2 | 3 | 3 | 100 | 140 | 140 |
Pod 3 | Namespace 1 | 16 | 4 | 16 | 2 | 1 | 2 | 100 | 60 | 100 |
Cápsula 4 | Namespace 2 | 16 | 4 | 16 | 2 | 2 | 2 | 100 | 40 | 100 |
Não utilizado | Não utilizado | 0 | 34 | 0 | 1 | 1 | 0 | 88 | 188 | 48 |
*** | 64 | 32 | 66 | 8 | 8 | 8 | 488 | 488 | 488 |
Etapa 3: Calcular as taxas divididas de uso e utilização
- Taxa de uso dividida
-
A porcentagem de CPU ou memória usada pelo pod do Kubernetes em comparação com a CPU ou a memória geral disponível na instância. EC2
- Proporção não utilizada
-
A porcentagem de CPU ou memória usada pelo pod Kubernetes em comparação com a CPU ou memória geral usada na EC2 instância (ou seja, sem considerar a CPU ou a memória não utilizadas na instância).
A porcentagem de CPU ou memória usada pelo Kubernetes Pod em comparação com a CPU ou a memória geral disponível na instância. EC2
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
Nome do pod | Namespace | Utilização de vcpu | Proporção de divisão de vcpu | Utilização da GPU | Proporção de divisão da GPU | Utilização de memória | Taxa de divisão de memória |
---|---|---|---|---|---|---|---|
Pod 1 | Namespace 1 | 0,242 | 0 | 0.125 | 0 | 0,205 | 0.227 |
Pod 2 | Namespace 2 | 0,277 | 0 | 0,375 | 0 | 0,287 | 0,318 |
Pod 3 | Namespace 1 | 0,242 | 0 | 0.25 | 0 | 0,205 | 0.227 |
Cápsula 4 | Namespace 2 | 0,242 | 0 | 0.25 | 0 | 0,205 | 0.227 |
Não utilizado | Não utilizado | 0 | 0,098 | ||||
1 | 0 | 1 | 0 | 1 | 1 |
Etapa 4: Calcular o custo dividido e os custos não utilizados
- Custo dividido
-
A alocação do custo de pagamento por uso do custo da EC2 instância com base no uso alocado de CPU e memória pelos pods do Kubernetes
- Custo da instância não utilizada
-
O custo dos recursos de CPU ou memória não utilizados na instância
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
[Nota: custo não utilizado = taxa de uso não utilizada * Recurso total * custo por hora do recurso]
Nome do pod | Namespace | Custo dividido | Custo não utilizado | Custo total |
---|---|---|---|---|
Pod 1 | Namespace 1 | $1,85 | US$ 0,06 | $1,91 |
Pod 2 | Namespace 2 | $3,18 | 0,09 US$ | $3,26 |
Pod 3 | Namespace 1 | $2,35 | US$ 0,06 | $2,41 |
Cápsula 4 | Namespace 2 | $2,35 | US$ 0,06 | $2,41 |
Total | $10 |