Se você encontrar problemas ao executar o job do Dataflow com GPUs, siga estas etapas:
- Siga o fluxo de trabalho em Práticas recomendadas para trabalhar com GPUs do Dataflow para garantir que seu pipeline esteja configurado corretamente.
- Confirme se o job do Dataflow está usando GPUs. Consulte Verificar o job do Dataflow em "Executar um pipeline com GPUs".
- Depure com uma VM independente.
- Se o problema persistir, siga o restante das etapas da solução de problemas nesta página.
Depurar com uma VM independente
Enquanto você projeta e itera em uma imagem de contêiner que funciona para você, pode ser mais rápido reduzir o loop de feedback testando a imagem de contêiner em uma VM independente.
É possível depurar o contêiner personalizado em uma VM autônoma com GPUs. Basta criar uma VM do Compute Engine que executa GPUs no Container-Optimized OS, instalar drivers e iniciar o contêiner da seguinte maneira.
Crie uma instância de VM.
gcloud compute instances create INSTANCE_NAME \ --project "PROJECT" \ --image-family cos-stable \ --image-project=cos-cloud \ --zone=us-central1-f \ --accelerator type=nvidia-tesla-t4,count=1 \ --maintenance-policy TERMINATE \ --restart-on-failure \ --boot-disk-size=200G \ --scopes=cloud-platform
Use
ssh
para se conectar à VM.gcloud compute ssh INSTANCE_NAME --project "PROJECT"
Instale os drivers da GPU. Depois de se conectar à VM usando
ssh
, execute os seguintes comandos na VM:# Run these commands on the virtual machine cos-extensions install gpu sudo mount --bind /var/lib/nvidia /var/lib/nvidia sudo mount -o remount,exec /var/lib/nvidia /var/lib/nvidia/bin/nvidia-smi
Inicie seu contêiner personalizado.
Os contêineres do SDK do Apache Beam usam o ponto de entrada
/opt/apache/beam/boot
. Para fins de depuração, inicie o contêiner manualmente com um ponto de entrada diferente:docker-credential-gcr configure-docker docker run --rm \ -it \ --entrypoint=/bin/bash \ --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \ --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \ --privileged \ IMAGE
Substitua IMAGE pelo caminho do Artifact Registry da imagem do Docker.
Verifique se as bibliotecas de GPU instaladas no contêiner podem acessar os dispositivos da GPU.
Se você estiver usando o TensorFlow, poderá imprimir os dispositivos disponíveis no interpretador do Python com o seguinte:
>>> import tensorflow as tf >>> print(tf.config.list_physical_devices("GPU"))
Se você estiver usando o PyTorch, poderá inspecionar os dispositivos disponíveis no interpretador do Python com o seguinte:
>>> import torch >>> print(torch.cuda.is_available()) >>> print(torch.cuda.device_count()) >>> print(torch.cuda.get_device_name(0))
Para iterar no pipeline, inicie o pipeline no Direct Runner. Também é possível iniciar pipelines no Dataflow Runner a partir desse ambiente.
Os workers não são iniciados
Se o job estiver travado e os workers do Dataflow nunca começarem a processar dados, é provável que você tenha um problema relacionado ao uso de um contêiner personalizado com o Dataflow. Para mais detalhes, leia o guia de solução de problemas de contêineres personalizados.
Se você é usuário de Python, verifique se as seguintes condições são atendidas:
- A versão secundária do interpretador do Python
na imagem do contêiner é a mesma que você usa ao iniciar o
pipeline. Se houver incompatibilidade, talvez você veja erros como
SystemError: unknown opcode
em um stack trace que envolveapache_beam/internal/pickler.py
. - Se você estiver usando o SDK 2.29.0 ou anterior do Apache Beam,
pip
precisará estar acessível na imagem em/usr/local/bin/pip
.
Recomendamos que você reduza as personalizações a um mínimo de trabalho na primeira vez que usar uma imagem personalizada. Use as imagens de contêiner personalizadas de amostra fornecidas nos exemplos desta página. Verifique se é possível executar um pipeline simples do Dataflow com essa imagem de contêiner sem solicitar GPUs. Em seguida, itere a solução.
Verifique se os workers têm espaço em disco suficiente para fazer o download da imagem de contêiner. Ajuste o tamanho do disco, se necessário. Imagens grandes levam mais tempo para fazer o download, o que aumenta o tempo de inicialização do worker.
O job falha imediatamente na inicialização
Se você encontrar os erros
ZONE_RESOURCE_POOL_EXHAUSTED
ou ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS
, siga estas etapas:
Não especifique a zona do worker para que o Dataflow selecione a zona ideal para você.
Inicie o pipeline em uma zona diferente ou com um tipo de acelerador diferente.
O job falha no ambiente de execução
Se o job falhar em tempo de execução, exclua os erros de memória insuficiente na máquina worker e na GPU. Os erros de OOM da GPU podem se manifestar como erros cudaErrorMemoryAllocation out of memory
nos registros do worker. Se você estiver usando o TensorFlow, verifique se usa apenas um processo do TensorFlow para acessar um dispositivo de GPU.
Para mais informações, leia GPUs e paralelismo de worker.
Nenhum uso da GPU
Se o pipeline for executado com sucesso, mas as GPUs não forem usadas, verifique se:
- As bibliotecas NVIDIA instaladas na imagem do contêiner correspondem aos requisitos do código do usuário do pipeline e das bibliotecas que ele usa.
- As bibliotecas NVIDIA instaladas em imagens de contêiner podem ser acessadas como bibliotecas compartilhadas.
Se os dispositivos não estiverem disponíveis, é possível que você esteja usando uma configuração de software incompatível. Por exemplo, se você estiver usando o TensorFlow, verifique se tem uma combinação compatível (em inglês) com as versões do TensorFlow, do cuDNN e do CUDA Toolkit.
Para verificar a configuração da imagem, execute um pipeline simples que apenas verifique se as GPUs estão disponíveis e acessíveis para os workers.
A seguir
- Primeiros passos: como executar GPUs no Container-Optimized OS.
- Caixa de ferramentas do Container-Optimized OS.
- Escopos de acesso à conta de serviço.