Usa TPU interrumpibles

Un nodo TPU interrumpible es un nodo de Cloud TPU que se ejecuta por un precio mucho más bajo que los nodos normales. Sin embargo, Cloud TPU puede salir de estos nodos (interrumpirlos), en cualquier momento, si requiere acceso a los recursos para otro propósito.

Crear una TPU interrumpible

Puedes crear un nodo TPU interrumpible con Cloud Console, la herramienta de línea de comandos de gcloud o la utilidad ctpu.

Console

  1. Ve a la página de TPU en Compute Engine en la página principal.
  2. Haz clic en CREAR NODO TPU para abrir la página de creación de nodos TPU.
  3. En la parte inferior de la página "Crear un nodo de Cloud TPU", haz clic en Etiquetas y descripción para mostrar la opción de interrupción.
  4. Haz clic en la opción de interrupción para configurar este nuevo nodo TPU como interrumpible.
  5. Especifica los atributos restantes para este nodo TPU.
  6. En la parte inferior de la página, haz clic en Crear para crear el nodo TPU.

gcloud

Si necesitas una configuración personalizada, puede que elijas usar el comando de gcloud, en lugar de ctpu, a fin de crear y administrar tus recursos TPU. Para obtener más información sobre las configuraciones personalizadas, consulta la página Crea y borra TPU. Con el fin de crear una TPU interrumpible, usa el mismo comando gcloud compute tpus create que se emplea para crear una TPU normal, pero agrega la marca --preemptible:

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

Donde:

  • demo-tpu es un nombre para identificar la TPU que creas.
  • --version especifica la versión de TensorFlow que se usará con la TPU.
  • --preemptible permite que Cloud TPU interrumpa la TPU.

ctpu

Con el fin de crear una TPU interrumpible, usa el mismo comando de ctpu up que se emplea para crear una TPU normal, pero agrega la marca --preemptible:

$ ctpu up --preemptible

Ten en cuenta que debes especificar la marca --preemptible cada vez que ejecutas ctpu up para la TPU interrumpible. Las marcas de la línea de comandos y sus valores predeterminados se aplican a cada invocación de comando de forma individual.

El estado interrumpible de la TPU es independiente de cualquier estado interrumpible de la instancia de VM. Consulta el debate sobre VM y TPU interrumpibles que figura a continuación.

Precios y cuotas para las TPU interrumpibles

Los precios para las TPU interrumpibles son considerablemente menores que los de las TPU normales. Para obtener más detalles, consulta la guía de precios. Las TPU no se cobran si se interrumpen durante el primer minuto posterior a su creación.

Por lo general, la cuota para las TPU interrumpibles es más alta y está separada de la de las TPU normales. Consulta la página de cuotas.

VM interrumpibles y TPU interrumpibles

Como se describe en la guía de inicio rápido, necesitas una máquina virtual (VM) de Compute Engine para conectarte a una TPU. Ten en cuenta que el estado interrumpible de la TPU es independiente del estado interrumpible de la VM. Puedes definir tu TPU como interrumpible y la VM como no interrumpible, o viceversa. También puedes definir ambas como interrumpibles.

La combinación más probable es una TPU interrumpible y una VM no interrumpible. Ten en cuenta los siguientes puntos:

  • Es probable que los cargos aplicados a la VM sean bajos en relación con los cargos aplicados a la TPU. Los cargos de la VM dependen del tipo de máquina que uses. Consulta la página de precios para ver un ejemplo simple de los costos relativos.
  • Cloud TPU no coordina la interrupción de la VM ni de la TPU. Si estableces que ambas son interrumpibles, la VM y la TPU pueden interrumpirse en diferentes momentos.
  • Si Compute Engine interrumpe la VM, se te cobrará por la TPU (a menos que la TPU en sí misma sea interrumpible). Ten en cuenta que la TPU está inactiva, al tiempo que la VM está interrumpida.
  • Las instancias interrumpibles, como las instancias de VM de Compute Engine y Cloud TPU, siempre se interrumpen después de que se ejecutan durante 24 horas. Ciertas acciones restablecen este contador de 24 horas.

Puedes usar el comando de ctpu o el de gcloud para definir una VM interrumpible:

ctpu

Con el fin de crear una VM interrumpible, usa el mismo comando de ctpu up que se emplea para crear una TPU con una VM normal, pero agrega la marca --preemptible-vm:

$ ctpu up --preemptible-vm

Ten en cuenta que debes especificar la marca --preemptible-vm cada vez que ejecutas ctpu up para la TPU interrumpible. Las marcas de la línea de comandos y sus valores predeterminados se aplican a cada invocación de comando de forma individual.

gcloud

Si necesitas una configuración personalizada, puede que elijas usar el comando de gcloud, en lugar de ctpu, a fin de crear y administrar tus recursos TPU. Para obtener más información sobre las configuraciones personalizadas, consulta la página Crea y borra TPU. Con el fin de crear una VM interrumpible, usa el mismo comando gcloud compute instances create que se emplea para crear una VM normal, pero agrega la marca --preemptible:

$ 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

Donde:

  • tpu-demo-vm es el nombre para identificar la instancia de VM que creas.
  • --machine-type=n1-standard-2 es un tipo de máquina estándar con 4 CPU virtuales y 15 GB de memoria. Consulta los tipos de máquinas disponibles.
  • --image-project=ml-images es una colección compartida de imágenes que pone a disposición la imagen tf-1-15 para que la uses.
  • --image-family=tf-1-15 es una imagen con el paquete pip necesario para TensorFlow.
  • --scopes=cloud-platform permite que la VM acceda a las API de Google Cloud.
  • --preemptible permite que Compute Engine interrumpa la instancia de VM.

Consulta la documentación Crea e inicia una instancia de VM interrumpible de Compute Engine.

Cómo detectar si se interrumpió una TPU

Puedes usar el comando de ctpu o el de gcloud para verificar si el servicio de Cloud TPU interrumpió tu TPU:

ctpu

Verifica el estado de las TPU con el siguiente comando:

$ ctpu status

El comando anterior muestra los detalles de las TPU que creaste. El valor que se muestra para la TPU interrumpible indica si la TPU es interrumpible o no. Si el Estado de la TPU que se muestra es READY, la TPU no se interrumpió. Si la TPU se interrumpió, el estado cambia de READY a PREEMPTED.

gcloud

Enumera las TPU disponibles:

(vm)$ gcloud compute tpus list

El comando anterior muestra los detalles de las TPU que creaste. Si el ESTADO que se muestra es READY, la TPU no se interrumpió. Si la TPU se interrumpió, el estado cambia de READY a PREEMPTED. Por ejemplo:

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

Detectar si se ha interrumpido una instancia de VM

Con el fin de verificar si la instancia de VM se interrumpió, usa el comando gcloud compute operations list para obtener una lista de las operaciones recientes del sistema: Agrega un filtro name para mostrar solo las instancias que se están ejecutando actualmente o agrega el filtro operationType a fin de mostrar solo los recursos que se interrumpieron. Por ejemplo, usa el siguiente comando para mostrar solo las instancias con el nombre de instancia especificado:

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

En el ejemplo siguiente, solo se muestran los recursos que se han interrumpido:

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

Si deseas obtener más detalles, consulta la guía de Compute Engine.

Cómo diseñar la aplicación de aprendizaje automático para que se ejecute en TPU interrumpibles

A fin de asegurarse de que la aplicación sea resistente a los reinicios de la VM y la TPU, guarda los puntos de control del modelo de forma regular y configura la aplicación para que restablezca el punto de control más reciente durante el reinicio.

La API de TPUEstimator de TensorFlow se encarga de guardar y restablecer los puntos de control del modelo. Si usas TPUEstimator, no necesitas preocuparte por guardar o restablecer los puntos de control de tus TPU o VM. Obtén más información sobre cómo usar TPUEstimator con Cloud TPU .

Como práctica recomendada, sugerimos usar TPUEstimator con Cloud TPU como ya se describió. Sin embargo, si deseas investigar cómo escribir la función de guardado y restablecimiento de los puntos de control en tu modelo, consulta los siguientes recursos en el módulo tf.train de TensorFlow:

Qué sigue