Cloud Bigtable para transmisión de datos

Cloud Bigtable es un sistema de almacenamiento estructurado de fila ancha, escalable y de baja latencia, que puede almacenar y entregar datos de entrenamiento para el modelo de aprendizaje automático. Con Cloud Bigtable, puedes transmitir los datos de entrenamiento a una velocidad muy alta para un uso eficiente de Cloud TPU.

En este instructivo, se muestra cómo entrenar el modelo ResNet-50 de TensorFlow en Cloud TPU con el uso de Cloud Bigtable para alojar los datos de entrenamiento. El proceso usa la integración de TensorFlow con Cloud Bigtable.

Renuncia de responsabilidad

En este instructivo se utiliza un conjunto de datos de terceros. Google no hace ninguna declaración ni entrega garantía alguna acerca de la validez o cualquier otro aspecto de este conjunto de datos.

Requisitos y limitaciones

Ten en cuenta la información que figura a continuación cuando definas la configuración:

  • Debes usar TensorFlow 1.11 o una versión superior para que sea compatible con Cloud Bigtable.
  • Cloud Bigtable se recomienda para trabajos de entrenamiento de alto rendimiento (escala de pod) en cantidades masivas de datos, a fin de procesar de cientos de gigabytes (GB) a cientos de terabytes (TB) a decenas de miles de gigabits por segundo (Gbps). Te recomendamos utilizar Cloud Storage para cargas de trabajo que no se ajusten a esta descripción. Nota: También recomendamos Cloud Bigtable para su uso en cargas de trabajo de aprendizaje por refuerzo (RL) en las que los datos de entrenamiento se generan en el momento.

Acerca del modelo y los datos

El modelo en este instructivo se base en Aprendizaje residual profundo para el reconocimiento de imágenes, que presentó por primera vez la arquitectura de la red residual (ResNet). En este instructivo, se usa la variante de 50 capas, conocida como ResNet-50.

El conjunto de datos de entrenamiento es ImageNet, que es una opción popular para entrenar sistemas de reconocimiento de imágenes.

En este instructivo, se usa TPUEstimator para entrenar el modelo. TPUEstimator se basa en tf.estimator, una API de TensorFlow de alto nivel, y es la forma recomendada de compilar y ejecutar un modelo de aprendizaje automático en Cloud TPU. La API simplifica el proceso de desarrollo del modelo mediante el ocultamiento de la mayor parte de la implementación de bajo nivel, lo que facilita el cambio entre Cloud TPU y otras plataformas como GPU o CPU.

Antes de comenzar

Antes de comenzar con este instructivo, verifica que el proyecto de Google Cloud Platform esté configurado de forma correcta.

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. Selecciona o crea un proyecto de GCP.

    Ir a la página Administrar recursos

  3. Asegúrate de tener habilitada la facturación para tu proyecto.

    Aprende a habilitar la facturación

  4. En esta explicación, se usan componentes facturables de GCP. Consulta la página de precios de Cloud TPU a fin de calcular los costos y sigue las instrucciones para limpiar los recursos una vez que termines de usarlos.

  5. Instala el SDK de Cloud, incluida la herramienta de línea de comandos de gcloud.

    Instalar el SDK de Cloud:

Además, para este instructivo, se requiere que ya tengas datos almacenados en Cloud Bigtable. Para obtener más información sobre cómo usar Cloud Bigtable, consulta la documentación de Cloud Bigtable.

Crea una instancia de Cloud Bigtable

Crea una instancia de Cloud Bigtable para transmitir los datos de entrenamiento:

  1. Ve a la página de Cloud Bigtable en GCP Console.

    Ir a la página de Cloud Bigtable

  2. Crea una instancia; para ello, especifica las siguientes opciones:

    • Nombre de la instancia: un nombre que te ayude a identificar la instancia.
    • ID de instancia: Un identificador permanente para la instancia.
    • Tipo de instancia: Selecciona Producción para obtener el mejor rendimiento.
    • Tipo de almacenamiento: selecciona HDD.
    • ID de clúster: un identificador permanente para el clúster.
    • Región: selecciona una región. Por ejemplo, us-central1. Como práctica recomendada, selecciona la misma región en la que planeas crear tu nodo TPU. Consulta la página sobre tipos y zonas de TPU para saber dónde están disponibles varios tipos de TPU.
    • Zona: selecciona una zona. Por ejemplo, us-central1-b. Como práctica recomendada, selecciona la misma zona en la que planeas crear tu nodo TPU. Consulta la página sobre tipos y zonas de TPU para saber dónde están disponibles varios tipos de TPU.

    Puedes dejar los otros valores en su configuración predeterminada. Si deseas obtener más detalles, consulta la guía para crear una instancia de Cloud Bigtable.

Descarga y configura la herramienta ctpu

En esta guía, se usa el Servicio de aprovisionamiento de Cloud TPU (ctpu) como una herramienta simple para configurar y administrar Cloud TPU. En la guía, también se supone que deseas ejecutar ctpu y el SDK de Cloud de forma local en lugar de usar Cloud Shell. El entorno de Cloud Shell no es adecuado para procedimientos prolongados como la descarga de datos de ImageNet, ya que se agota el tiempo de espera de Cloud Shell después de un período de inactividad.

  1. Sigue la guía de ctpu para descargar, instalar y configurar ctpu.

  2. Establece el proyecto, la zona y la región para el entorno de la herramienta gcloud y reemplaza YOUR-PROJECT-ID con tu ID del proyecto de GCP:

    $ gcloud config set project YOUR-PROJECT-ID
    $ gcloud config set compute/region us-central1
    $ gcloud config set compute/zone us-central1-b
    
  3. En Cloud Shell, escribe lo siguiente para verificar la configuración de ctpu:

    $ ctpu print-config
    

    Deberías ver un mensaje como este:

    2018/04/29 05:23:03 WARNING: Setting zone to "us-central1-b"
    ctpu configuration:
            name: [your TPU's name]
            project: [your-project-id]
            zone: us-central1-b
    If you would like to change the configuration for a single command invocation, please use the command line flags.
    If you would like to change the configuration generally, see `gcloud config configurations`.
    

    En el mensaje de salida, el name es el nombre de tu Cloud TPU (de forma predeterminada, tu nombre de usuario) y zone es la zona geográfica predeterminada (de forma predeterminada, us-central1-b) para tu nodo TPU. Consulta la página de tipos y zonas de TPU para saber dónde están disponibles varios tipos de TPU. Puedes cambiar el nombre, la zona y otras propiedades cuando ejecutes ctpu up como se describe a continuación.

Configurar permisos de acceso para Cloud TPU

Configura los siguientes permisos de acceso para la cuenta de servicio de Cloud TPU:

  1. Dale a Cloud TPU acceso a Cloud Bigtable para el proyecto de GCP (ten en cuenta que ctpu aplica algunos permisos de acceso de forma predeterminada, pero no este).

    $ ctpu auth add-bigtable
    

    Puedes verificar los permisos de Cloud TPU mediante la ejecución de este comando:

    $ ctpu auth list
    
  2. (Opcional) Actualiza los permisos de Cloud Storage. El comando ctpu up establece los permisos predeterminados para Cloud Storage. Si deseas obtener permisos más detallados, revisa y actualiza los permisos de nivel de acceso.

Crea una VM de Compute Engine y una Cloud TPU

Ejecuta el siguiente comando para configurar una máquina virtual (VM) de Compute Engine y una Cloud TPU con servicios asociados. Esta combinación de recursos y servicios se denomina conjunto de Cloud TPU:

$ ctpu up [optional: --name --zone]

Deberías ver un mensaje que sigue este patrón:

ctpu will use the following configuration:

   Name: [your TPU's name]
   Zone: [your project's zone]
   GCP Project: [your project's name]
   TensorFlow Version: 1.14
   VM:
     Machine Type: [your machine type]
     Disk Size: [your disk size]
     Preemptible: [true or false]
   Cloud TPU:
     Size: [your TPU size]
     Preemptible: [true or false]

OK to create your Cloud TPU resources with the above configuration? [Yn]:

Ingresa y; luego, presiona Intro para crear los recursos de Cloud TPU.

El comando ctpu up realiza las siguientes tareas:

  • Habilita los servicios de Compute Engine y Cloud TPU.
  • Crea una instancia de VM de Compute Engine con la última versión estable de TensorFlow instalada con anterioridad.
  • Crea una Cloud TPU con la versión correspondiente de TensorFlow y pasa el nombre de Cloud TPU a la instancia de VM de Compute Engine como una variable del entorno (TPU_NAME).
  • Otorga funciones de IAM específicas a la cuenta de servicio de Cloud TPU a fin de garantizar que Cloud TPU tenga acceso a los recursos que necesita del proyecto de GCP.
  • Realiza otras comprobaciones.
  • Accede a la instancia de VM de Compute Engine nueva.

Puedes ejecutar ctpu up tantas veces como quieras. Por ejemplo, si pierdes la conexión SSH con la instancia de VM de Compute Engine, ejecuta ctpu up para restablecer la conexión (si cambiaste los valores predeterminados de --name y --zone, debes especificarlos de nuevo cada vez que ejecutes ctpu up). Consulta la documentación de ctpu para obtener más información.

Verificar si has accedido a la instancia de VM

Cuando el comando ctpu up termina de ejecutarse, verifica que el mensaje de la shell haya cambiado del username@project al username@tpuname. Este cambio indica que accediste a la instancia de VM de Compute Engine.

Configurar algunas variables útiles

En los pasos siguientes, un prefijo (vm)$ indica que debes ejecutar el comando en la instancia de VM de Compute Engine en tu conjunto de Cloud TPU.

Configura algunas variables de entorno para simplificar los comandos en este instructivo:

  1. Configura una variable PROJECT y reemplaza YOUR-PROJECT-ID con tu ID del proyecto de GCP:

    (vm)$ export PROJECT=YOUR-PROJECT-ID
    
  2. Configura una variable STORAGE_BUCKET y reemplaza YOUR-BUCKET-NAME con el nombre de tu depósito de Cloud Storage:

    (vm)$ export STORAGE_BUCKET=gs://YOUR-BUCKET-NAME
    
  3. Configura una variable BIGTABLE_INSTANCE y reemplaza YOUR-INSTANCE-ID con el ID de la instancia de Cloud Bigtable que creaste con anterioridad:

    (vm)$ export BIGTABLE_INSTANCE=YOUR-INSTANCE-ID
    

Prepara los datos

Sube los datos a Bigtable. La aplicación de entrenamiento espera que tus datos de entrenamiento sean accesibles en Cloud Bigtable. Obtén instrucciones para subir tus datos a Bigtable en tensorflow_io / bigtable / README.md.

Configura TensorBoard (opcional)

TensorBoard ofrece un paquete de herramientas diseñado para presentar los datos de TensorFlow de forma visual. Cuando se lo utiliza en la supervisión, TensorBoard puede servir para identificar cuellos de botella en el procesamiento y sugerir formas de mejorar el rendimiento.

Si no necesitas supervisar los resultados del modelo en este momento, puedes omitir los pasos de configuración de TensorBoard.

Si deseas supervisar los resultados y el rendimiento del modelo, sigue la guía sobre cómo configurar TensorBoard.

Ejecuta el modelo ResNet-50

Si los datos se encuentran en la base de datos de Bigtable, estás listo para entrenar y probar el modelo ResNet-50 en tu Cloud TPU mediante la transmisión de los datos de entrenamiento desde Cloud Bigtable. La aplicación de entrenamiento escribe el modelo entrenado y los puntos de control intermedios en Cloud Storage.

Ejecuta los siguientes comandos en la instancia de VM de Compute Engine:

  1. Agrega la carpeta de nivel superior /models a la ruta de Python:

    (vm)$ export PYTHONPATH="$PYTHONPATH:/usr/share/tpu/models"
    
  2. Ve al directorio en la instancia de VM de Compute Engine en el que está preinstalado el modelo ResNet-50:

    (vm)$ cd /usr/share/tpu/models/official/resnet/
    
  3. Ejecuta la secuencia de comandos de entrenamiento:

    (vm)$ python resnet_main.py \
      --tpu=$TPU_NAME \
      --model_dir=${STORAGE_BUCKET}/resnet \
      --bigtable_project=$PROJECT \
      --bigtable_instance=$BIGTABLE_INSTANCE \
      --bigtable_table=$TABLE_NAME \
      --bigtable_column_family=$FAMILY_NAME \
      --bigtable_column_qualifier=$COLUMN_QUALIFIER \
      --bigtable_train_prefix=$ROW_PREFIX_TRAIN \
      --bigtable_eval_prefix=$ROW_PREFIX_EVAL
    
    • --tpu especifica el nombre de Cloud TPU. Ten en cuenta que ctpu pasa este nombre a la instancia de VM de Compute Engine como una variable de entorno (TPU_NAME).
    • --model_dir especifica el directorio en el que se almacenan los puntos de control y los resúmenes durante el entrenamiento de modelos. Si la carpeta no existe, el programa crea una. Cuando se usa una Cloud TPU, model_dir debe ser una ruta de Cloud Storage (gs://...). Puedes volver a usar un directorio existente para cargar datos de puntos de control actuales y almacenar puntos de control adicionales siempre que los anteriores se hayan creado con una TPU del mismo tamaño y la misma versión de Tensorflow.
    • --bigtable_project especifica el identificador del proyecto de GCP para la instancia de Cloud Bigtable que contiene tus datos de entrenamiento. Si no proporcionas este valor, el programa supone que tu Cloud TPU y la instancia de Cloud Bigtable están en el mismo proyecto de GCP.
    • --bigtable_instance especifica el ID de la instancia de Cloud Bigtable que contiene tus datos de entrenamiento.
    • --bigtable_table especifica el nombre de la tabla de Cloud Bigtable que contiene tus datos de entrenamiento.
    • --bigtable_column_family especifica el nombre de la familia de Cloud Bigtable.
    • --bigtable_column_qualifier especifica el nombre del calificador de columna de Cloud Bigtable. Consulta la descripción general de Cloud Bigtable para obtener una descripción del modelo de almacenamiento.

Próximos pasos

El procedimiento anterior entrena el modelo ResNet-50 durante 90 ciclos de entrenamiento y evalúa el modelo cada 1,251 pasos. Si deseas obtener información sobre los valores predeterminados que utiliza el modelo y las marcas que puedes usar para cambiar tales valores, consulta el código y el archivo README para el modelo ResNet-50 de TensorFlow. Con las marcas predeterminadas, el modelo debería entrenar con una exactitud superior al 76%.

En nuestras pruebas, Cloud Bigtable proporciona una capacidad de procesamiento muy elevada para las cargas de trabajo como el entrenamiento de ImageNet, lo que admite una capacidad de procesamiento de análisis de cientos de megabytes por segundo por nodo.

Limpia

Para evitar que se apliquen cargos a tu cuenta de GCP por los recursos usados en este tema, realiza los siguientes pasos:

  1. Desconéctate de la VM de Compute Engine:

    (vm)$ exit
    

    El mensaje ahora debería mostrar user@projectname, que indica que estás en Cloud Shell.

  2. En Cloud Shell, ejecuta ctpu delete con la marca --zone que usaste cuando configuraste la Cloud TPU para borrar la VM de Compute Engine y la Cloud TPU:

    $ ctpu delete [optional: --zone]
    
  3. Ejecuta ctpu status para asegurarte de no tener instancias asignadas y así evitar cargos innecesarios por el uso de TPU. La eliminación puede tardar varios minutos. Una respuesta como la que se muestra a continuación indica que no hay más instancias asignadas:

    2018/04/28 16:16:23 WARNING: Setting zone to "us-central1-b"
    No instances currently exist.
            Compute Engine VM:     --
            Cloud TPU:             --
    
  4. Ejecuta gsutil como se muestra y reemplaza YOUR-BUCKET-NAME por el nombre del depósito de Cloud Storage que creaste para este instructivo:

    $ gsutil rm -r gs://YOUR-BUCKET-NAME
    
  1. Cuando ya no necesites los datos de entrenamiento en Cloud Bigtable, ejecuta el siguiente comando en Cloud Shell para borrar la instancia de Cloud Bigtable (la variable BIGTABLE_INSTANCE debe representar el ID de instancia de Cloud Bigtable que usaste con anterioridad).

    $ cbt deleteinstance $BIGTABLE_INSTANCE
    

Qué sigue

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.