Esta página fornece instruções sobre como aumentar a utilização e reduzir os custos através da execução de GPUs de várias instâncias. Com esta configuração, particiona uma unidade de processamento de gráficos (GPU) NVIDIA A100, H100, H200, B200 ou GB200 para partilhar uma única GPU em vários contentores no Google Kubernetes Engine (GKE).
Antes de ler esta página, certifique-se de que conhece os conceitos do Kubernetes, como pods, nós, implementações> e namespaces e que conhece os conceitos do GKE, como node pools, escala automática> e aprovisionamento automático.
Introdução
O Kubernetes atribui uma GPU completa por contentor, mesmo que o contentor apenas precise de uma fração da GPU para a respetiva carga de trabalho, o que pode levar ao desperdício de recursos e ao excesso de custos, especialmente se estiver a usar a geração mais recente de GPUs potentes. Para melhorar a utilização da GPU, as GPUs multi-instância permitem-lhe dividir uma única GPU suportada em até sete partes. Cada fatia pode ser atribuída a um contentor no nó de forma independente, para um máximo de sete contentores por GPU. As GPUs multi-instância oferecem isolamento de hardware entre as cargas de trabalho e QoS consistente e previsível para todos os contentores em execução na GPU.
Para aplicações CUDA®, as GPUs de várias instâncias são amplamente transparentes. Cada partição da GPU aparece como um recurso de GPU normal e o modelo de programação permanece inalterado.
Para mais informações sobre GPUs de várias instâncias, consulte o guia do utilizador de GPUs de várias instâncias da NVIDIA.
GPUs suportadas
Os seguintes tipos de GPUs suportam GPUs multi-instância:
- NVIDIA A100 (40GB)
- NVIDIA A100 (80GB)
- NVIDIA H100 (80GB)
- NVIDIA H200 (141GB)
- NVIDIA B200 (180 GB) (1.32.2-gke.1586000 e posterior)
- NVIDIA GB200 (1.33.0-gke.1636000 e posterior)
Partições de GPU multi-instância
Cada GPU A100, H100, H200, B200 e GB200 consiste em sete unidades de computação e oito unidades de memória, que pode dividir em instâncias de GPU de vários tamanhos. Para configurar os tamanhos das partições da GPU, use a seguinte sintaxe:
[compute]g.[memory]gb
. Por exemplo, um tamanho de partição da GPU de 1g.5gb
refere-se a uma instância de GPU com uma unidade de computação (1/7 dos multiprocessadores de streaming na GPU) e uma unidade de memória (5 GB). Pode especificar o tamanho da partição para as GPUs quando implementa uma carga de trabalho do Autopilot ou quando cria um cluster padrão.
A tabela de partição no guia do utilizador da GPU multi-instância da NVIDIA lista todos os diferentes tamanhos de partição da GPU, juntamente com a quantidade de recursos de computação e memória disponíveis em cada partição da GPU. A tabela também mostra o número de instâncias de GPU para cada tamanho de partição que pode ser criado na GPU.
A tabela seguinte indica os tamanhos de partições suportados pelo GKE:
Tamanho da partição | Instâncias de GPU |
---|---|
GPU: NVIDIA A100 (40GB) (nvidia-tesla-a100 ) |
|
1g.5gb |
7 |
2g.10gb |
3 |
3g.20gb |
2 |
7g.40gb |
1 |
GPU: NVIDIA A100 (80GB) (nvidia-a100-80gb ) |
|
1g.10gb |
7 |
2g.20gb |
3 |
3g.40gb |
2 |
7g.80gb |
1 |
GPU: NVIDIA H100 (80 GB) (nvidia-h100-80gb e nvidia-h100-mega-80gb ) |
|
1g.10gb |
7 |
1g.20gb |
4 |
2g.20gb |
3 |
3g.40gb |
2 |
7g.80gb |
1 |
GPU: NVIDIA H200 (141GB) (nvidia-h200-141gb ) |
|
1g.18gb |
7 |
1g.35gb |
4 |
2g.35gb |
3 |
3g.71gb |
2 |
4g.71gb |
1 |
7g.141gb |
1 |
GPU: NVIDIA B200 (nvidia-b200 ) |
|
1g.23gb |
7 |
1g.45gb |
4 |
2g.45gb |
3 |
3g.90gb |
2 |
4g.90gb |
1 |
7g.180gb |
1 |
GPU: NVIDIA GB200 (nvidia-gb200 ) |
|
1g.23gb |
7 |
1g.47gb |
4 |
2g.47gb |
3 |
3g.93gb |
2 |
4g.93gb |
1 |
7g.186gb |
1 |
Cada GPU em cada nó num conjunto de nós é particionada da mesma forma. Por exemplo, considere um conjunto de nós com dois nós, quatro GPUs em cada nó e um tamanho de partição de 1g.5gb
. O GKE cria sete partições de tamanho
1g.5gb
em cada GPU. Uma vez que existem quatro GPUs em cada nó, existem 28
1g.5gb
partições de GPU disponíveis em cada nó. Uma vez que existem dois nós no conjunto de nós, estão disponíveis um total de 56 partições de GPU 1g.5gb
em todo o conjunto de nós.
Para criar um cluster padrão do GKE com mais do que um tipo de partição de GPU, tem de criar vários pools de nós. Por exemplo, se quiser nós com partições de GPU 1g.5gb
e 3g.20gb
num cluster, tem de criar dois conjuntos de nós: um com o tamanho da partição de GPU definido como 1g.5gb
e o outro com 3g.20gb
.
Um cluster do GKE Autopilot cria automaticamente nós com a configuração de partição correta quando cria cargas de trabalho que requerem tamanhos de partição diferentes.
Cada nó é etiquetado com o tamanho das partições da GPU disponíveis no nó. Esta etiquetagem permite que as cargas de trabalho segmentem nós com o tamanho da partição da GPU necessário. Por exemplo, num nó com 1g.5gb
instâncias de GPU, o nó é etiquetado como:
cloud.google.com/gke-gpu-partition-size=1g.5gb
Como funciona
Para usar GPUs multi-instância, execute as seguintes tarefas:
- Crie um cluster com GPUs de várias instâncias ativadas.
- Instalar manualmente os controladores.
- Verifique quantos recursos de GPU estão no nó.
- Implemente contentores com GPUs de várias instâncias.
Preços
As GPUs de várias instâncias são exclusivas das GPUs A100, H100, H200, B200 e GB200 e estão sujeitas aos preços das GPUs correspondentes, além de quaisquer outros produtos usados para executar as suas cargas de trabalho. Só pode anexar GPUs inteiras a nós no seu cluster para a partição. Para informações sobre os preços das GPUs, consulte a página Preços das GPUs.
Limitações
- A utilização de partições de GPU de várias instâncias com o GKE não é recomendada para cargas de trabalho não fidedignas.
- O dimensionamento automático e a administração de contas automática de partições de GPU são totalmente suportados na versão 1.20.7-gke.400 ou posterior do GKE. Nas versões anteriores, apenas os conjuntos de nós com, pelo menos, um nó podem ser dimensionados automaticamente com base na procura de tamanhos de partições de GPU específicos dos cargas de trabalho.
- As métricas de utilização da GPU (por exemplo,
duty_cycle
) não estão disponíveis para GPUs de várias instâncias. - A multi-instância divide uma GPU física em instâncias discretas, cada uma das quais está isolada das outras ao nível do hardware. Um contentor que usa uma instância de GPU com várias instâncias só pode aceder aos recursos de CPU e memória disponíveis para essa instância.
- Um agrupamento só pode consumir até uma instância de GPU multi-instância.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
- No Autopilot, as GPUs de várias instâncias são suportadas na versão 1.29.3-gke.1093000 e posteriores do GKE.
- Tem de ter uma quota de GPU NVIDIA A100 suficiente. Consulte o artigo Pedir um aumento da quota.
- Se quiser usar GPUs de várias instâncias com o Autopilot, pode saber mais sobre a utilização de GPUs com o Autopilot em Implemente cargas de trabalho de GPU no Autopilot.
- O GKE atribui a classe de computação
Accelerator
a todas as cargas de trabalho de GPU de várias instâncias em clusters do Autopilot.
Crie um cluster com GPUs multi-instância ativadas
Se usar o GKE Standard, tem de ativar as GPUs de várias instâncias no cluster. Os clusters do Autopilot que executam a versão 1.29.3-gke.1093000 e posteriores ativam as GPUs de várias instâncias por predefinição. Para usar GPUs de várias instâncias no Autopilot, consulte a secção Implemente contentores com uma GPU de várias instâncias desta página.
Quando cria um cluster padrão com GPUs de várias instâncias, tem de especificar gpuPartitionSize
juntamente com acceleratorType
e acceleratorCount
.
O acceleratorType
tem de ser nvidia-tesla-a100
, nvidia-a100-80gb
,
nvidia-h100-80gb
, nvidia-h200-141gb
, nvidia-b200
ou nvidia-gb200
.
O exemplo seguinte mostra como criar um cluster do GKE com um nó e sete partições de GPU de tamanho 1g.5gb
no nó. Os outros passos nesta página usam um tamanho de partição da GPU de 1g.5gb
, o que cria sete partições em cada GPU. Também pode usar qualquer um dos tamanhos de partição de GPU suportados mencionados anteriormente.
Pode usar a Google Cloud CLI ou o Terraform.
gcloud
Crie um cluster com GPUs multi-instância ativadas:
gcloud container clusters create CLUSTER_NAME \
--project=PROJECT_ID \
--location CONTROL_PLANE_LOCATION \
--cluster-version=CLUSTER_VERSION \
--accelerator type=nvidia-tesla-a100,count=1,gpu-partition-size=1g.5gb,gpu-driver-version=DRIVER_VERSION \
--machine-type=a2-highgpu-1g \
--num-nodes=1
Substitua o seguinte:
CLUSTER_NAME
: o nome do novo cluster.PROJECT_ID
: o ID do seu projeto Google Cloud .CONTROL_PLANE_LOCATION
: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.CLUSTER_VERSION
: a versão tem de ser1.19.7-gke.2503
ou posterior.DRIVER_VERSION
: a versão do controlador NVIDIA a instalar. Pode ser uma das seguintes opções:default
: instale a versão predefinida do controlador para a sua versão do GKE.latest
: instale a versão do controlador mais recente disponível para a sua versão do GKE. Disponível apenas para nós que usam o SO otimizado para contentores.disabled
: ignorar a instalação automática de controladores. Tem de instalar manualmente um controlador depois de criar o cluster. Se omitirgpu-driver-version
, esta é a opção predefinida.
Terraform
Para criar um cluster com GPUs de várias instâncias ativadas através do Terraform, consulte o seguinte exemplo:
Para saber mais sobre a utilização do Terraform, consulte o artigo Compatibilidade do Terraform com o GKE.
Estabeleça ligação ao cluster
Configure o kubectl
para se ligar ao cluster recém-criado:
gcloud container clusters get-credentials CLUSTER_NAME
Instale controladores
Se optou por desativar a instalação automática de controladores quando criou o cluster, ou se estiver a executar uma versão do GKE anterior à 1.27.2-gke.1200, tem de instalar manualmente um controlador NVIDIA compatível após a conclusão da criação. As GPUs de várias instâncias requerem a versão 450.80.02 ou posterior do controlador da NVIDIA.
Após a instalação do controlador, o modo de GPU multi-instância é ativado. Se tiver instalado os controladores automaticamente, os seus nós são reiniciados quando o plug-in do dispositivo GPU começa a criar partições de GPU. Se instalou manualmente os controladores, os nós são reiniciados quando a instalação dos controladores estiver concluída. O reinício pode demorar alguns minutos a ser concluído.
Verifique quantos recursos de GPU estão no nó
Execute o seguinte comando para verificar se a capacidade e a quantidade atribuível de recursos nvidia.com/gpu
são 7:
kubectl describe nodes
Segue-se o resultado do comando:
...
Capacity:
...
nvidia.com/gpu: 7
Allocatable:
...
nvidia.com/gpu: 7
Implemente contentores com GPU de várias instâncias
Pode implementar até um contentor por dispositivo de GPU com várias instâncias no nó. Neste exemplo, com um tamanho de partição de 1g.5gb
, existem sete partições de GPU de várias instâncias disponíveis no nó. Como resultado, pode implementar até sete contentores que pedem GPUs neste nó.
Segue-se um exemplo que inicia o contentor
cuda:11.0.3-base-ubi7
e executanvidia-smi
para imprimir o UUID da GPU no contentor. Neste exemplo, existem sete contentores e cada contentor recebe uma partição de GPU. Este exemplo também define o seletor de nós para segmentar nós com partições de GPU.cloud.google.com/gke-gpu-partition-size
1g.5gb
Piloto automático
kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: cuda-simple spec: replicas: 7 selector: matchLabels: app: cuda-simple template: metadata: labels: app: cuda-simple spec: nodeSelector: cloud.google.com/gke-gpu-partition-size: 1g.5gb cloud.google.com/gke-accelerator: nvidia-tesla-a100 cloud.google.com/gke-accelerator-count: "1" containers: - name: cuda-simple image: nvidia/cuda:11.0.3-base-ubi7 command: - bash - -c - | /usr/local/nvidia/bin/nvidia-smi -L; sleep 300 resources: limits: nvidia.com/gpu: 1 EOF
Este manifesto faz o seguinte:
- Pede o
nvidia-tesla-a100
tipo de GPU definindo o seletor de nóscloud.google.com/gke-accelerator
. - Divide a GPU no tamanho da partição
1g.5gb
. - Anexa uma única GPU ao nó definindo o
seletor de nós
cloud.google.com/gke-accelerator-count
.
Standard
kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: cuda-simple spec: replicas: 7 selector: matchLabels: app: cuda-simple template: metadata: labels: app: cuda-simple spec: nodeSelector: cloud.google.com/gke-gpu-partition-size: 1g.5gb containers: - name: cuda-simple image: nvidia/cuda:11.0.3-base-ubi7 command: - bash - -c - | /usr/local/nvidia/bin/nvidia-smi -L; sleep 300 resources: limits: nvidia.com/gpu: 1 EOF
Este manifesto faz o seguinte:
- Pede uma única GPU com o tamanho da partição
1g.5gb
.
- Pede o
Verifique se todos os sete pods estão em execução:
kubectl get pods
Segue-se o resultado do comando:
NAME READY STATUS RESTARTS AGE cuda-simple-849c47f6f6-4twr2 1/1 Running 0 7s cuda-simple-849c47f6f6-8cjrb 1/1 Running 0 7s cuda-simple-849c47f6f6-cfp2s 1/1 Running 0 7s cuda-simple-849c47f6f6-dts6g 1/1 Running 0 7s cuda-simple-849c47f6f6-fk2bs 1/1 Running 0 7s cuda-simple-849c47f6f6-kcv52 1/1 Running 0 7s cuda-simple-849c47f6f6-pjljc 1/1 Running 0 7s
Veja os registos para ver o UUID da GPU, usando o nome de qualquer pod do comando anterior:
kubectl logs cuda-simple-849c47f6f6-4twr2
Segue-se o resultado do comando:
GPU 0: A100-SXM4-40GB (UUID: GPU-45eafa61-be49-c331-f8a2-282736687ab1) MIG 1g.5gb Device 0: (UUID: MIG-GPU-45eafa61-be49-c331-f8a2-282736687ab1/11/0)
O que se segue?
- Saiba mais sobre as GPUs.
- Saiba como configurar a partilha de tempo em GPUs.
- Saiba mais sobre a multilocação de clusters.
- Saiba mais acerca das práticas recomendadas para a multilocação empresarial.