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:
Remova pods que solicitam recursos de GPU do nó em que você precisa redefinir a GPU.
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ó.Conecte-se à VM que faz backup do nó.
Na sessão SSH, redefina a GPU:
/home/kubernetes/bin/nvidia/bin/nvidia-smi --gpu-reset
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.