Exporta un modelo guardado para realizar predicciones

A fin de implementar tus modelos entrenados en AI Platform y usarlos para entregar predicciones, primero debes exportarlos en el formato de modelo guardado de TensorFlow.

En esta página, se describen algunos aspectos importantes que debes tener en cuenta cuando crees tu modelo guardado. Para obtener más información sobre la exportación en formato modelo guardado, lee la guía de TensorFlow sobre cómo guardar y restablecer modelos. Si quieres obtener más información sobre cómo implementar tu modelo guardado en AI Platform para que entregue predicciones, lee la guía de implementación de modelos. Para obtener información general sobre el proceso de predicción, consulta la página de descripción general de las predicciones.

Rutinas de predicción personalizadas

Como alternativa a la implementación de un modelo guardado, también puedes crear y luego implementar una rutina de predicción personalizada. Una rutina de predicción personalizada puede combinar un modelo guardado (o un modelo entrenado guardado de una manera diferente) con otros artefactos de entrenamiento y el código de Python que brindas para personalizar la forma en que AI Platform maneja las solicitudes de predicción. Por ejemplo, puedes usar esta flexibilidad para hacer un procesamiento previo de la entrada de predicción antes de que el modelo haga la predicción.

Para obtener más información, lee la guía de rutinas de predicción personalizadas.

Obtén información sobre los grafos de entrenamiento y cómo entregarlos

Cuando hayas entrenado tu modelo y lo hayas exportado como un modelo guardado, debes seguir algunos pasos importantes antes de poder obtener predicciones.

Existen algunas diferencias clave entre un grafo de entrenamiento y uno de entrega. Los grafos de entrenamiento contienen funciones que no son apropiadas para la entrega, como las siguientes:

  • lectores de archivos
  • colas de entrada
  • capas de retirados
  • funciones de pérdida
  • optimizadores

Debido a que el proceso de entrega de predicciones tiene requisitos distintos al proceso de entrenamiento, la práctica recomendada es exportar un grafo separado específicamente para entregar predicciones.

Obtén información sobre el modelo guardado

Un modelo guardado es el formato recomendado de TensorFlow para guardar modelos, y es el formato obligatorio para implementar modelos entrenados de TensorFlow en AI Platform. Cuando exportas tu modelo entrenado como un modelo guardado, se almacena tu grafo de entrenamiento con los activos, las variables y los metadatos en un formato que AI Platform puede usar y restablecer para las predicciones.

Después de exportar un modelo guardado, tendrás un directorio de modelos guardados con estos elementos:

Cuando implementas tu modelo guardado en AI Platform, debes incluir todo el directorio del modelo guardado, no solo el archivo del búfer de protocolo que contiene tu grafo y sus metadatos. Este archivo suele tener una extensión .pb o .pbtxt.

El modelo guardado te permite almacenar diferentes versiones de un grafo que comparten los mismos activos y variables (o puntos de control). Por ejemplo, puedes desarrollar dos versiones del mismo grafo, una que se ejecute en CPU y otra que se ejecute en GPU.

Obtén más información sobre la estructura del directorio de un modelo guardado.

Comprueba y ajusta el tamaño del modelo

El tamaño de tu modelo guardado debe ser de 500 MB o menos si deseas implementarlo en una versión de modelo que use un tipo de máquina heredada (MLS1). Puede ser de hasta 2 GB si usas un tipo de máquina de Compute Engine (N1). Obtén más información sobre los tipos de máquina para la predicción en línea.

Este límite de tamaño incluye todos los activos y variables en el directorio de tu modelo guardado, no solo el archivo del búfer de protocolo del modelo guardado en sí (es decir, saved_model.pb o saved_model.pbtxt).

Para verificar el tamaño del modelo mientras lo estás desarrollando, exporta un modelo guardado y comprueba el tamaño del archivo del directorio.

Si tu modelo guardado supera el límite de 500 MB, haz lo siguiente:

Si sigues estos pasos, podrás reducir el tamaño del modelo guardado a menos de 500 MB y disminuir la latencia de las predicciones. Los beneficios incluyen un mejor rendimiento, y no tener que solicitar y esperar un aumento de cuota.

Si aun así necesitas una cuota adicional, consulta cómo solicitar un aumento de cuota.

Compila un grafo de predicción óptimo

El entrenamiento produce muchos puntos de control que no se usan para entregar predicciones. Asegúrate de subir un directorio que solo contenga el modelo que implementarás y no incluya esos artefactos.

Por ejemplo, si exportas resúmenes durante el proceso de entrenamiento para verlos en TensorBoard, asegúrate de que no estén en tu modelo guardado. Los resúmenes de TensorBoard no son necesarios para un grafo de predicción.

Cuando usas un Estimador destinado al entrenamiento y a la predicción, puedes recurrir a la función export_savedmodel para obtener un modelo guardado. Otra opción es usar SavedModelBuilder para exportar un modelo. Consulta al ejemplo de MNIST si quieres ver cómo se exporta un modelo con SavedModelBuilder que incluya las etiquetas y firmas correctas.

Reduce la precisión para disminuir el tamaño del archivo

Reducir la precisión de las variables y los datos de entrada es una alternativa que reduce significativamente el tamaño de tu modelo, pero tiene cierto costo en la precisión de las predicciones. Los datos de alta precisión se almacenan de forma menos eficiente que los datos de baja precisión. Aunque los datos de baja precisión son una fuente de ruido, una red neuronal puede “ignorar” ese ruido y, aun así, producir predicciones bastante precisas.

Si el uso de estos métodos produce una pérdida demasiado grande en la precisión de las predicciones para tu caso práctico, intenta solicitar un aumento de cuota

  • Reduce el tamaño del archivo disminuyendo el tamaño de las ponderaciones, que adoptan como predeterminados números de punto flotante que son difíciles de almacenar de manera eficiente. Estas ponderaciones almacenadas de forma ineficiente son las que más contribuyen al tamaño total del archivo de modelo.

  • Cuantiza tus datos continuos para reducir el tamaño de tu modelo hasta un 75% sin sacrificar una cantidad significativa de precisión.

  • Usa variables menos precisas. Por ejemplo, cambia el tipo de datos (dtype) de int64 a int32.

  • Reduce el tamaño de otros atributos de entrada en la carpeta assets del directorio de tu modelo guardado. Por ejemplo, usa tamaños de vocabulario menores para los datos de texto.

  • Lee sobre técnicas que te permiten optimizar los modelos de TensorFlow para la entrega con más detalle y trabaja con ejemplos de cómo aplicar estas técnicas.

Herramientas para inspeccionar los grafos y modelos guardados

TensorFlow te proporciona una interfaz de línea de comandos que puedes usar para verificar el estado de ciertos aspectos de tu modelo guardado, como el formato de entrada y SignatureDefs. Obtén más información sobre la CLI de los modelos guardados.

La Herramienta de transformación de grafo de TensorFlow se puede usar para optimizar tu modelo antes de implementarlo. Aunque se explica cómo usar esta herramienta en el contexto de la implementación móvil, también se puede usar con el fin de optimizar modelos para la implementación no móvil.

Obtén más información sobre cómo usar la herramienta de transformación de grafo.

Crea funciones de entrada de entrega

Cuando exportas un grafo de entrega, un paso clave es definir la función de entrada de entrega. Puedes hacerlo en los siguientes momentos del proceso de entrenamiento general:

  • Durante el final del proceso de entrenamiento.
  • Como un proceso separado después de que el entrenamiento esté completo.

Obtén más información sobre las funciones de entrada de entrega.

Crea un grafo de entrega durante el entrenamiento

Esto suele hacerse al final del proceso de entrenamiento, pero de todos modos está relacionado con el entrenamiento.

  1. Define una función de entrada de entrega. El siguiente código de ejemplo proviene de nuestro ejemplo del censo:

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. Para exportar un modelo guardado desde tu Estimador con export_savedmodel, tienes que pasar la ruta de tu modelo como el parámetro export_dir_base y el nombre de tu función de entrada de entrega como el parámetro serving_input_fn. En el ejemplo del censo, el tipo de Estimador que se usa es tf.contrib.learn.DNNLinearCombinedClassifier.

Crea un grafo de entrega separado del entrenamiento

Si ya entrenaste tu modelo, puedes obtener predicciones sin necesidad de un nuevo entrenamiento. Este proceso es muy parecido a la creación de un grafo de entrega durante el entrenamiento. La diferencia principal es que el grafo de entrega se crea en una secuencia de comandos de Python independiente que se ejecuta una vez concluido el entrenamiento. La idea básica es construir el Estimator con el mismo model_dir que se usó durante el entrenamiento y luego llamar a export_savedmodel, como se indicó antes.

  1. Define una función de entrada de entrega en tu secuencia de comandos de Python de manera similar a como lo haces en el entrenamiento:

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. Cuando crees tu Estimator, asegúrate de configurar el parámetro model_dir para que sea el mismo que usaste en el entrenamiento. Esto permite que los puntos de control del modelo guardado anteriormente estén disponibles para el Estimator.

  3. Por último, usa tu Estimator para llamar a export_savedmodel, y luego pasa la ruta de tu modelo como el parámetro export_dir_base y el nombre de tu función de entrada de entrega como el parámetro serving_input_fn.

Etiquetas y firmas de TensorFlow

Si exportas un modelo guardado de tf.keras o de un Estimador de TensorFlow, el grafo exportado está listo para entregarse de forma predeterminada.

En otros casos, cuando crees un grafo de predicción de TensorFlow, debes especificar los valores correctos para las etiquetas y firmas de tu grafo. TensorFlow ofrece constantes para estos valores de etiquetas y firmas, los cuales se usan con los siguientes objetivos:

  • Seleccionar un grafo en tu modelo guardado para entregar predicciones.
  • Indicar que estás compilando una firma de predicción para tu grafo de predicción.

Las firmas definen las entradas y salidas de tu grafo. Cuando compilas una firma para tu grafo de predicción, debes especificar una constante de firma válida como el parámetro method_name en build_signature_def. Para la predicción, la mejor opción suele ser PREDICT_METHOD_NAME.

Debes usar una etiqueta a fin de especificar qué grafo de tu modelo guardado se usa para entregar predicciones. En add_meta_graph_and_variables, agrega tag_constants.SERVING a tu lista tags.

Ve un ejemplo de cómo compilar un grafo de predicción con las constantes correctas para las etiquetas y las firmas.

Próximos pasos

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

Enviar comentarios sobre…

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