É possível ativar e gerenciar recursos de unidade de processamento gráfico (GPU) nos seus contêineres. Por exemplo, talvez você prefira executar notebooks de inteligência artificial (IA) e machine learning (ML) em um ambiente de GPU. Para executar cargas de trabalho de contêineres de GPU, é necessário ter um cluster do Kubernetes compatível com dispositivos de GPU. O suporte a GPU é ativado por padrão para clusters do Kubernetes que têm máquinas de GPU provisionadas para eles.
Antes de começar
Para implantar GPUs nos contêineres, você precisa ter o seguinte:
Um cluster do Kubernetes com uma classe de máquina de GPU. Confira a seção placas de GPU compatíveis para ver opções de configuração para as máquinas do cluster.
O papel de visualizador de nós do cluster de usuário (
user-cluster-node-viewer
) para verificar GPUs e o papel de administrador do namespace (namespace-admin
) para implantar cargas de trabalho de GPU no namespace do projeto.O caminho kubeconfig para o servidor da API de gerenciamento zonal que hospeda seu cluster do Kubernetes. Faça login e gere o arquivo kubeconfig se você não tiver um.
O caminho kubeconfig do cluster de infraestrutura da organização na zona destinada a hospedar suas GPUs. Faça login e gere o arquivo kubeconfig se você não tiver um.
O nome do cluster do Kubernetes. Peça essas informações ao administrador da plataforma se você não as tiver.
O caminho do kubeconfig do cluster do Kubernetes. Faça login e gere o arquivo kubeconfig se você não tiver um.
Configurar um contêiner para usar recursos de GPU
Para usar essas GPUs em um contêiner, siga estas etapas:
Verifique se o cluster do Kubernetes tem pools de nós que oferecem suporte a GPUs:
kubectl describe nodepoolclaims -n KUBERNETES_CLUSTER_NAME \ --kubeconfig ORG_INFRASTRUCTURE_CLUSTER
A saída relevante é semelhante ao seguinte snippet:
Spec: Machine Class Name: a2-ultragpu-1g-gdc Node Count: 2
Para uma lista completa de tipos de máquinas com GPU e perfis de GPU de várias instâncias (MIG) compatíveis, consulte Tipos de máquinas de nós do cluster.
Adicione os campos
.containers.resources.requests
e.containers.resources.limits
à especificação do contêiner. Cada nome de recurso é diferente dependendo da classe da máquina. Verifique a alocação de recursos da GPU para encontrar os nomes dos recursos da GPU.Por exemplo, a especificação de contêiner a seguir solicita três partições de uma GPU de um nó
a2-ultragpu-1g-gdc
:... containers: - name: my-container image: "my-image" resources: requests: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 limits: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 ...
Os contêineres também exigem permissões extras para acessar GPUs. Para cada contêiner que solicita GPUs, adicione as seguintes permissões à especificação do contêiner:
... securityContext: seLinuxOptions: type: unconfined_t ...
Aplique o arquivo de manifesto do contêiner:
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
Verificar a alocação de recursos da GPU
Para verificar a alocação de recursos da GPU, use o seguinte comando:
kubectl describe nodes NODE_NAME
Substitua
NODE_NAME
pelo nó que gerencia as GPUs que você quer inspecionar.A saída relevante é semelhante ao seguinte snippet:
Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
Anote os nomes dos recursos das GPUs. Eles precisam ser especificados ao configurar um contêiner para usar recursos de GPU.