Utiliser des TPU préemptifs

Un nœud TPU préemptif est un nœud Cloud TPU qui s'exécute à un coût bien inférieur à celui des nœuds normaux. Toutefois, Cloud TPU peut quitter (préempter) ces nœuds à tout moment s'il a besoin d'accéder aux ressources à d'autres fins.

Créer un TPU préemptif

Vous pouvez créer un nœud TPU préemptif à l'aide de Cloud Console, de l'outil de ligne de commande gcloud ou de l'utilitaire ctpu.

Console

  1. Dans l'onglet Compute Engine de la page principale, accédez à la page TPU.
  2. Cliquez sur CRÉER UN NŒUD TPU pour ouvrir la page de création de nœud TPU.
  3. Au bas de la page "Créer une instance Cloud TPU", cliquez sur Étiquettes et description pour afficher l'option de préemption.
  4. Cliquez sur l'option de préemption pour rendre ce nouveau nœud TPU préemptif.
  5. Spécifiez les attributs restants pour ce nœud TPU.
  6. Au bas de la page, cliquez sur Créer pour créer le nœud TPU.

gcloud

Si vous avez besoin d'une configuration personnalisée, vous pouvez décider d'utiliser la commande gcloud au lieu de ctpu pour créer et gérer vos ressources TPU. Pour en savoir plus sur les configurations personnalisées, consultez la page Créer et supprimer des TPU. Pour créer un TPU préemptif, utilisez la même commande gcloud compute tpus create que lors de la création d'un TPU normal, mais ajoutez l'indicateur --preemptible comme suit :

$ gcloud compute tpus create demo-tpu \
  --version=2.1 \
  --preemptible
  

où :

  • demo-tpu est un nom permettant d'identifier le TPU que vous créez.
  • --version spécifie la version de TensorFlow à utiliser avec le TPU.
  • --preemptible permet à Cloud TPU de préempter le TPU.

ctpu

Pour créer un TPU préemptif, utilisez la même commande ctpu up que lors de la création d'un TPU normal, mais ajoutez l'indicateur --preemptible comme suit :

$ ctpu up --preemptible

Notez que vous devez spécifier l'indicateur --preemptible chaque fois que vous exécutez ctpu up pour le TPU préemptif. Les indicateurs de ligne de commande et leurs valeurs par défaut s'appliquent individuellement à chaque appel de commande.

L'état de préemption du TPU est indépendant de tout état de préemption de votre instance de VM. Consultez la discussion sur les VM préemptives et TPU préemptifs ci-dessous.

Prix et quota applicables aux TPU préemptifs

Le prix des TPU préemptifs est nettement inférieur à celui des TPU normaux. Pour en savoir plus, consultez la page des tarifs. Les TPU préemptés dans la minute qui suit leur création ne vous sont pas facturés.

Le quota applicable aux TPU préemptifs est généralement plus élevé et est distinct du quota applicable aux TPU normaux. Consultez la page de quota.

VM préemptives et TPU préemptifs

Comme décrit dans le guide de démarrage rapide, vous avez besoin d'une machine virtuelle Compute Engine pour vous connecter à un TPU. Notez que l'état préemptif du TPU est indépendant du statut préemptif de la VM. Vous pouvez définir votre TPU comme préemptif et la VM comme non préemptive, ou inversement. Vous pouvez également définir les deux comme étant préemptifs.

La combinaison la plus probable est un TPU préemptif et une VM non préemptive. Veuillez noter les points suivants :

  • Les frais associés à la VM sont susceptibles d'être faibles par rapport aux frais du TPU. Les frais de VM dépendent du type de machine que vous utilisez. Consultez la page des tarifs pour un exemple simple des coûts relatifs.
  • Cloud TPU ne coordonne pas la préemption de la VM et celle du TPU. Si vous les définissez tous les deux comme préemptifs, la VM et le TPU peuvent être préemptés à des moments différents.
  • Si Compute Engine préempte votre VM, le TPU vous sera quand même facturé (sauf si le TPU est lui-même préempté). Veuillez noter que le TPU est inactif lorsque la VM est préemptée.
  • Les instances préemptives, à la fois des VM Compute Engine et des instances Cloud TPU, sont toujours préemptées après 24 heures d'exécution. Certaines actions réinitialisent ce délai.

Vous pouvez utiliser la commande ctpu ou la commande gcloud pour définir une VM préemptive comme suit :

ctpu

Pour créer une VM préemptive, utilisez la même commande ctpu up que lors de la création d'un TPU avec une VM normale, mais ajoutez l'indicateur --preemptible-vm comme suit :

$ ctpu up --preemptible-vm

Notez que vous devez spécifier l'indicateur --preemptible-vm chaque fois que vous exécutez ctpu up pour le TPU préemptif. Les indicateurs de ligne de commande et leurs valeurs par défaut s'appliquent individuellement à chaque appel de commande.

gcloud

Si vous avez besoin d'une configuration personnalisée, vous pouvez décider d'utiliser la commande gcloud au lieu de ctpu pour créer et gérer vos ressources TPU. Pour en savoir plus sur les configurations personnalisées, consultez la page Créer et supprimer des TPU. Pour créer une VM préemptive, utilisez la même commande gcloud compute instances create que lors de la création d'une VM normale, mais ajoutez l'indicateur --preemptible comme suit :

$ gcloud compute instances create tpu-demo-vm \
  --machine-type=n1-standard-2 \
  --image-project=ml-images \
  --image-family=tf-1-15 \
  --scopes=cloud-platform \
  --preemptible

où :

  • tpu-demo-vm est un nom permettant d'identifier l'instance de VM que vous créez.
  • --machine-type=n1-standard-2 est un type de machine standard avec 4 processeurs virtuels et 15 Go de mémoire. Consultez les types de machines disponibles.
  • --image-project=ml-images est une collection partagée d'images qui met l'image tf-1-15 à votre disposition.
  • --image-family=tf-1-15 est une image dotée du package PIP requis pour TensorFlow.
  • --scopes=cloud-platform permet à la VM d'accéder aux API Google Cloud.
  • --preemptible permet à Compute Engine de préempter l'instance de VM.

Consultez la documentation de Compute Engine sur la création d'instances de VM préemptives.

Détecter si un TPU a été préempté

Vous pouvez utiliser la commande ctpu ou la commande gcloud pour vérifier si le service Cloud TPU a préempté votre TPU comme suit :

ctpu

Vérifiez l'état de vos TPU :

$ ctpu status

La commande ci-dessus affiche les détails des TPU que vous avez créés. La valeur affichée pour TPU Preemptible indique si le TPU est préemptif ou non. Si l'état du TPU correspond à READY, le TPU n'a pas été préempté. Si le TPU a été préempté, l'état passe de READY à PREEMPTED.

gcloud

Répertoriez les TPU disponibles :

(vm)$ gcloud compute tpus list

La commande ci-dessus affiche les détails des TPU que vous avez créés. Si l'ÉTAT affiché est READY, le TPU n'a pas été préempté. Si le TPU a été préempté, l'état passe de READY à PREEMPTED. Exemple :

NAME       ZONE           ACCELERATOR_TYPE  NETWORK_ENDPOINT   NETWORK  RANGE          STATUS
demo-tpu   us-central1-b  v2-8              10.240.1.2:8470    default  10.240.1.0/29  PREEMPTED

Détecter si une instance de VM a été préemptée

Pour vérifier si l'instance de VM a été préemptée, utilisez la commande gcloud compute operations list pour obtenir la liste des opérations système récentes comme suit : Ajoutez un filtre name pour n'afficher que les instances en cours d'exécution ou ajoutez le filtre operationType pour n'afficher que les ressources préemptées. Par exemple, utilisez la commande suivante pour n'afficher que les instances portant le nom d'instance spécifié :

$ gcloud compute operations list--filter="name=( 'NAME' my-vm)"

L'exemple suivant n'affiche que les ressources qui ont été préemptées :

$ gcloud compute operations list --filter="operationType=compute.instances.preempted"

Pour plus de détails, consultez le guide Compute Engine.

Concevoir votre application de machine learning pour qu'elle s'exécute sur des TPU préemptifs

Vous devez vous assurer que votre application est résiliente à tout redémarrage de la VM et du TPU. Pour cela, enregistrez régulièrement des points de contrôle pour le modèle et configurez votre application pour qu'elle restaure le dernier point de contrôle en cas de redémarrage.

L'API TensorFlow TPUEstimator se charge de sauvegarder et restaurer des points de contrôle du modèle pour vous. Si vous utilisez TPUEstimator, vous n'avez pas à vous soucier de l'enregistrement ou du rétablissement des points de contrôle de vos TPU ou VM. En savoir plus sur l'utilisation du module TPUEstimator avec Cloud TPU.

Il est fortement recommandé d'utiliser TPUEstimator avec Cloud TPU comme décrit ci-dessus. Toutefois, si vous souhaitez savoir comment écrire vous-même la fonctionnalité d'enregistrement et de restauration du point de contrôle dans votre modèle, consultez les ressources suivantes dans le module TensorFlow tf.train :

Étape suivante