É 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.
Este documento é destinado a desenvolvedores de aplicativos no grupo de operadores de aplicativos responsáveis por criar cargas de trabalho de aplicativos para a organização. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.
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 as opções de configuração das máquinas do cluster.
O papel de administrador do cluster de usuário (
user-cluster-admin) para verificar GPUs em um cluster compartilhado e o papel de administrador do namespace (namespace-admin) no namespace do projeto para implantar cargas de trabalho de GPU em um cluster compartilhado.O papel de administrador do cluster padrão (
standard-cluster-admin) para verificar GPUs em um cluster padrão e o papel de desenvolvedor do cluster (cluster-developer) no cluster padrão para implantar cargas de trabalho de GPU em um cluster padrão.Para executar comandos em um cluster do Kubernetes, verifique se você tem os seguintes recursos:
Localize o nome do cluster do Kubernetes ou pergunte a um membro do grupo de administradores da plataforma.
Faça login e gere o arquivo kubeconfig para o cluster do Kubernetes se você não tiver um.
Use o caminho kubeconfig do cluster do Kubernetes para substituir
KUBERNETES_CLUSTER_KUBECONFIGnestas instruções.
O caminho do 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.
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 clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVERSubstitua:
KUBERNETES_CLUSTER_NAME: o nome do cluster.KUBERNETES_CLUSTER_NAMESPACE: o namespace do cluster. Para clusters compartilhados, use o namespaceplatform. Para clusters padrão, use o namespace do projeto do cluster.MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal em que o cluster do Kubernetes está hospedado. Se você ainda não gerou um arquivo kubeconfig para o servidor da API na zona de destino, consulte Fazer login.
A saída relevante é semelhante ao seguinte snippet:
# Several lines of code are omitted here. spec: nodePools: - machineTypeName: a2-ultragpu-1g-gdc nodeCount: 2 # Several lines of code are omitted here.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 de cluster.
Adicione os campos
.containers.resources.requestse.containers.resources.limitsà especificação do contêiner. Cada nome de recurso é diferente dependendo da classe da máquina. Verifique sua alocação de recursos de GPU para encontrar os nomes dos recursos de 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 KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGSubstitua:
CONTAINER_MANIFEST_FILE: o arquivo de manifesto YAML para sua carga de trabalho de contêiner.KUBERNETES_CLUSTER_NAMESPACE: o namespace do cluster. Para clusters compartilhados, use o namespaceplatform. Para clusters padrão, use o namespace do projeto do cluster.KUBERNETES_CLUSTER_KUBECONFIG: o caminho kubeconfig do cluster.
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 --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGSubstitua:
NODE_NAME: o nó que gerencia as GPUs que você quer inspecionar.KUBERNETES_CLUSTER_KUBECONFIG: o caminho kubeconfig do cluster.
A saída relevante é semelhante ao seguinte snippet:
# Several lines of code are omitted here. Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 # Several lines of code are omitted here.
Anote os nomes dos recursos das GPUs. Eles precisam ser especificados ao configurar um contêiner para usar recursos de GPU.