Solucionar problemas de GPUs no GKE


Nesta página, mostramos como resolver problemas relacionados a GPUs no Google Kubernetes Engine (GKE).

Se precisar de mais ajuda, entre em contato com o Cloud Customer Care.

Instalação do driver da GPU

Esta seção fornece informações de solução de problemas para instalação automática de driver de dispositivo NVIDIA no GKE.

A instalação do driver falha em nós do Ubuntu

Se você usar nós do Ubuntu com GPUs L4 ou H100 anexadas, o driver de GPU padrão instalado pelo GKE pode não ser a versão necessária para essas GPUs. Como resultado, o pod do plug-in do dispositivo de GPU permanece travado no estado "Pendente", e as cargas de trabalho da GPU nesses nós podem apresentar problemas.

Para resolver esse problema, recomendamos fazer upgrade para as seguintes versões do GKE, que instalam a versão 535 do driver da GPU como padrão:

  • 1.26.15-gke.1483000 e mais recente
  • 1.27.15-gke.1039000 e mais recente
  • 1.28.11-gke.1044000 e mais recente
  • 1.29.6-gke.1073000 e mais recente
  • 1.30.2-gke.1124000 e mais recente

Como alternativa, instale manualmente a versão 535 ou mais recente do driver executando o seguinte comando:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R535.yaml

Os plug-ins de dispositivos de GPU falham com erros CrashLoopBackOff

O problema a seguir ocorre se você usou o método de instalação manual do driver no pool de nós antes de 25 de janeiro de 2023 e depois fez upgrade do pool de nós para uma versão do GKE compatível com instalação automática de driver. Ambas as cargas de trabalho de instalação existem ao mesmo tempo e tentam instalar versões de driver conflitantes nos seus nós.

O contêiner de inicialização do plug-in do dispositivo GPU falha com o status Init:CrashLoopBackOff. Os logs do contêiner são semelhantes aos seguintes:

failed to verify installation: failed to verify GPU driver installation: exit status 18

Para resolver esse problema, tente o seguinte:

  • Remova o DaemonSet de instalação manual do driver do seu cluster. Isso exclui a carga de trabalho de instalação conflitante e permite que o GKE instale automaticamente um driver nos seus nós.

    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
    
  • Aplique novamente o manifesto DaemonSet de instalação manual do driver ao seu cluster. Em 25 de janeiro de 2023, atualizamos o manifesto para ignorar nós que usam instalação automática de driver.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
    
  • Desative a instalação automática do driver para seu pool de nós. O DaemonSet de instalação do driver existente deve funcionar conforme o esperado após a conclusão da operação de atualização.

    gcloud container node-pools update POOL_NAME \
        --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=disabled \
        --cluster=CLUSTER_NAME \
        --location=LOCATION
    

    Substitua:

    • POOL_NAME: o nome do pool de nós.
    • GPU_TYPE: o tipo de GPU que o pool de nós já usa.
    • GPU_COUNT: o número de GPUs que já estão anexadas ao pool de nós.
    • CLUSTER_NAME: o nome do cluster do GKE que contém o pool de nós.
    • LOCATION: o local do Compute Engine do cluster.

Erro: "A imagem do contêiner cos-nvidia-installer:fixed não está presente com a política de extração de "Never"." ou "A imagem do contêiner ubuntu-nvidia-installer:fixed não está presente com a política de extração de "Never"."

Esse problema ocorre quando os pods nvidia-driver-installer estão no estado PodInitializing e o dispositivo do plug-in da GPU ou os pods do instalador do driver da GPU informam o seguinte erro. A mensagem de erro específica depende do sistema operacional executado no seu nó:

COS

Container image "cos-nvidia-installer:fixed" is not present with pull policy of Never.

Ubuntu

Container image "gke-nvidia-installer:fixed" is not present with pull policy of Never.

Esse problema pode ocorrer quando o coletor de lixo remove a imagem do driver NVIDIA pré-carregada para liberar espaço em um nó. Quando o pod do driver é recriado ou o contêiner é reiniciado, o GKE não consegue localizar a imagem pré-carregada.

Para atenuar o problema de coleta de lixo ao executar o COS, faça upgrade dos nós do GKE para uma destas versões que contêm a correção:

  • 1.25.15-gke.1040000 e mais recente
  • 1.26.10-gke.1030000 e mais recente
  • 1.27.6-gke.1513000 e mais recente
  • 1.28.3-gke.1061000 e mais recente

Se os nós estiverem executando o Ubuntu, ainda não há uma correção disponível para esse problema de coleta de lixo. Para atenuar esse problema no Ubuntu, é possível executar um contêiner privilegiado que interage com o host para garantir a configuração correta dos drivers da GPU NVIDIA. Para fazer isso, execute sudo /usr/local/bin/nvidia-container-first-boot no seu nó ou aplique o seguinte manifesto:

apiVersion: v1
kind: Pod
metadata:
  name: gke-nvidia-installer-fixup
spec:
  nodeSelector:
    cloud.google.com/gke-os-distribution: ubuntu
  hostPID: true
  containers:
  - name: installer
    image: ubuntu
    securityContext:
      privileged: true
    command:
      - nsenter
      - -at
      - '1'
      - --
      - sh
      - -c
      - "/usr/local/bin/nvidia-container-first-boot"
  restartPolicy: Never

Outra possível causa do problema é quando as imagens do driver da NVIDIA são perdidas após a reinicialização do nó ou a manutenção do host. Isso pode ocorrer em nós confidenciais ou com GPUs que usam armazenamento SSD local temporário. Nessa situação, o GKE carrega previamente as imagens do contêiner nvidia-installer-driver nos nós e as move do disco de inicialização para o SSD local na primeira inicialização.

Para confirmar se houve um evento de manutenção do host, use o seguinte filtro de registro:

resource.type="gce_instance"
protoPayload.serviceName="compute.googleapis.com"
log_id("cloudaudit.googleapis.com/system_event")

Para atenuar o problema de manutenção do host, faça upgrade da versão do GKE para uma destas versões:

  • 1.27.13-gke.1166000 e mais recente
  • 1.29.3-gke.1227000 e mais recente
  • 1.28.8-gke.1171000 e mais recente

Erro: falha ao configurar os diretórios de instalação do driver da GPU: falha ao criar a sobreposição lib64: falha ao criar o diretório /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: não é um diretório.

Você encontra este erro no contêiner do instalador do driver da GPU dentro do plug-in do dispositivo GPU quando o fastsocket do NCCL está ativado:

failed to configure GPU driver installation dirs: failed to create lib64 overlay: failed to create dir /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: not a directory.

Esse problema só acontece em clusters e nós que executam o GKE 1.28 e 1.29.

O problema é causado por uma condição de corrida de fastsocket do NCCL com o instalador do driver da GPU.

Para atenuar esse problema, faça upgrade da versão do GKE para uma destas versões:

  • 1.28.8-gke.1206000 e mais recente
  • 1.29.3-gke.1344000 e mais recente

Erro: falha ao receber o dispositivo nvidia0: dispositivo nvidia0 não encontrado.

O erro a seguir indica que o XID 62 e o RmInitAdapter falharam para a GPU com o número secundário 0:

Failed to get device for nvidia0: device nvidia0 not found.

O driver NVIDIA versão 525.105.17 tem um bug que pode causar erros de comunicação (XID) e impedir que a GPU seja inicializada corretamente, levando a uma falha na inicialização da GPU.

Para corrigir esse problema, atualize o driver NVIDIA para a versão 525.110.11 ou mais recente.

Redefinir GPUs em VMs A3

Alguns problemas podem exigir a redefinição da GPU em uma VM A3.

Para redefinir a GPU, siga estas etapas:

  1. Remova pods que solicitam recursos de GPU do nó em que você precisa redefinir a GPU.

  2. Desative o plug-in do dispositivo GPU no nó:

    kubectl get nodes \
        --selector=kubernetes.io/hostname=NODE_NAME \
        --no-headers | awk '{print $1}' \
        | xargs -I{} kubectl label node {} gke-no-default-nvidia-gpu-device-plugin=true
    

    Substitua NODE_NAME pelo nome do nó.

  3. Conecte-se à VM que faz backup do nó.

  4. Na sessão SSH, redefina a GPU:

    /home/kubernetes/bin/nvidia/bin/nvidia-smi --gpu-reset
    
  5. Reative o plug-in do dispositivo de GPU:

    kubectl get nodes --selector=kubernetes.io/hostname=NODE_NAME \
        --no-headers \| awk '{print $1}' \
        | xargs -I{} kubectl label node {} gke-no-default-nvidia-gpu-device-plugin=false \
        --overwrite
    

A seguir

Se precisar de mais ajuda, entre em contato com o Cloud Customer Care.