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. Para obtener más información sobre cómo implementar tu modelo guardado en AI Platform a fin de entregar 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 utilizar 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. Ese 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

Tu modelo guardado debe tener un tamaño de 250 MB o menos para implementarse con AI Platform. Esto incluye todos los activos y variables del directorio del modelo guardado, no solo el archivo del búfer de protocolo del modelo guardado (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 250 MB, lleva a cabo estos pasos:

Tomar estas medidas permite reducir el tamaño del modelo guardado a menos de 250 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 uses un Estimador para el entrenamiento y la predicción, puedes utilizar la función export_savedmodel y obtener un modelo guardado. De lo contrario, puedes usar SavedModelBuilder para exportar un modelo. Consulta el ejemplo de MNIST, que muestra cómo exportar un modelo con SavedModelBuilder con las firmas y etiquetas 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 los formatos de entrada y SignatureDefs. Obtén más información sobre la CLI de 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 es de nuestra muestra 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. Exporta un modelo guardado desde tu Estimador con export_savedmodel pasando la ruta de tu modelo como el parámetro export_dir_base y el nombre de tu función de entrega como el parámetro serving_input_fn. En el ejemplo del censo, el tipo de Estimador que se usó fue tf.contrib.learn.DNNLinearCombinedClassifier.

Crea un grafo de entrega separado del entrenamiento

Si ya has entrenado tu modelo, puedes obtener predicciones sin volver a entrenarlo. Este proceso es muy similar a la creación de un grafo de entrega durante el entrenamiento. La principal diferencia es que creas un grafo de entrega en una secuencia de comandos de Python separada que ejecutas cuando el entrenamiento haya finalizado. La idea básica es crear el Estimator con el mismo model_dir que se usó durante el entrenamiento, y luego llamar a export_savedmodel, como se describió anteriormente.

  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 el Estimator, asegúrate de configurar el parámetro model_dir para que sea el mismo que usaste durante el entrenamiento. Esto permite que el Estimator pueda acceder a los puntos de control de los modelos guardados anteriormente.

  3. Por último, usa tu Estimator para llamar a export_savedmodel, pasando 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 desde tf.keras o desde un Estimador de TensorFlow, el grafo exportado está listo para entregar 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 en tu lista de tags.

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

Pasos siguientes

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

Enviar comentarios sobre…

Cloud ML Engine para TensorFlow