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 à l'aide d'une entropie croisée catégorielle.
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 :
- Compute Engine
- 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 autorisergcloud
à effectuer des appels d'API Google Cloud 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.16.1-pjrt \
Description des options de commande
zone
- Zone dans laquelle vous prévoyez de créer votre Cloud TPU.
accelerator-type
- Le type d'accélérateur spécifie la version et la taille de la ressource Cloud TPU que vous souhaitez créer. Pour en savoir plus sur les types d'accélérateurs compatibles avec chaque version de TPU, consultez la section Versions de TPU.
version
- Version du logiciel Cloud TPU.
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 \
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.
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"
Lors de la création de votre TPU, si vous définissez le paramètre
--version
sur une version se terminant par-pjrt
, définissez les variables d'environnement suivantes pour activer l'environnement d'exécution PJRT:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
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
- Lorsque la valeur est
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. Le résultat 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é dans l'exemple suivant. 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 cet entraînement 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 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 que les ensembles de données soient 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 devrez convertir votre ensemble de données au format TFRecord. Pour en savoir plus, consultez TFRecord et tf.Example.
Réglage des hyperparamètres
Pour améliorer les performances du modèle avec votre ensemble de données, vous pouvez régler les hyperparamètres du modèle. Vous trouverez des informations sur les hyperparamètres communs à tous les modèles compatibles avec TPU sur GitHub. Des informations sur les hyperparamètres propres 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 du réglage des hyperparamètres et Régler les hyperparamètres.
Inférence
Une fois que vous avez entraîné votre modèle, vous pouvez l'utiliser pour l'inférence (également appelée prédiction). Vous pouvez utiliser le convertisseur d'inférence Cloud TPU pour préparer et optimiser un modèle TensorFlow pour l'inférence sur Cloud TPU v5e. Pour plus d'informations sur l'inférence sur Cloud TPU v5e, consultez la page Présentation de l'inférence pour Cloud TPU v5e.
- 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.