Résoudre les problèmes liés à la tâche de GPU Dataflow

Si vous rencontrez des problèmes lors de l'exécution de votre tâche Dataflow avec des GPU, procédez comme suit:

  1. Suivez le workflow décrit dans la section Bonnes pratiques pour l'utilisation des GPU Dataflow pour vous assurer que votre pipeline est correctement configuré.
  2. Vérifiez que votre tâche Dataflow utilise des GPU. Consultez la section Vérifier votre tâche Dataflow de la page "Exécuter un pipeline avec des GPU".
  3. Déboguer à l'aide d'une VM autonome
  4. Si le problème persiste, suivez les étapes de dépannage décrites sur cette page.

Déboguer à l'aide d'une VM autonome

Lorsque vous concevez et itérez une image de conteneur adaptée à vos besoins, il peut être plus rapide de réduire la boucle de rétroaction en testant l'image de conteneur sur une VM autonome.

Vous pouvez déboguer votre conteneur personnalisé sur une VM autonome à l'aide de GPU en créant une VM Compute Engine qui exécute des GPU sur Container-Optimized OS, en installant des pilotes et en démarrant votre conteneur comme suit.

  1. Créez une instance 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. Utilisez ssh pour vous connecter à la VM.

    gcloud compute ssh INSTANCE_NAME --project "PROJECT"
    
  3. Installez les pilotes de GPU. Une fois connecté à la VM à l'aide de ssh, exécutez les commandes suivantes sur 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. Lancez votre conteneur personnalisé.

    Les conteneurs du SDK Apache Beam utilisent le point d'entrée /opt/apache/beam/boot. À des fins de débogage, vous pouvez lancer votre conteneur manuellement avec un point d'entrée différent :

    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
    

    Remplacez IMAGE par le chemin d'accès à Artifact Registry pour votre image Docker.

  5. Vérifiez que les bibliothèques de GPU installées dans votre conteneur peuvent accéder aux appareils GPU.

    Si vous utilisez TensorFlow, vous pouvez imprimer les informations des appareils disponibles dans l'interpréteur Python à l'aide de la commande suivante :

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

    Si vous utilisez PyTorch, vous pouvez inspecter les appareils disponibles dans l'interpréteur Python à l'aide de la commande suivante :

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

Pour effectuer une itération sur votre pipeline, vous pouvez lancer le pipeline sur Direct Runner. Vous pouvez également lancer des pipelines sur l'exécuteur Dataflow Runner à partir de cet environnement.

Les nœuds de calcul ne démarrent pas

Si votre tâche est bloquée et que les nœuds de calcul Dataflow ne commencent jamais à traiter les données, le problème est sûrement lié à l'utilisation d'un conteneur personnalisé avec Dataflow. Pour en savoir plus, consultez le guide de dépannage des conteneurs personnalisés.

Si vous êtes un utilisateur Python, vérifiez que les conditions suivantes sont remplies :

  • La version mineure de l'interpréteur Python dans votre image de conteneur est la même que celle utilisée lors du lancement de votre pipeline. En cas d'incohérence, des erreurs telles que SystemError: unknown opcode peuvent s'afficher, avec une trace de pile impliquant apache_beam/internal/pickler.py.
  • Si vous utilisez le SDK Apache Beam 2.29.0 ou une version antérieure, pip doit être accessible sur l'image dans /usr/local/bin/pip.

Nous vous recommandons de réduire les personnalisations à une configuration fonctionnelle minimale lors de la première utilisation d'une image personnalisée. Utilisez les exemples d'images de conteneurs personnalisés fournis dans les exemples de cette page. Assurez-vous de pouvoir exécuter un pipeline Dataflow simple avec cette image de conteneur sans demander de GPU. Ensuite, effectuez une itération sur la solution.

Vérifiez que les nœuds de calcul disposent d'un espace disque suffisant pour télécharger votre image de conteneur. Ajustez la taille du disque si nécessaire. Le téléchargement d'images volumineuses prend plus de temps, ce qui augmente le temps de démarrage des nœuds de calcul.

La tâche échoue immédiatement au démarrage

Si vous rencontrez une erreur ZONE_RESOURCE_POOL_EXHAUSTED ou ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS, procédez comme suit :

  • Ne spécifiez pas la zone de nœud de calcul et laissez Dataflow sélectionner la zone optimale pour vous.

  • Lancez le pipeline dans une autre zone ou à l'aide d'un autre type d'accélérateur.

La tâche échoue au moment de l'exécution

Si la tâche échoue au moment de l'exécution, vérifiez les éventuelles erreurs de mémoire saturée (OOM, Out Of Memory) sur le nœud de calcul et le GPU. Les erreurs OOM des GPU peuvent se manifester sous la forme d'erreurs cudaErrorMemoryAllocation out of memory dans les journaux des nœuds de calcul. Si vous utilisez TensorFlow, vérifiez que vous n'utilisez qu'un seul processus TensorFlow pour accéder à un appareil GPU. Pour en savoir plus, consultez la section GPU et parallélisme des nœuds de calcul.

Aucune utilisation du GPU

Si votre pipeline s'exécute correctement, mais que les GPU ne sont pas utilisés, effectuez les vérifications suivantes :

  • Les bibliothèques NVIDIA installées dans l'image de conteneur correspondent aux exigences du code utilisateur du pipeline et des bibliothèques qu'il utilise.
  • Les bibliothèques NVIDIA installées dans les images de conteneurs sont accessibles en tant que bibliothèques partagées.

Si les appareils ne sont pas disponibles, vous utilisez peut-être une configuration logicielle incompatible. Par exemple, si vous utilisez TensorFlow, vérifiez que vous disposez d'une combinaison compatible de TensorFlow, de la version CuDNN et de la version CUDA Toolkit.

Pour vérifier la configuration de l'image, vous pouvez exécuter un pipeline simple qui vérifie uniquement que les GPU sont disponibles et que les nœuds de calcul peuvent y accéder.

Étapes suivantes