Développer à l'aide des GPU

Cette page décrit un exemple de workflow de développeur permettant de créer des pipelines à l'aide de GPU.

Pour en savoir plus sur l'utilisation des GPU avec Dataflow, consultez la page Compatibilité de Dataflow avec les GPU. Pour obtenir des informations et des exemples sur la façon d'activer les GPU dans vos tâches Cloud Dataflow, consultez les pages Utiliser les GPU et Traiter les images satellite Landsat avec des GPU.

L'utilisation d'Apache Beam avec des GPU NVIDIA vous permet de créer des pipelines de traitement de données à grande échelle pour gérer le prétraitement et l'inférence. Lorsque vous utilisez des GPU pour le développement local, tenez compte des informations suivantes :

  • Souvent, les workflows de traitement des données utilisent des bibliothèques supplémentaires que vous devez installer dans l'environnement de lancement et dans l'environnement d'exécution sur les nœuds de calcul Dataflow. Cette configuration ajoute des étapes au workflow de développement pour configurer les exigences de pipeline ou pour utiliser des conteneurs personnalisés dans Dataflow. Vous pouvez choisir un environnement de développement local qui imite l'environnement de production le plus près possible.

  • Si vous utilisez une bibliothèque utilisant implicitement des GPU NVIDIA et que votre code ne nécessite aucune modification pour la compatibilité avec les GPU, vous n'avez pas besoin de modifier votre workflow de développement pour configurer les exigences de pipeline ni pour créer un pipeline personnalisé.

  • Certaines bibliothèques ne changent pas de manière transparente entre l'utilisation du processeur et du GPU. Par conséquent, elles nécessitent des compilations spécifiques et des chemins de code différents. Pour répliquer le cycle de vie du développement d'exécution du code pour ce scénario, des étapes supplémentaires sont nécessaires.

  • Lors de l'exécution de tests locaux, il est utile de répliquer l'environnement du nœud de calcul Dataflow aussi fidèlement que possible. En fonction de la bibliothèque, vous aurez peut-être besoin d'une machine dotée d'un GPU et des bibliothèques de GPU requises. Ce type de machine peut ne pas être disponible dans votre environnement local. Vous pouvez émuler l'environnement d'exécution Dataflow à l'aide d'un conteneur s'exécutant sur une machine virtuelle Google Cloud équipée de GPU.

  • Il est peu probable qu'un pipeline soit entièrement composé de transformations nécessitant un GPU. Un pipeline type comporte une étape d'ingestion qui utilise l'une des nombreuses sources fournies par Apache Beam. Cette étape est suivie de manipulation de données ou de transformations de format, qui alimentent ensuite une transformation GPU.

Le workflow en deux étapes suivant montre comment créer un pipeline à l'aide de GPU. Ce flux se charge des problèmes liés aux GPU et non GPU séparément et raccourcit la boucle de rétroaction.

  1. Créer un pipeline

    Créer un pipeline pouvant s'exécuter sur Dataflow Remplacez les transformations nécessitant des GPU par des transformations qui n'utilisent pas de GPU, mais qui sont fonctionnellement identiques :

    1. Créez toutes les transformations qui accompagnent l'utilisation du GPU, telles que l'ingestion et la manipulation des données.

    2. Créez une simulation pour la transformation GPU avec une simple transmission ou une modification du schéma.

  2. Tester en local

    Testez la partie GPU du code de pipeline dans l'environnement qui imite l'environnement d'exécution des nœuds de calcul Dataflow. Les étapes suivantes décrivent l'une des méthodes d'exécution de ce test :

    1. Créez une image Docker avec toutes les bibliothèques nécessaires.

    2. Commencez le développement du code GPU.

    3. Commencez le cycle d'exécution du code à l'aide d'une machine virtuelle Google Cloud avec l'image Docker. Pour éliminer les incompatibilités de bibliothèque, exécutez le code GPU dans un processus Python local séparément d'un pipeline Apache Beam. Exécutez ensuite l'intégralité du pipeline sur l'exécuteur direct ou lancez le pipeline sur Dataflow.

Utiliser une VM exécutant un système d'exploitation optimisé pour les conteneurs

Pour un environnement minimal, utilisez une machine virtuelle optimisée pour les conteneurs. Pour en savoir plus, consultez la page Créer une VM avec des GPU associés.

Le flux général est le suivant :

  1. Créez une VM.

  2. Connectez-vous à la VM et exécutez les commandes suivantes :

    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
    
  3. Vérifiez que les GPU sont disponibles :

    ./nvidia-smi
    
  4. Démarrez un conteneur Docker avec des pilotes de GPU de la VM installée en tant que volumes. Exemple :

    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 gcr.io/bigdatapivot/image_process_example:latest
    

Pour obtenir un exemple de fichier Dockerfile, consultez la section Créer une image de conteneur personnalisé. Veillez à ajouter toutes les dépendances dont vous avez besoin pour votre pipeline au fichier Dockerfile.

Pour en savoir plus sur l'utilisation d'une image Docker préconfigurée pour l'utilisation du GPU, consultez la page Utiliser une image existante configurée pour l'utilisation du GPU.

Outils utiles pour l'utilisation de systèmes optimisés pour les conteneurs

  • Pour configurer la CLI Docker afin qu'elle utilise docker-credential-gcr comme assistant d'identification pour l'ensemble de registres de conteneurs Google par défaut (GCR), utilisez :

    docker-credential-gcr configure-docker
    

    Pour en savoir plus sur la configuration des identifiants Docker, consultez la page docker-credential-gcr.

  • Pour copier des fichiers, tels que le code du pipeline, vers ou depuis une VM, utilisez toolbox. Cette technique est utile lorsque vous utilisez une image personnalisée. Exemple :

    toolbox /google-cloud-sdk/bin/gsutil cp gs://bucket/gpu/image_process/* /media/root/home/<userid>/opencv/
    

    Pour en savoir plus, consultez la section Résoudre les problèmes de nœud avec la boîte à outils.

Étape suivante