Exécuter la plate-forme TensorFlow distribuée sur Compute Engine

Ce tutoriel montre comment utiliser une configuration distribuée de TensorFlow sur plusieurs instances Compute Engine pour entraîner un modèle de réseau de neurones convolutif à l'aide de l'ensemble de données MNIST. Ce dernier, qui permet la reconnaissance des chiffres manuscrits, est très utilisé dans le cadre du machine learning comme ensemble d'entraînement pour la reconnaissance d'images.

TensorFlow est une plate-forme Open Source de bout en bout dédiée au machine learning. Elle offre un écosystème complet et flexible d'outils, de bibliothèques et de ressources communautaires permettant aux chercheurs d'avancer dans le domaine du machine learning, et aux développeurs de créer et de déployer des applications utilisant cette technologie. TensorFlow est conçu pour s'exécuter sur plusieurs ordinateurs afin de distribuer des charges de travail d'entraînement. Dans ce tutoriel, vous allez exécuter TensorFlow sur plusieurs instances de VM Compute Engine afin d'entraîner le modèle. Si vous préférez, vous pouvez également utiliser AI Platform, qui gère à votre place les tâches d'allocation de ressources et peut héberger vos modèles entraînés. Nous vous recommandons d'utiliser AI Platform, sauf raison impérieuse. Pour en savoir plus, consultez la version de ce tutoriel utilisant Cloud Machine Learning Engine et Cloud Datalab.

Le schéma ci-dessous décrit l'architecture permettant d'exécuter une configuration distribuée de TensorFlow sur Compute Engine et d'utiliser AI Platform avec Cloud Datalab pour réaliser des prédictions avec le modèle entraîné.

Diagramme de l'exécution de Tensorflow sur Compute Engine

Ce tutoriel montre comment configurer et utiliser cette architecture. Il explique par la même occasion certains des concepts abordés.

Objectifs

  • Configurez Compute Engine pour créer un cluster de VM afin d'exécuter TensorFlow.
  • Apprenez à exécuter l'exemple de code TensorFlow distribué sur un cluster Compute Engine pour entraîner un modèle. L'exemple de code utilise les bibliothèques et modèles TensorFlow les plus récents. Vous pouvez donc vous en servir comme référence lorsque vous concevez votre propre code d'entraînement.
  • Déployez le modèle entraîné sur AI Platform pour créer une API personnalisée pour les prédictions, puis exécutez ces dernières à l'aide d'un notebook Cloud Datalab.

Coûts

Le prix estimé pour exécuter ce tutoriel, en supposant que vous utilisiez chaque ressource pendant une journée entière, est d'environ 1,20 $ d'après ce simulateur de coût.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Sélectionnez ou créez un projet Google Cloud Platform.

    Accéder à la page "Gérer les ressources"

  3. Assurez-vous que la facturation est activée pour votre projet Google Cloud Platform.

    Découvrir comment activer la facturation

  4. Activez Compute Engine API and AI Platform Training and Prediction APIles API requises.

    Activer les API.

Créer l'instance du modèle

Ce tutoriel utilise Cloud Shell, un shell Linux entièrement fonctionnel qui s'exécute dans la console Google Cloud Platform.

  1. Accédez à Cloud Shell.

    Ouvrir Cloud Shell

  2. Définissez la zone Compute Engine et le projet par défaut. Remplacez [YOUR_PROJECT_ID] par votre projet Google Cloud Platform (GCP).

    gcloud config set compute/zone us-east1-c
    gcloud config set project [YOUR_PROJECT_ID]
  3. Clonez le dépôt GitHub.

    git clone https://github.com/GoogleCloudPlatform/cloudml-dist-mnist-example
    cd cloudml-dist-mnist-example
  4. Créez l'instance de VM initiale à partir d'une image Ubuntu Wily.

    gcloud compute instances create template-instance \
    --image-project ubuntu-os-cloud \
    --image-family ubuntu-1604-lts \
    --boot-disk-size 10GB \
    --machine-type n1-standard-1
  5. Connectez-vous en ssh à la VM :

    gcloud compute ssh template-instance
  6. Installez pip :

    sudo apt-get update
    sudo apt-get -y upgrade \
    && sudo apt-get install -y python-pip python-dev
  7. Installez TensorFlow :

    sudo pip install tensorflow
    
  8. (Facultatif) Exécutez la procédure permettant de vérifier votre installation.

  9. Saisissez exit pour revenir à Cloud Shell.

  10. Vérifiez la version de TensorFlow en cours d'exécution dans votre instance Compute Engine :

    sudo python -c 'import tensorflow as tf; print(tf.__version__)'
  11. Si la version est antérieure à 1.2.1, mettez-la à jour avec pip.

    sudo pip install --upgrade tensorflow

Créer un bucket Cloud Storage

Ensuite, créez un bucket Cloud Storage pour stocker vos fichiers MNIST. Procédez comme indiqué ci-dessous.

  1. Créez le bucket Cloud Storage régional destiné à accueillir les fichiers de données MNIST qui doivent être partagés entre les instances de nœud de calcul :

    MNIST_BUCKET="mnist-$RANDOM"
    gsutil mb -c regional -l us-east1 gs://${MNIST_BUCKET}
  2. Utilisez le script ci-dessous pour télécharger les fichiers de données MNIST et les copier dans le bucket.

    sudo ./scripts/create_records.py
    gsutil cp /tmp/data/train.tfrecords gs://${MNIST_BUCKET}/data/
    gsutil cp /tmp/data/test.tfrecords gs://${MNIST_BUCKET}/data/

Créer l'image du modèle et les instances d'entraînement

Pour créer les instances maîtres, de nœuds de calcul et de serveurs de paramètres, convertissez l'instance du modèle en image, puis utilisez l'image pour créer chaque instance.

  1. Désactivez la suppression automatique pour la VM template-instance de façon à conserver le disque lors de la suppression de la VM.

    gcloud compute instances set-disk-auto-delete template-instance \
    --disk template-instance --no-auto-delete
  2. Supprimez template-instance.

    gcloud compute instances delete template-instance
  3. Créez l'image template-image à partir du disque template-instance.

    gcloud compute images create template-image \
    --source-disk template-instance
  4. Créez les autres instances. Pour ce tutoriel, créez quatre instances nommées master-0, worker-0, worker-1 et ps-0. Le champ d'application storage-rw autorise les instances à accéder à votre bucket Cloud Storage. Veillez à délimiter les noms d'instances avec des espaces comme ci-dessous :

    gcloud compute instances create \
    master-0 worker-0 worker-1 ps-0 \
    --image template-image \
    --machine-type n1-standard-4 \
    --scopes=default,storage-rw

Le cluster est prêt à exécuter le code TensorFlow distribué.

Exécuter le code TensorFlow distribué

Dans cette section, vous allez utiliser un script pour demander à toutes vos instances de VM d'exécuter le code TensorFlow afin d'entraîner le modèle.

  1. Dans Cloud Shell, exécutez la commande ci-dessous à partir du répertoire cloudml-dist-mnist-example.

    ./scripts/start-training.sh gs://${MNIST_BUCKET}

    Le script nommé start-training.sh transfère le code sur chaque VM et envoie les paramètres requis pour démarrer sur chaque machine le processus TensorFlow permettant de créer le cluster distribué. Le flux de sortie obtenu dans Cloud Shell montre les valeurs de perte et de justesse de l'ensemble de données de test.

    Valeurs de précision affichées par le terminal

    Une fois l'entraînement terminé, le script affiche l'emplacement des fichiers de modèle que vous venez de générer.

    Trained model is stored in gs://${MNIST_BUCKET}/job_[TIMESTAMP]/export/Servo/[JOB_ID]/
  2. Copiez le chemin d'accès du bucket, car vous en aurez besoin lors des prochaines étapes.

Publier le modèle pour réaliser des prédictions

Vous avez généré un nouveau modèle vous permettant de réaliser des prédictions. Même si l'entraînement de modèles plus sophistiqués requiert du code TensorFlow plus complexe, la configuration des ressources de calcul et de stockage demeure similaire.

L'entraînement du modèle ne représente que la première partie du travail. Vous devez connecter votre modèle à votre application ou l'encapsuler dans un service d'API permettant l'authentification, puis assurer son fonctionnement dans tous les cas. Il reste encore un nombre assez important de tâches d'ingénierie à accomplir pour rendre votre modèle utile.

AI Platform peut vous aider à effectuer une partie de ce travail. Cet outil fournit une version entièrement gérée de TensorFlow s'exécutant sur Google Cloud Platform. AI Platform vous permet de disposer de toutes les puissantes fonctionnalités de TensorFlow sans avoir à configurer d'infrastructure supplémentaire ni à installer de logiciels. Vous pouvez automatiquement faire évoluer votre processus d'entraînement distribué de façon à utiliser autant de processeurs ou de GPU que nécessaire, tout en ne payant que pour les ressources dont vous vous servez.

Étant donné qu'AI Platform exécute TensorFlow en arrière-plan, tout votre travail peut être transféré. Vous ne dépendez donc pas d'un outil propriétaire.

Suivez le tutoriel Utiliser la plate-forme TensorFlow distribuée avec Cloud Datalab afin de reprendre le même exemple de code pour entraîner votre modèle à l'aide d'AI Platform.

Vous pouvez également déployer votre modèle sur AI Platform pour les prédictions. Suivez la procédure ci-dessous pour déployer votre modèle sur AI Platform. Vous pourrez ainsi le tester et l'appliquer rapidement à grande échelle, avec tous les critères de sécurité et de fiabilité que vous attendez d'un service géré par Google.

La procédure ci-dessous utilise le chemin d'accès du bucket de modèles qui a été renvoyé précédemment par le script start-training.sh.

  1. Affichez de nouveau le chemin de sortie du bucket Cloud Storage contenant les modèles générés. Il se présente au format suivant, où [JOB_ID] correspond à l'ID de la tâche. Vous allez utiliser ce chemin à l'étape suivante :

    MODEL_BUCKET: gs://${MNIST_BUCKET}/job_[TIMESTAMP]/export/Servo/[JOB_ID]
  2. Définissez une nouvelle version v1 de votre modèle à l'aide de l'outil de ligne de commande gcloud, puis faites-la pointer vers les fichiers de modèles dans votre bucket. L'exécution de cette commande peut prendre plusieurs minutes. Remplacez [YOUR_BUCKET_PATH] par le chemin de sortie affiché à l'étape précédente. Ce dernier commence par gs://.

    MODEL="MNIST"
    MODEL_BUCKET=[YOUR_BUCKET_PATH]
    gcloud ml-engine models create ${MODEL} --regions us-east1
    gcloud ml-engine versions create \
     --origin=${MODEL_BUCKET} --model=${MODEL} v1
  3. Définissez la version par défaut de votre modèle sur v1 :

    gcloud ml-engine versions set-default --model=${MODEL} v1

Le modèle fonctionne maintenant avec AI Platform et peut traiter les prédictions. Dans la section suivante, vous allez utiliser Cloud Datalab pour réaliser et visualiser des prédictions.

Réaliser des prédictions avec Cloud Datalab

Pour tester vos prédictions, créez une instance Cloud Datalab qui fait appel à des notebooks Jupyter pour exécuter du code.

  1. Dans Cloud Shell, saisissez la commande ci-dessous pour créer une instance Cloud Datalab :

    datalab create mnist-datalab
    
  2. Ouvrez la page répertoriant les notebooks Cloud Datalab en cliquant sur Aperçu Web de Cloud Shell (l'icône carrée dans l'angle supérieur droit).

  3. Cliquez sur Modifier le port, puis sélectionnez l'option Port 8081 pour ouvrir un nouvel onglet dans votre navigateur.

  4. Dans l'application Cloud Datalab, créez un notebook en cliquant sur Ajouter un notebook dans l'angle supérieur droit.

  5. Collez le texte ci-dessous dans la première cellule du nouveau notebook.

    %%bash
    wget https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-dist-mnist-example/master/notebooks/Online%20prediction%20example.ipynb
    cat Online\ prediction\ example.ipynb > Untitled\ Notebook.ipynb
  6. Cliquez sur Exécuter en haut de la page pour télécharger le notebook Online prediction example.ipynb. Le script copie le contenu du notebook distant dans celui qui est actif.

  7. Actualisez la page du navigateur pour charger le nouveau contenu du notebook. Ensuite, sélectionnez la première cellule contenant le code JavaScript, puis cliquez sur Exécuter.

  8. Faites défiler la page vers le bas jusqu'au panneau de dessin et tracez un chiffre avec le curseur.

    Chiffre 3 dessiné avec un curseur

  9. Cliquez dans la cellule suivante pour l'activer, puis sur la flèche vers le bas située à côté du bouton Exécuter en haut de la page. Ensuite, sélectionnez Exécuter à partir de cette cellule.

    Le résultat de la prédiction est un tableau de longueur 10, dans lequel chaque index (0 à 9) contient une valeur correspondant au chiffre saisi. Plus ce chiffre est proche de 1, plus il est probable que cet index corresponde au chiffre que vous avez saisi. Vous pouvez constater que la valeur correspondant au chiffre 3, qui est mise en surbrillance dans la liste, est très proche de 1. Par conséquent, il est fort probable que 3 soit le chiffre que vous avez saisi.

    PROBABILITIES
    [4.181503356903704e-07,
    7.12400151314796e-07,
    0.00017898145597428083,
    0.9955494403839111,
    5.323939553103507e-11,
    0.004269002005457878,
    7.927398321116996e-11,
    1.2688398953741853e-07,
    1.0825967819982907e-06,
    2.2037748692582682e-07]

La dernière cellule du notebook affiche un histogramme indiquant clairement que votre chiffre (3, dans ce cas) a été prédit.

Histogramme montrant que le chiffre 3 a été sélectionné

Nettoyer

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud Platform :

  1. Supprimez la version de votre modèle.

    gcloud ml-engine versions delete v1 --model=MNIST
  2. Supprimez le modèle.

    gcloud ml-engine models delete MNIST
  3. Supprimez votre bucket Cloud Storage.

    gsutil rm -r gs://${MNIST_BUCKET}
  4. Supprimez vos VM, y compris Cloud Datalab.

    gcloud compute instances delete master-0 worker-0 worker-1 ps-0 mnist-datalab
  5. Supprimez votre image de modèle de VM.

    gcloud compute images delete template-image
  6. Supprimez votre disque persistant Cloud Datalab.

    gcloud compute disks delete mnist-datalab-pd --zone us-east1-c

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…