Nesta página, descrevemos como configurar suas cargas de trabalho de GPU para usar a alocação dinâmica de recursos nos clusters bare metal do Google Distributed Cloud. A alocação dinâmica de recursos é uma API do Kubernetes que permite solicitar e compartilhar recursos genéricos, como GPUs, entre pods e contêineres. Os drivers de terceiros gerenciam esses recursos.
Com a alocação dinâmica de recursos, o Kubernetes programa pods com base na configuração do dispositivo referenciado. Os operadores de apps não precisam selecionar nós específicos nas cargas de trabalho nem garantir que cada pod solicite exatamente o número de dispositivos conectados a esses nós. Esse processo é semelhante à alocação de volumes para armazenamento.
Esse recurso ajuda você a executar cargas de trabalho de IA alocando de forma dinâmica e precisa os recursos de GPU nos clusters bare metal, melhorando a utilização e o desempenho dos recursos para cargas de trabalho exigentes.
Esta página é destinada a administradores, arquitetos e operadores que gerenciam o ciclo de vida da infraestrutura de tecnologia subjacente. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Google Cloud , consulte Funções e tarefas de usuário comuns do GKE Enterprise.
Antes de começar
Antes de configurar suas cargas de trabalho de GPU para usar a alocação dinâmica de recursos, verifique se os seguintes pré-requisitos foram atendidos:
- O cluster bare metal está na versão 1.33.0 ou mais recente.
- Seu sistema operacional é o Ubuntu 22.04 ou o Red Hat Enterprise Linux (RHEL) 9.4.
- Você atualizou o cluster para ativar a alocação dinâmica de recursos, conforme descrito em Ativar a alocação dinâmica de recursos.
- Você tem pelo menos uma máquina de nó com uma GPU anexada e o driver da GPU NVIDIA instalado. Para mais informações, consulte Instalar ou desinstalar o NVIDIA GPU Operator agrupado.
- Você seguiu as instruções em Driver DRA da NVIDIA para GPUs para instalar o driver DRA da NVIDIA em todos os nós conectados à GPU.
Criar cargas de trabalho de GPU que usam alocação dinâmica de recursos
Para que suas cargas de trabalho de GPU aproveitem a alocação dinâmica de recursos para solicitar GPUs, elas precisam
estar em um namespace compartilhado com um ResourceClaim
que descreve a solicitação de
alocação de dispositivos de GPU. Suas cargas de trabalho precisam fazer referência ao ResourceClaim
para que o
Kubernetes atribua recursos de GPU.
As etapas a seguir configuram um ambiente em que suas cargas de trabalho usam a alocação dinâmica de recursos para solicitar recursos de GPU:
Para criar recursos relacionados à alocação dinâmica de recursos, crie um novo
Namespace
no cluster:cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Namespace metadata: name: NAMESPACE_NAME EOF
Substitua:
CLUSTER_KUBECONFIG
: o caminho do arquivo kubeconfig do cluster de usuário.NAMESPACE_NAME
com o nome do namespace de alocação dinâmica de recursos.
Crie um
ResourceClaim
para descrever a solicitação de acesso à GPU:cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: resource.k8s.io/v1beta1 kind: ResourceClaim metadata: namespace: NAMESPACE_NAME name: RESOURCE_CLAIM_NAME spec: devices: requests: - name: gpu deviceClassName: gpu.nvidia.com EOF
Substitua
RESOURCE_CLAIM_NAME
pelo nome da declaração de recurso para solicitações de GPU.Crie cargas de trabalho que referenciem o
ResourceClaim
criado na etapa anterior.Os exemplos de carga de trabalho a seguir mostram como referenciar um
ResourceClaim
chamadogpu-claim
no namespacedra-test
. Os contêineres no podpod1
são exemplos de arquitetura de dispositivo de computação unificada (CUDA) da NVIDIA projetados para executar cargas de trabalho CUDA nas GPUs. Quando o podpod1
é concluído com êxito, isso indica que a capacidade de alocação dinâmica de recursos está funcionando corretamente e que ela está pronta para gerenciar recursos de GPU no cluster.Ubuntu
Use o comando a seguir para aplicar o manifesto ao cluster:
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
RHEL
Faça o download e instale o módulo de política do SELinux
nvidia_container_t
, que é necessário para acessar GPUs.Para mais informações, consulte o repositório dgx-selinux da NVIDIA.
Use o comando a seguir para aplicar o manifesto ao cluster:
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure securityContext: seLinuxOptions: type: nvidia_container_t resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
Limitações
Considere as seguintes limitações ao usar a alocação dinâmica de recursos:
Ao usar o SO RHEL, a política do SELinux pode interferir em contêineres que tentam acessar GPUs. Para mais informações, consulte Como usar GPUs em contêineres no RHEL 8 bare metal.
Esse recurso usa o grupo de APIs
resource.k8s.io/v1beta1
, que é diferente do grupo de APIs Kubernetes de código aberto para esse recurso,resource.k8s.io/v1
. O grupo de APIs de código abertov1
oferece mais recursos e melhor estabilidade do que o grupo de APIsv1beta1
.
A seguir
- Consulte a documentação do Kubernetes para mais informações sobre alocação dinâmica de recursos.
- Saiba como veicular LLMs de terceiros em bare metal.