Ce tutoriel propose une vue d'ensemble du modèle MNIST, décrit comment télécharger l'exemple de code de TPU MNIST TensorFlow et fournit un guide pour l'exécution du code sur Cloud TPU.
Clause de non-responsabilité
Ce tutoriel utilise un ensemble de données tiers. Google ne formule aucune déclaration ni garantie quant à la validité ou à tout autre aspect de cet ensemble de données.
Description du modèle
L'ensemble de données MNIST contient un grand nombre d'images de chiffres manuscrits compris entre 0 et 9, ainsi que les étiquettes qui identifient le chiffre de chaque image.
Ce tutoriel entraîne un modèle de machine learning afin de classer des images en se basant sur l'ensemble de données MNIST. Après l'apprentissage, le modèle classe les images entrantes en 10 catégories (0 à 9) en fonction de ce qu'il a appris au sujet des images manuscrites de l'ensemble de données MNIST. Vous pouvez ensuite envoyer une image inconnue au modèle, qui va en identifier le chiffre en se basant sur l'apprentissage reçu.
L'ensemble de données MNIST a été divisé en trois parties :
- 60 000 exemples de données d'entraînement
- 10 000 exemples de données de test
- 5 000 exemples de données de validation
Le modèle est constitué d'une combinaison de sept couches :
- deux couches de convolution
- deux couches de pooling maximal
- deux couches denses (entièrement connectées)
- une couche d'abandon
La perte est calculée par entropie croisée catégorique.
Cette version du modèle MNIST utilise l'API Keras, une méthode recommandée pour créer et exécuter un modèle de machine learning sur un Cloud TPU.
Keras simplifie le processus de développement du modèle en masquant la plupart des implémentations de bas niveau, ce qui facilite également le passage du TPU à d'autres plates-formes de test, comme les GPU ou les processeurs.
Objectifs
- Créer un bucket Cloud Storage pour stocker votre ensemble de données et la sortie du modèle
- Exécuter la tâche d'entraînement
- Vérifier les résultats
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- des PVC de disque persistant
- Cloud TPU
- Cloud Storage
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Cette section fournit des informations sur la configuration du bucket Cloud Storage et d'une VM Compute Engine.
Ouvrez une fenêtre Cloud Shell.
Créez une variable pour l'ID de votre projet.
export PROJECT_ID=project-id
Configurez Google Cloud CLI pour utiliser le projet dans lequel vous souhaitez créer Cloud TPU.
gcloud config set project ${PROJECT_ID}
La première fois que vous exécutez cette commande dans une nouvelle VM Cloud Shell, une page
Authorize Cloud Shell
s'affiche. Cliquez surAuthorize
en bas de la page pour permettre àgcloud
d'effectuer des appels d'API GCP avec vos identifiants.Créez un compte de service pour le projet Cloud TPU.
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
La commande renvoie un compte de service Cloud TPU au format suivant :
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
Créez un bucket Cloud Storage à l'aide de la commande suivante :
gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 gs://bucket-name
Ce bucket Cloud Storage stocke les données que vous utilisez pour entraîner votre modèle, ainsi que les résultats de l'entraînement. La commande
gcloud
utilisée dans ce tutoriel définit les autorisations par défaut pour le compte de service Cloud TPU que vous avez configuré à l'étape précédente. Si vous souhaitez utiliser des autorisations plus précises, vérifiez les autorisations de niveau d'accès.Lancez une VM Compute Engine et Cloud TPU à l'aide de la commande
gcloud
. La commande à utiliser varie selon que vous utilisez des VM TPU ou des nœuds TPU. Pour en savoir plus, consultez la page Architecture du système.VM TPU
$ gcloud compute tpus tpu-vm create mnist-tutorial \ --zone=us-central1-b \ --accelerator-type=v3-8 \ --version=tpu-vm-tf-2.12.0 \ --preemptible
Description des options de commande
zone
- Zone dans laquelle vous prévoyez de créer votre Cloud TPU.
accelerator-type
- Type de Cloud TPU à créer.
version
- Version du logiciel Cloud TPU.
preemptible
- Les TPU préemptifs coûtent moins cher, mais peuvent être arrêtés à tout moment.
Nœud TPU
$ gcloud compute tpus execution-groups create \ --name=mnist-tutorial \ --zone=us-central1-b \ --tf-version=2.12.0 \ --machine-type=n1-standard-1 \ --accelerator-type=v3-8 \ --preemptible
Description des options de commande
name
- Nom du Cloud TPU à créer.
zone
- Zone dans laquelle vous prévoyez de créer votre Cloud TPU.
tf-version
- Version de TensorFlow que la commande
gcloud
installe sur votre VM. machine-type
- Type de machine de la VM Compute Engine à créer.
accelerator-type
- Type de Cloud TPU à créer.
preemptible
- Les TPU préemptifs coûtent moins cher, mais peuvent être arrêtés à tout moment.
Pour en savoir plus sur la commande
gcloud
, consultez la documentation de référence de gcloud.Une fois l'exécution de la commande
gcloud compute tpus
terminée, vérifiez que l'invite de l'interface système est passée deusername@projectname
àusername@vm-name
. Cette modification indique que vous êtes maintenant connecté à votre VM Compute Engine.Si vous n'êtes pas connecté à l'instance Compute Engine, vous pouvez vous connecter en exécutant la commande suivante :
VM TPU
gcloud compute tpus tpu-vm ssh mnist-tutorial --zone=us-central1-b
Nœud TPU
gcloud compute ssh mnist-tutorial --zone=us-central1-b
À mesure que vous appliquez ces instructions, exécutez chaque commande commençant par
(vm)$
dans la fenêtre de session de la VM.Créez une variable d'environnement pour le nom du TPU.
VM TPU
(vm)$ export TPU_NAME=local
Nœud TPU
(vm)$ export TPU_NAME=mnist-tutorial
Installez la configuration requise pour TensorFlow.
La commande à utiliser varie selon que vous utilisez des VM TPU ou des nœuds TPU.
VM TPU
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Nœud TPU
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
Entraîner le modèle
Le code source du modèle de TPU MNIST est disponible sur GitHub.
Définissez ces variables : Remplacez bucket-name par le nom de votre bucket :
(vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mnist (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data
Définissez la variable d'environnement
PYTHONPATH
.VM TPU
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
Nœud TPU
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
Accédez au répertoire où le modèle est stocké :
VM TPU
(vm)$ cd /usr/share/tpu/models/official/legacy/image_classification
Nœud TPU
(vm)$ cd /usr/share/models/official/legacy/image_classification
Exécutez le script d'entraînement MNIST :
(vm)$ python3 mnist_main.py \ --tpu=${TPU_NAME} \ --model_dir=${MODEL_DIR} \ --data_dir=${DATA_DIR} \ --train_epochs=10 \ --distribution_strategy=tpu \ --download
Description des options de commande
tpu
- Nom du Cloud TPU. S'il n'est pas spécifié lors de la configuration de la VM Compute Engine et du Cloud TPU, votre nom d'utilisateur est utilisé par défaut.
model_dir
- Bucket Cloud Storage où les points de contrôle et les résumés sont stockés pendant l'entraînement. Vous pouvez utiliser un dossier existant pour charger des points de contrôle précédemment créés sur un TPU de la même taille et de la même version TensorFlow.
data_dir
- Chemin d'accès Cloud Storage de l'entrée d'entraînement. Dans cet exemple, il est défini sur l'ensemble de données fake_imagenet.
train_epochs
- Nombre d'époques d'entraînement du modèle.
distribution_strategy
- Pour entraîner le modèle ResNet sur un Cloud TPU, définissez
distribution_strategy
surtpu
. download
- Si défini sur
true
, le script télécharge et prétraite l'ensemble de données MNIST s'il n'a pas déjà été téléchargé.
Le script d'entraînement s'exécute en moins de cinq minutes sur un Cloud TPU v3-8 et affiche un résultat semblable à celui-ci :
Run stats: { 'accuracy_top_1': 0.9762369990348816, 'eval_loss': 0.07863274961709976, 'loss': 0.1111728847026825, 'training_accuracy_top_1': 0.966645359992981 }
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Déconnectez-vous de l'instance Compute Engine, si vous ne l'avez pas déjà fait :
(vm)$ exit
Votre invite devrait maintenant être
username@projectname
, indiquant que vous êtes dans Cloud Shell.Supprimez vos ressources Cloud TPU et Compute Engine. La commande à utiliser pour supprimer vos ressources varie selon que vous utilisez des VM TPU ou des nœuds TPU. Pour en savoir plus, consultez la page Architecture du système.
VM TPU
$ gcloud compute tpus tpu-vm delete mnist-tutorial \ --zone=us-central1-b
Nœud TPU
$ gcloud compute tpus execution-groups delete mnist-tutorial \ --zone=us-central1-b
Vérifiez que les ressources ont été supprimées en exécutant la commande
gcloud compute tpus execution-groups list
. La suppression peut prendre plusieurs minutes. La sortie de la commande suivante ne doit inclure aucune des ressources créées dans ce tutoriel :VM TPU
$ gcloud compute tpus tpu-vm list --zone=us-central1-b
Nœud TPU
$ gcloud compute tpus execution-groups list --zone=us-central1-b
Supprimez votre bucket Cloud Storage à l'aide de
gsutil
, comme indiqué ci-dessous. Remplacez bucket-name par le nom de votre bucket Cloud Storage.$ gsutil rm -r gs://bucket-name
Étapes suivantes
Les tutoriels TensorFlow Cloud TPU permettent généralement d'entraîner le modèle à l'aide d'un exemple d'ensemble de données. Les résultats de cette formation ne sont pas utilisables pour l'inférence. Pour utiliser un modèle pour l'inférence, vous pouvez entraîner les données sur un ensemble de données accessible au public ou sur votre propre ensemble de données. Les modèles TensorFlow entraînés sur des Cloud TPU nécessitent généralement des ensembles de données au format TFRecord.
Vous pouvez utiliser l'exemple d'outil de conversion d'ensemble de données pour convertir un ensemble de données de classification d'images au format TFRecord. Si vous n'utilisez pas de modèle de classification d'images, vous devez convertir vous-même votre ensemble de données au format TFRecord. Pour en savoir plus, consultez la page TFRecord et tf.Example.
Réglages d'hyperparamètres
Pour améliorer les performances du modèle sur votre ensemble de données, vous pouvez régler ses hyperparamètres. Vous trouverez des informations sur les hyperparamètres communs à tous les modèles compatibles avec des TPU sur GitHub. Des informations sur les hyperparamètres spécifiques aux modèles sont disponibles dans le code source de chaque modèle. Pour en savoir plus sur ces réglages, consultez les pages Présentation des réglages d'hyperparamètres, Utiliser le service de réglage d'hyperparamètres et Régler les hyperparamètres.
Inférence
Une fois votre modèle entraîné, vous pouvez l'utiliser pour l'inférence (également appelée prédiction). AI Platform est une solution cloud permettant de développer, d'entraîner et de déployer des modèles de machine learning. Une fois un modèle déployé, vous pouvez utiliser le service AI Platform Prediction.
- Exécutez un colab Cloud TPU qui montre comment exécuter un modèle de classification d'images à l'aide de vos propres données d'image.
- Découvrez les autres tutoriels Cloud TPU.
- Apprenez à utiliser les outils de surveillance TPU dans TensorBoard.
- Vérifiez les performances sur un modèle à grande échelle en exécutant l'exemple ResNet.