Guía del usuario de TFX

Introducción

TFX es una plataforma de aprendizaje automático (AA) a escala de producción de Google basada en TensorFlow. Proporciona un marco de trabajo de configuración y bibliotecas compartidas para integrar componentes comunes que se necesitan para definir, lanzar y supervisar un sistema de aprendizaje automático.

Instalación

Python PyPI

pip install tfx

Acerca de TFX

TFX es una plataforma para crear y administrar flujos de trabajo de AA en un entorno de producción. TFX proporciona lo siguiente:

  • Un kit de herramientas para compilar canalizaciones de AA. Las canalizaciones de TFX te permiten organizar el flujo de trabajo de AA en varias plataformas, como Apache Airflow, Apache Beam y Kubeflow Pipelines.

    Obtén más información sobre las canalizaciones de TFX.

  • Un conjunto de componentes estándar que puedes usar como parte de una canalización o como parte de una secuencia de comandos de entrenamiento de AA. Los componentes estándar de TFX brindan funciones comprobadas para compilar un proceso de AA con facilidad.

    Obtén más información sobre los componentes estándar de TFX.

  • Bibliotecas que proporcionan las funciones base para muchos de los componentes estándar. Puedes usar las bibliotecas de TFX para agregar esta funcionalidad a tus propios componentes personalizados o usarlas por separado.

    Obtén más información sobre las bibliotecas de TFX.

TFX es un kit de herramientas de aprendizaje automático a escala de producción de Google basado en TensorFlow. Proporciona un marco de trabajo de configuración y bibliotecas compartidas para integrar componentes comunes que se necesitan para definir, lanzar y supervisar un sistema de aprendizaje automático.

Componentes estándar de TFX

Una canalización de TFX es una secuencia de componentes que implementa una canalización de AA, la cual está diseñada específicamente para tareas de aprendizaje automático escalables y de alto rendimiento. Esto incluye la creación de modelos, el entrenamiento, la inferencia y la administración de implementaciones para destinos en línea, nativos para dispositivos móviles y de JavaScript.

Por lo general, una canalización de TFX incluye los siguientes componentes:

  • ExampleGen es el componente de entrada inicial de una canalización que transfiere y, de forma opcional, divide el conjunto de datos de entrada.

  • StatisticsGen calcula las estadísticas del conjunto de datos.

  • SchemaGen analiza las estadísticas y crea un esquema de datos.

  • ExampleValidator busca anomalías y valores faltantes en el conjunto de datos.

  • Transform realiza la ingeniería de atributos en el conjunto de datos.

  • Trainer entrena el modelo.

  • Tuner ajusta los hiperparámetros del modelo.

  • Evaluator realiza un análisis profundo de los resultados del entrenamiento y te ayuda a validar los modelos exportados, con el objetivo de evaluar si la calidad es suficiente para enviarlos a producción.

  • InfraValidator verifica que el modelo se pueda derivar desde la infraestructura y evita que se active un modelo incorrecto.

  • Pusher implementa el modelo en una infraestructura de deriva.

  • BulkInferrer realiza el procesamiento por lotes en un modelo con solicitudes de inferencia sin etiquetar.

El diagrama que sigue ilustra el flujo de datos entre estos componentes:

Flujo de componentes

Bibliotecas de TFX

TFX incluye bibliotecas y componentes de canalización. El diagrama que sigue ilustra las relaciones entre las bibliotecas de TFX y los componentes de canalización:

Bibliotecas y componentes

TFX proporciona varios paquetes de Python que son las bibliotecas empleadas para crear componentes de canalización. Utilizarás estas bibliotecas para crear los componentes de las canalizaciones de modo que el código pueda enfocarse en los aspectos específicos de la canalización.

Las bibliotecas de TFX incluyen lo siguiente:

  • TensorFlow Data Validation (TFDV) es una biblioteca para analizar y validar datos de aprendizaje automático. Se diseñó para ser altamente escalable y funcionar correctamente con TensorFlow y TFX. TFDV incluye lo siguiente:

    • Cálculo escalable de estadísticas resumidas de los datos de entrenamiento y prueba
    • Integración con un visor de estadísticas y distribuciones de datos, además de una comparación por facetas de pares de conjuntos de datos (Facets)

    • Generación automática de esquemas de datos para describir las expectativas sobre datos como valores, rangos y vocabularios requeridos

    • Visor de esquemas para inspeccionar el esquema en cuestión

    • Detección de anomalías, como atributos faltantes, valores fuera de rango o tipos de atributos incorrectos, entre otros

    • Visor de anomalías para conocer qué atributos tienen anomalías y obtener más información que permita corregirlas

  • TensorFlow Transform (TFT) es una biblioteca para procesamiento previo de datos con TensorFlow. TensorFlow Transform es útil para datos que requieren un pase completo, como los siguientes:

    • Normalizar un valor de entrada mediante desviación promedio y estándar
    • Convertir strings en números enteros mediante la generación de un vocabulario sobre todos los valores de entrada
    • Convertir números de punto flotante en números enteros mediante su asignación a depósitos según la distribución de datos observada
  • TensorFlow se usa para entrenar modelos con TFX. Transfiere datos de entrenamiento y código de modelado, y crea un resultado de modelo guardado. También integra una canalización de ingeniería de atributos que crea TensorFlow Transform para el procesamiento previo de datos de entrada.

    KerasTuner se usa para ajustar los hiperparámetros del modelo.

  • TensorFlow Model Analysis (TFMA) es una biblioteca diseñada para evaluar modelos de TensorFlow. Se usa junto con TensorFlow para crear un EvalSavedModel, que se convierte en la base del análisis. Permite a los usuarios evaluar sus modelos con grandes cantidades de datos de manera distribuida, empleando las mismas métricas definidas en su entrenador. Estas métricas pueden calcularse para diferentes porciones de datos y visualizarse en los notebooks de Jupyter.

  • TensorFlow Metadata (TFMD) proporciona representaciones estándar para los metadatos, que son útiles cuando se entrenan modelos de aprendizaje automático con TensorFlow. Los metadatos pueden generarse de forma manual o automática durante el análisis de datos de entrada y consumirse para la validación, la exploración y la transformación de los datos. Los formatos de serialización de metadatos incluyen los siguientes:

    • Esquema que describe datos tabulares (p. ej., tf.Examples)
    • Colección de estadísticas resumidas sobre esos conjuntos de datos
  • ML Metadata (MLMD) es una biblioteca para registrar y recuperar metadatos asociados con flujos de trabajo de desarrolladores de AA y científicos de datos. En la mayoría de los casos, los metadatos usan representaciones de TFMD. La biblioteca MLMD gestiona la persistencia mediante SQL-Lite, MySQL y otros almacenes de datos similares.

Tecnologías de apoyo

Obligatorio

  • Apache Beam es un modelo unificado de código abierto que se usa para definir canalizaciones de procesamiento paralelo de lotes y de datos de transmisiones. TFX usa Apache Beam para implementar canalizaciones de datos paralelos. Luego, la canalización se ejecuta en uno de los backends de procesamiento distribuido compatibles de Beam, entre los que se incluyen Apache Flink, Apache Spark, Google Cloud Dataflow y otros.

Opcional

Los organizadores, como Apache Airflow y Kubeflow, facilitan la configuración, la operación, la supervisión y el mantenimiento de las canalizaciones de AA.

  • Apache Airflow es una plataforma para crear, programar y supervisar flujos de trabajo de manera programática. TFX usa Airflow para crear flujos de trabajo como grafos acíclicos dirigidos (DAG) de tareas. El programador de Airflow ejecuta sus tareas en un arreglo de trabajadores mientras sigue las dependencias especificadas. Las utilidades de líneas de comandos enriquecidas hacen que realizar modificaciones complejas en DAG sea muy fácil. La interfaz de usuario enriquecida facilita la visualización de canalizaciones que se estén ejecutando en producción, la supervisión del progreso y la solución de problemas cuando sea necesario. Cuando los flujos de trabajo se definen como código, se torna más fácil mantenerlos, controlar las versiones y verificarlos, y son más colaborativos.

  • Kubeflow se dedica a hacer que las implementaciones de flujos de trabajo de aprendizaje automático (AA) en Kubernetes sean simples, portables y escalables. El objetivo de Kubeflow no es recrear otros servicios, sino proporcionar una forma directa de implementar sistemas de código abierto de primer nivel para el AA en diferentes infraestructuras. Las canalizaciones de Kubeflow permiten la composición y la ejecución de flujos de trabajo reproducibles en Kubeflow, integrados con la experimentación y las experiencias con notebooks. Los servicios de canalizaciones de Kubeflow en Kubernetes incluyen el almacenamiento de metadatos alojado, el motor de organización de contenedores, el servidor de notebooks y la IU para ayudar a los usuarios a desarrollar, ejecutar y administrar canalizaciones de AA complejas a gran escala. El SDK de canalizaciones de Kubeflow permite la creación y el uso compartido de componentes, y la composición de canalizaciones de manera programática.

Portabilidad e interoperabilidad

TFX se diseñó para que pueda adaptarse a varios entornos y marcos de trabajo de organización, incluidos Apache Airflow, Apache Beam y Kubeflow. También puede portarse a diferentes plataformas de procesamiento, tanto locales como en la nube, por ejemplo, Google Cloud Platform (GCP). En particular, TFX interopera con varios servicios administrados de GCP, como Cloud AI Platform para el entrenamiento y la predicción y Cloud Dataflow para el procesamiento de datos distribuidos asociado a otros aspectos del ciclo de vida del AA.

Comparación entre "modelo" y "modelo guardado"

Modelo

Un modelo es el resultado del proceso de entrenamiento. Es el registro serializado de los pesos que se aprendieron durante el proceso de entrenamiento. Estos pesos se pueden usar luego para calcular predicciones para nuevos ejemplos de entrada. Para TFX y TensorFlow, el término "modelo" hace referencia a los puntos de control que contienen los pesos aprendidos hasta ese momento.

Ten en cuenta que "modelo" también puede referirse a la definición del grafo de cálculo de TensorFlow (es decir, un archivo de Python) que expresa cómo se procesará una predicción. Los dos significados se pueden usar indistintamente según el contexto.

Modelo guardado

  • Un modelo guardado es una serialización universal neutral con respecto al lenguaje, hermética y recuperable de un modelo de TensorFlow.
  • ¿Por qué es importante? Porque permite que los sistemas de nivel superior generen, transformen y consuman modelos de TensorFlow usando una sola abstracción.

El modelo guardado es el formato de serialización recomendado para derivar un modelo de TensorFlow en producción o exportar un modelo entrenado a una aplicación nativa para dispositivos móviles o de JavaScript. Por ejemplo, para convertir un modelo en un servicio de REST y hacer predicciones, puedes serializar el modelo como un modelo guardado y derivarlo con TensorFlow Serving. Para obtener más información, consulta cómo derivar un modelo de TensorFlow.

Esquema

Algunos componentes de TFX usan una descripción de tus datos de entrada llamada esquema. El esquema es una instancia de schema.proto. Los esquemas son un tipo de búfer de protocolo, más conocido como "protobuf". Un esquema puede especificar tipos de datos para valores de atributos, por ejemplo, si un atributo debe estar presente en todos los ejemplos, qué rangos de valores se permiten y otras propiedades. Uno de los beneficios de usar TensorFlow Data Validation (TFDV) es que este genera automáticamente un esquema mediante la inferencia de tipos, categorías y rangos a partir de los datos de entrenamiento.

A continuación se muestra un extracto de un protobuf de esquema:

...
feature {
  name: "age"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
feature {
  name: "capital-gain"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
...

Los siguientes componentes usan el esquema:

  • TensorFlow Data Validation
  • TensorFlow Transform

En una canalización de TFX típica, TensorFlow Data Validation genera un esquema que los otros componentes consumen.

Desarrollo con TFX

TFX proporciona una plataforma potente para cada fase de un proyecto de aprendizaje automático, desde la investigación, la experimentación y el desarrollo en tu máquina local hasta la implementación. Para evitar la duplicación de código y eliminar la posibilidad de desviación entre el entrenamiento y la deriva, es recomendable que implementes tu canalización de TFX tanto para el entrenamiento como para la implementación de modelos entrenados, y que uses componentes Transform para el entrenamiento y la inferencia, ya que aprovechan la biblioteca de TensorFlow Transform. De esta forma, usarás el mismo código de procesamiento previo y análisis de forma coherente, y evitarás diferencias entre los datos utilizados para el entrenamiento y los datos enviados a tus modelos entrenados durante la producción; como ventaja adicional, solo tendrás que escribir el código una vez.

Exploración, visualización y limpieza de datos

Exploración, visualización y limpieza de datos

Las canalizaciones de TFX suelen comenzar con un componente ExampleGen, que acepta datos de entrada y los formatea como tf.Examples. A menudo esto se hace después de dividir los datos en conjuntos de datos de entrenamiento y evaluación, de modo que realmente haya dos copias de los componentes ExampleGen, una para entrenamiento y otra para evaluación. Por lo general, sigue un componente de StatisticsGen y uno de SchemaGen, que examinarán tus datos e inferirán un esquema de datos y estadísticas. Un componente ExampleValidator consumirá el esquema y las estadísticas, y buscará anomalías, valores faltantes y tipos de datos incorrectos. Todos estos componentes aprovechan las capacidades de la biblioteca de TensorFlow Data Validation.

TensorFlow Data Validation (TFDV) es una herramienta valiosa para la exploración, visualización y limpieza iniciales de tu conjunto de datos. TFDV examina los datos e infiere los tipos de datos, las categorías y los rangos y, luego, ayuda a identificar las anomalías y los valores faltantes automáticamente. También proporciona herramientas de visualización que pueden ayudarte a examinar y comprender tu conjunto de datos. Una vez que se complete la canalización, podrás leer los metadatos de MLMD y usar las herramientas de visualización de TFDV en un notebook de Jupyter para analizar tus datos.

Después del entrenamiento y la implementación del modelo inicial, TFDV se puede usar para supervisar datos nuevos de solicitudes de inferencia enviadas a los modelos implementados y detectar anomalías o desviaciones. Esto es especialmente útil para los datos de series temporales que cambian con el tiempo como resultado de tendencias o temporadas, y puede ayudar a informar si hay problemas con los datos o cuándo es necesario volver a entrenar modelos con datos nuevos.

Visualización de datos

Después de completar la primera ejecución de datos mediante la sección de la canalización que usa TFDV (por lo general, StatisticsGen, SchemaGen y ExampleValidator), puedes visualizar los resultados en un notebook de Jupyter. Para ejecuciones adicionales, puedes comparar estos resultados a medida que realizas ajustes, hasta que los datos sean óptimos para tu modelo y aplicación.

Primero, consulta los ML Metadata (MLMD) para localizar los resultados de las ejecuciones de estos componentes y, luego, usa la API de visualización en TFDV para crear las visualizaciones en tu notebook. Esto incluye tfdv.load_statistics() y tfdv.visualize_statistics(). Con esta visualización, podrás comprender mejor las características del conjunto de datos y, si es necesario, modificarlo.

Desarrollo y entrenamiento de modelos

Ingeniería de atributos

Una canalización típica de TFX incluye un componente Transform, que se encarga de la ingeniería de atributos aprovechando las capacidades de la biblioteca TensorFlow Transform (TFT). Un componente Transform consume el esquema que crea un componente SchemaGen y aplica transformaciones de datos para crear, combinar y transformar las funciones que se usarán para entrenar el modelo. La limpieza de valores faltantes y la conversión de tipos se deben realizar además en el componente Transform si existe alguna posibilidad de que estos valores también estén presentes en los datos enviados para solicitudes de inferencia. Cuando se diseña el código de TensorFlow para el entrenamiento en TFX, deben tenerse en cuenta algunas consideraciones importantes.

Modelado y entrenamiento

El resultado de un componente Transform es un modelo guardado que se importará y usará en tu código de modelado en TensorFlow, durante un componente Trainer. Este modelo guardado incluye todas las transformaciones de ingeniería de datos que se crearon en el componente Transform; de esta forma, las transformaciones idénticas se realizan con el mismo código durante el entrenamiento y la inferencia. Con el código de modelado, incluido el modelo guardado del componente Transform, puedes consumir los datos de entrenamiento y evaluación, y entrenar tu modelo.

Durante la última sección del código de modelado, debes guardar el modelo como modelo guardado y como EvalSavedModel. Para guardarlo como EvalSavedModel, deberás importar y aplicar la biblioteca de TensorFlow Model Analysis (TFMA) en el componente Trainer.

import tensorflow_model_analysis as tfma
...

tfma.export.export_eval_savedmodel(
        estimator=estimator,
        export_dir_base=eval_model_dir,
        eval_input_receiver_fn=receiver_fn)

Se puede agregar un componente Tuner opcional antes de Trainer para ajustar los hiperparámetros (p. ej., la cantidad de capas) del modelo. Con el modelo dado y el espacio de búsqueda de hiperparámetros, el algoritmo de ajuste encontrará los mejores hiperparámetros según el objetivo.

Análisis y comprensión del rendimiento de modelos

Análisis de modelos

Después del desarrollo y entrenamiento inicial del modelo, es importante analizar y comprender cabalmente su rendimiento. Una canalización de TFX típica incluirá un componente Evaluator, que aprovecha las capacidades de la biblioteca de TensorFlow Model Analysis (TFMA). Esta biblioteca proporciona un gran conjunto de herramientas para esta fase de desarrollo. Un componente Evaluator consume el componente EvalSavedModel que exportaste antes y te permite especificar una lista de SliceSpecs que puedes usar cuando visualizas y analizas el rendimiento de tu modelo. Cada SliceSpec define una porción de los datos de entrenamiento que deseas examinar, como categorías específicas para atributos categóricos o rangos específicos para atributos numéricos.

Por ejemplo, esto puede ser importante para comprender el rendimiento de tu modelo según diferentes segmentos de clientes, que se podrían segmentar por compras anuales, datos geográficos, edad o género. También puede ser de gran ayuda para los conjuntos de datos con colas largas, donde el rendimiento de un grupo dominante puede enmascarar el rendimiento inaceptable de grupos importantes pero más pequeños. Por ejemplo, es posible que tu modelo tenga un buen rendimiento para los empleados promedio, pero no para el personal ejecutivo, y puede que esta información sea importante para ti.

Análisis y visualización de modelos

Después de completar la primera ejecución de datos mediante el entrenamiento del modelo y la ejecución del componente Evaluator (que aprovecha TFMA) en los resultados del entrenamiento, puedes visualizar los resultados en un notebook de Jupyter. En las ejecuciones adicionales, puedes comparar los resultados a medida que realizas ajustes, hasta que sean óptimos para tu modelo y aplicación.

Primero, consulta ML Metadata (MLMD) para ubicar los resultados de las ejecuciones de estos componentes y, luego, usa la API de visualización en TFMA para crear las visualizaciones en el notebook. Esto incluye tfma.load_eval_results() y tfma.view.render_slicing_metrics(). Con esta visualización, podrás comprender mejor las características del conjunto de datos y, si es necesario, modificarlo.

Valida un modelo para su publicación

Validación de infraestructura

Antes de implementar el modelo entrenado, se recomienda que valides si el modelo se puede derivar en la infraestructura de entrega. Esto es particularmente importante en entornos de producción, para garantizar que el modelo recién publicado no impida que el sistema entregue predicciones. El componente InfraValidator realizará una implementación de versiones canary de tu modelo en un entorno de zona de pruebas y, de manera opcional, enviará solicitudes reales para verificar que el modelo funcione correctamente.

Destinos de implementación

Una vez que hayas desarrollado y entrenado un modelo que te satisfaga, es momento de implementarlo en uno o más destinos de implementación, en los que recibirá solicitudes de inferencia. TFX es compatible con la implementación en tres clases de destinos. Los modelos entrenados que se exportaron como modelos guardados se pueden implementar en cualquiera de estos destinos de implementación o en todos ellos.

Flujo de componentes

Inferencia: TensorFlow Serving

TensorFlow Serving (TFS) es un sistema de deriva flexible y de alto rendimiento para modelos de aprendizaje automático, diseñado para entornos de producción. Consume un modelo guardado y acepta solicitudes de inferencia a través de interfaces REST o gRPC. Se ejecuta como un conjunto de procesos en uno o más servidores de red, mediante una de varias arquitecturas avanzadas para controlar la sincronización y el procesamiento distribuido. Para obtener más información sobre el desarrollo y la implementación de soluciones de TFS, consulta la documentación de TFS.

En una canalización típica, un modelo guardado que se entrenó en un componente Trainer primero validaría su infraestructura en un componente InfraValidator. InfraValidator lanza un servidor de modelo TFS versión canary para publicar el modelo guardado. Si ya pasó la validación, un componente Pusher finalmente implementará el modelo guardado en la infraestructura de TFS. Esto incluye el manejo de varias versiones y actualizaciones de modelos.

Inferencia en aplicaciones nativas para dispositivos móviles y de IoT: TensorFlow Lite

TensorFlow Lite es un conjunto de herramientas específicas para ayudar a los desarrolladores a usar sus modelos entrenados de TensorFlow en aplicaciones nativas para dispositivos móviles y de IoT. Consume los mismos modelos guardados que TensorFlow Serving y aplica optimizaciones como la cuantización y la reducción a fin de optimizar el tamaño y el rendimiento de los modelos resultantes para las condiciones particulares de la ejecución en dispositivos móviles y de IoT. Para obtener más información sobre el uso de TensorFlow Lite, consulta la documentación de TensorFlow Lite.

Inferencia en JavaScript: TensorFlow JS

TensorFlow JS es una biblioteca de JavaScript para entrenar e implementar modelos de AA en navegadores y en Node.js. Consume los mismos modelos guardados que TensorFlow Serving y TensorFlow Lite, y los convierte al formato de TensorFlow.js para la Web. Para obtener más información sobre cómo usar TensorFlow JS, consulta la documentación correspondiente.

Cea una canalización de TFX con Airflow

Para obtener más información, consulta el taller de Airflow.

Crea una canalización de TFX con Kubeflow

Configuración

Kubeflow requiere un clúster de Kubernetes para ejecutar las canalizaciones a gran escala. Consulta la guía de implementación de Kubeflow, que brinda orientación sobre las opciones para implementar el clúster de Kubeflow.

Configura y ejecuta la canalización de TFX

Sigue el instructivo de TFX sobre canalizaciones de Cloud AI Platform para ejecutar la canalización de ejemplo de TFX en Kubeflow. Los componentes de TFX se ejecutaron en contenedores para crear la canalización de Kubeflow. El ejemplo muestra la capacidad de configurar la canalización para que esta lea un conjunto de datos público extenso y ejecute pasos de entrenamiento y procesamiento de datos a gran escala en la nube.

Interfaz de línea de comandos para acciones de canalización

TFX proporciona una CLI (interfaz de línea de comandos) unificada que permite realizar una amplia gama de acciones de canalización, como crear, actualizar, ejecutar, listar y borrar canalizaciones en varios organizadores, incluidos Apache Airflow, Apache Beam y Kubeflow. Para obtener más información, consulta estas instrucciones.