Soluciona problemas de tu trabajo de GPU de Dataflow

Si tienes problemas para ejecutar tu trabajo de Dataflow con GPU, sigue estos pasos:

  1. Sigue el flujo de trabajo en Prácticas recomendadas para trabajar con GPU de Dataflow a fin de asegurarte de que la canalización esté configurada de forma correcta.
  2. Confirma que tu trabajo de Dataflow use las GPU. Consulta Verifica tu trabajo de Dataflow en “Ejecuta una canalización con GPU”.
  3. Depura con una VM independiente
  4. Si el problema persiste, sigue el resto de los pasos de solución de problemas de esta página.

Depura con una VM independiente

Mientras diseñas e iteras en una imagen de contenedor que funciona para ti, puede ser más rápido reducir el ciclo de reacción si pruebas tu imagen de contenedor en una VM independiente.

Puedes depurar tu contenedor personalizado en una VM independiente con GPU si creas una VM de Compute Engine que ejecute GPU en Container-Optimized OS, la instalación de controladores y el inicio de tu contenedor.

  1. Cree una instancia 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
    
  2. Usa ssh para conectarte a la VM:

    gcloud compute ssh INSTANCE_NAME --project "PROJECT"
    
  3. Instala los controladores de GPU. Después de conectarte a la VM mediante ssh, ejecuta los siguientes comandos en la 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
    
  4. Inicia tu contenedor personalizado.

    Los contenedores del SDK de Apache Beam usan el punto de entrada /opt/apache/beam/boot. Para fines de depuración, puedes iniciar tu contenedor de forma manual con un punto 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
    

    Reemplaza IMAGE con la ruta de acceso de Artifact Registry para tu imagen de Docker.

  5. Luego, verifica que las bibliotecas de GPU instaladas en tu contenedor puedan acceder a los dispositivos de GPU.

    Si usas TensorFlow, puedes imprimir dispositivos disponibles en el intérprete de Python con lo siguiente:

    >>> import tensorflow as tf
    >>> print(tf.config.list_physical_devices("GPU"))
    

    Si usas PyTorch, puedes inspeccionar los dispositivos disponibles en el intérprete de Python con lo siguiente:

    >>> import torch
    >>> print(torch.cuda.is_available())
    >>> print(torch.cuda.device_count())
    >>> print(torch.cuda.get_device_name(0))
    

Para iterar en la canalización, puedes iniciarla en Direct Runner. También puedes iniciar canalizaciones en Dataflow Runner desde este entorno.

Los trabajadores no inician

Si tu trabajo está atascado y los trabajadores de Dataflow nunca comienzan a procesar datos, es probable que tengas un problema relacionado con el uso de un contenedor personalizado con Dataflow. Para obtener más detalles, consulta la guía de solución de problemas de contenedores personalizados.

Si eres usuario de Python, verifica que se cumplan las siguientes condiciones:

  • La versión secundaria de intérprete de Python en tu imagen de contenedor es la misma versión que usas cuando inicias tu canalización. Si no hay coincidencia, es posible que veas errores como SystemError: unknown opcode con un seguimiento de pila que involucra apache_beam/internal/pickler.py.
  • Si usas el SDK 2.29.0 de Apache Beam o una versión anterior, se debe poder acceder a pip en la imagen en /usr/local/bin/pip.

Te recomendamos que reduzcas las personalizaciones a una configuración funcional mínima la primera vez que uses una imagen personalizada. Usa las imágenes de contenedor personalizadas de muestra que se proporcionan en los ejemplos de esta página. Asegúrate de que puedas ejecutar una canalización de Dataflow sencilla con esta imagen de contenedor sin solicitar GPUs. Luego, itera en la solución.

Verifica que los trabajadores tengan suficiente espacio en el disco para descargar la imagen del contenedor. Ajusta el tamaño del disco si es necesario. Las imágenes grandes tardan más en descargarse, lo que aumenta el tiempo de inicio de los trabajadores.

El trabajo falla inmediatamente en el inicio

Si encuentras los errores ZONE_RESOURCE_POOL_EXHAUSTED o ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS, puedes seguir estos pasos:

  • No especifiques la zona del trabajador para que Dataflow seleccione la zona óptima.

  • Inicia la canalización en una zona diferente o con un tipo de acelerador diferente.

El trabajo falla en el entorno de ejecución

Si el trabajo falla en el entorno de ejecución, revisa los errores de memoria insuficiente (OOM) en la máquina de trabajador y en la GPU. Los errores de OOM de GPU pueden manifestarse como errores cudaErrorMemoryAllocation out of memory en los registros de trabajador. Si usas TensorFlow, verifica que uses solo un proceso de TensorFlow para acceder a un dispositivo de GPU. Para obtener más información, consulta Paralelismo de trabajadores y GPU.

No hay uso de GPU

Si tu canalización se ejecuta de forma correcta, pero no se usan las GPU, verifica lo siguiente:

  • Las bibliotecas de NVIDIA instaladas en la imagen del contenedor coinciden con los requisitos del código de usuario de la canalización y las bibliotecas que usa.
  • Se puede acceder a las bibliotecas de NVIDIA en imágenes de contenedor como bibliotecas compartidas.

Si los dispositivos no están disponibles, puede que estés usando una configuración de software incompatible. Por ejemplo, si usas TensorFlow, verifica que tengas una combinación compatible de TensorFlow, la versión de cuDNN y la versión de CUDA Toolkit.

Para verificar la configuración de la imagen, considera ejecutar una canalización sencilla que verifique que las GPUs estén disponibles y que los trabajadores puedan acceder a ellas.

¿Qué sigue?