Introducción
TFX es una plataforma de aprendizaje automático (ML) a escala de producción de Google basada en TensorFlow. Proporciona un marco de configuración y bibliotecas compartidas para integrar componentes comunes necesarios para definir, iniciar y monitorear su sistema de aprendizaje automático.
TFX 1.0
Estamos felices de anunciar la disponibilidad del TFX 1.0.0 . Esta es la versión inicial post-beta de TFX, que proporciona API y artefactos públicos estables. Puede estar seguro de que sus futuras canalizaciones TFX seguirán funcionando después de una actualización dentro del alcance de compatibilidad definido en este RFC .
Instalación
pip install tfx
Paquetes nocturnos
TFX también aloja paquetes nocturnos en https://pypi-nightly.tensorflow.org en Google Cloud. Para instalar el último paquete nocturno, utilice el siguiente comando:
pip install --extra-index-url https://pypi-nightly.tensorflow.org/simple --pre tfx
Esto instalará los paquetes nocturnos para las principales dependencias de TFX, como TensorFlow Model Analysis (TFMA), TensorFlow Data Validation (TFDV), TensorFlow Transform (TFT), TFX Basic Shared Libraries (TFX-BSL), ML Metadata (MLMD).
Acerca de TFX
TFX es una plataforma para crear y administrar flujos de trabajo de ML en un entorno de producción. TFX proporciona lo siguiente:
Un conjunto de herramientas para crear canales de aprendizaje automático. Las canalizaciones TFX le permiten organizar su flujo de trabajo de aprendizaje automático en varias plataformas, como: Apache Airflow, Apache Beam y Kubeflow Pipelines.
Un conjunto de componentes estándar que puede utilizar como parte de una canalización o como parte de su script de entrenamiento de ML. Los componentes estándar de TFX brindan una funcionalidad comprobada para ayudarlo a comenzar a crear un proceso de aprendizaje automático fácilmente.
Obtenga más información sobre los componentes estándar de TFX .
Bibliotecas que proporcionan la funcionalidad básica para muchos de los componentes estándar. Puede utilizar las bibliotecas TFX para agregar esta funcionalidad a sus propios componentes personalizados o utilizarlas por separado.
TFX es un conjunto de herramientas de aprendizaje automático a escala de producción de Google basado en TensorFlow. Proporciona un marco de configuración y bibliotecas compartidas para integrar componentes comunes necesarios para definir, iniciar y monitorear su sistema de aprendizaje automático.
Componentes estándar TFX
Una canalización TFX es una secuencia de componentes que implementan una canalización de ML que está diseñada específicamente para tareas de aprendizaje automático escalables y de alto rendimiento. Esto incluye modelado, capacitación, entrega de inferencias y administración de implementaciones en objetivos en línea, móviles nativos y JavaScript.
Una canalización TFX normalmente incluye los siguientes componentes:
EjemploGen es el componente de entrada inicial de una canalización que ingiere y, opcionalmente, divide el conjunto de datos de entrada.
StatisticsGen calcula estadísticas para el conjunto de datos.
SchemaGen examina las estadísticas y crea un esquema de datos.
EjemploValidator busca anomalías y valores faltantes en el conjunto de datos.
Transform realiza ingeniería de características en el conjunto de datos.
El entrenador entrena el modelo.
Tuner ajusta los hiperparámetros del modelo.
Evaluator realiza un análisis profundo de los resultados de la capacitación y lo ayuda a validar sus modelos exportados, asegurándose de que sean "lo suficientemente buenos" para pasar a producción.
InfraValidator comprueba que el modelo realmente se puede utilizar desde la infraestructura y evita que se impulse un modelo incorrecto.
Pusher implementa el modelo en una infraestructura de servicio.
BulkInferrer realiza procesamiento por lotes en un modelo con solicitudes de inferencia sin etiquetar.
Este diagrama ilustra el flujo de datos entre estos componentes:
Bibliotecas TFX
TFX incluye bibliotecas y componentes de canalización. Este diagrama ilustra las relaciones entre las bibliotecas TFX y los componentes de la canalización:
TFX proporciona varios paquetes de Python que son las bibliotecas que se utilizan para crear componentes de canalización. Utilizará estas bibliotecas para crear los componentes de sus canalizaciones para que su código pueda centrarse en los aspectos únicos de su canalización.
Las bibliotecas TFX incluyen:
TensorFlow Data Validation (TFDV) es una biblioteca para analizar y validar datos de aprendizaje automático. Está diseñado para ser altamente escalable y funcionar bien con TensorFlow y TFX. TFDV incluye:
- Cálculo escalable de estadísticas resumidas de datos de entrenamiento y prueba.
- Integración con un visor para distribuciones de datos y estadísticas, así como comparación facetada de pares de conjuntos de datos (Facetas).
- Generación automatizada de esquemas de datos para describir expectativas sobre datos como valores, rangos y vocabularios requeridos.
- Un visor de esquemas para ayudarle a inspeccionar el esquema.
- Detección de anomalías para identificar anomalías, como funciones faltantes, valores fuera de rango o tipos de funciones incorrectos, por nombrar algunas.
- Un visor de anomalías para que puedas ver qué funciones tienen anomalías y aprender más para corregirlas.
TensorFlow Transform (TFT) es una biblioteca para preprocesar datos con TensorFlow. TensorFlow Transform es útil para datos que requieren un paso completo, como:
- Normalice un valor de entrada por media y desviación estándar.
- Convierta cadenas a números enteros generando un vocabulario sobre todos los valores de entrada.
- Convierta flotantes en números enteros asignándolos a depósitos según la distribución de datos observada.
TensorFlow se utiliza para entrenar modelos con TFX. Ingiere datos de entrenamiento y código de modelado y crea un resultado de SavedModel. También integra un proceso de ingeniería de funciones creado por TensorFlow Transform para preprocesar los datos de entrada.
KerasTuner se utiliza para ajustar los hiperparámetros del modelo.
TensorFlow Model Analysis (TFMA) es una biblioteca para evaluar modelos de TensorFlow. Se utiliza junto con TensorFlow para crear un EvalSavedModel, que se convierte en la base para su análisis. Permite a los usuarios evaluar sus modelos en grandes cantidades de datos de forma distribuida, utilizando las mismas métricas definidas en su entrenador. Estas métricas se pueden calcular a partir de diferentes fragmentos de datos y visualizarse en cuadernos de Jupyter.
TensorFlow Metadata (TFMD) proporciona representaciones estándar de metadatos que son útiles al entrenar modelos de aprendizaje automático con TensorFlow. Los metadatos pueden producirse manualmente o automáticamente durante el análisis de los datos de entrada y pueden consumirse para la validación, exploración y transformación de los datos. Los formatos de serialización de metadatos incluyen:
- Un esquema que describe datos tabulares (por ejemplo, tf.Ejemplos).
- Una colección de estadísticas resumidas sobre dichos conjuntos de datos.
ML Metadata (MLMD) es una biblioteca para registrar y recuperar metadatos asociados con los flujos de trabajo de desarrolladores de ML y científicos de datos. La mayoría de las veces, los metadatos utilizan representaciones TFMD. MLMD gestiona la persistencia utilizando SQL-Lite , MySQL y otros almacenes de datos similares.
Tecnologías de soporte
Requerido
- Apache Beam es un modelo unificado de código abierto para definir canalizaciones de procesamiento de datos en paralelo tanto por lotes como por streaming. TFX utiliza Apache Beam para implementar canalizaciones de datos paralelas. Luego, la canalización se ejecuta mediante uno de los back-ends de procesamiento distribuido admitidos por Beam, que incluyen Apache Flink, Apache Spark, Google Cloud Dataflow y otros.
Opcional
Orquestadores como Apache Airflow y Kubeflow facilitan la configuración, operación, monitoreo y mantenimiento de una canalización de ML.
Apache Airflow es una plataforma para crear, programar y monitorear flujos de trabajo mediante programación. TFX utiliza Airflow para crear flujos de trabajo como gráficos acíclicos dirigidos (DAG) de tareas. El programador Airflow ejecuta tareas en una variedad de trabajadores mientras sigue las dependencias especificadas. Las ricas utilidades de línea de comandos facilitan la realización de cirugías complejas en DAG. La rica interfaz de usuario facilita la visualización de canalizaciones que se ejecutan en producción, el seguimiento del progreso y la resolución de problemas cuando sea necesario. Cuando los flujos de trabajo se definen como código, se vuelven más fáciles de mantener, versionables, comprobables y colaborativos.
Kubeflow se dedica a hacer que las implementaciones de flujos de trabajo de aprendizaje automático (ML) en Kubernetes sean simples, portátiles y escalables. El objetivo de Kubeflow no es recrear otros servicios, sino proporcionar una forma sencilla de implementar los mejores sistemas de código abierto para ML en diversas infraestructuras. Kubeflow Pipelines permite la composición y ejecución de flujos de trabajo reproducibles en Kubeflow, integrados con experimentación y experiencias basadas en portátiles. Los servicios de Kubeflow Pipelines en Kubernetes incluyen el almacén de metadatos alojado, el motor de orquestación basado en contenedores, el servidor portátil y la interfaz de usuario para ayudar a los usuarios a desarrollar, ejecutar y administrar canales de aprendizaje automático complejos a escala. El SDK de Kubeflow Pipelines permite crear y compartir componentes y composición de canalizaciones mediante programación.
Portabilidad e Interoperabilidad
TFX está diseñado para ser portátil a múltiples entornos y marcos de orquestación, incluidos Apache Airflow , Apache Beam y Kubeflow . También es portátil a diferentes plataformas informáticas, incluidas las locales y las plataformas en la nube, como Google Cloud Platform (GCP) . En particular, TFX interopera con varios servicios de GCP administrados, como Cloud AI Platform para entrenamiento y predicción , y Cloud Dataflow para el procesamiento de datos distribuidos para varios otros aspectos del ciclo de vida de ML.
Modelo versus modelo guardado
Modelo
Un modelo es el resultado del proceso de formación. Es el registro serializado de los pesos que se han aprendido durante el proceso de entrenamiento. Estos pesos se pueden utilizar posteriormente para calcular predicciones para nuevos ejemplos de entrada. Para TFX y TensorFlow, "modelo" se refiere a los puntos de control que contienen los pesos aprendidos hasta ese punto.
Tenga en cuenta que "modelo" también podría referirse a la definición del gráfico de cálculo de TensorFlow (es decir, un archivo Python) que expresa cómo se calculará una predicción. Los dos sentidos pueden usarse indistintamente según el contexto.
Modelo guardado
- Qué es un SavedModel : una serialización universal, neutral en cuanto al lenguaje, hermética y recuperable de un modelo de TensorFlow.
- Por qué es importante : permite que los sistemas de nivel superior produzcan, transformen y consuman modelos de TensorFlow utilizando una única abstracción.
SavedModel es el formato de serialización recomendado para entregar un modelo de TensorFlow en producción o exportar un modelo entrenado para una aplicación móvil o JavaScript nativa. Por ejemplo, para convertir un modelo en un servicio REST para realizar predicciones, puede serializar el modelo como SavedModel y servirlo mediante TensorFlow Serving. Consulte Servir un modelo de TensorFlow para obtener más información.
Esquema
Algunos componentes de TFX utilizan una descripción de sus datos de entrada llamada esquema . El esquema es una instancia de esquema.proto . Los esquemas son un tipo de búfer de protocolo , más generalmente conocido como "protobuf". El esquema puede especificar tipos de datos para valores de características, si una característica debe estar presente en todos los ejemplos, rangos de valores permitidos y otras propiedades. Uno de los beneficios de utilizar TensorFlow Data Validation (TFDV) es que generará automáticamente un esquema al inferir tipos, categorías y rangos a partir de los datos de entrenamiento.
Aquí hay 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 utilizan el esquema:
- Validación de datos de TensorFlow
- Transformación de TensorFlow
En una canalización TFX típica, TensorFlow Data Validation genera un esquema, que es consumido por los otros componentes.
Desarrollando con TFX
TFX proporciona una plataforma poderosa para cada fase de un proyecto de aprendizaje automático, desde la investigación, la experimentación y el desarrollo en su máquina local hasta la implementación. Para evitar la duplicación de código y eliminar la posibilidad de sesgo en el entrenamiento/servicio, se recomienda encarecidamente implementar su canalización TFX tanto para el entrenamiento como para la implementación de modelos entrenados, y usar componentes Transform que aprovechan la biblioteca TensorFlow Transform tanto para el entrenamiento como para la inferencia. Al hacerlo, utilizará el mismo código de preprocesamiento y análisis de manera consistente y evitará diferencias entre los datos utilizados para el entrenamiento y los datos alimentados a sus modelos entrenados en producción, además de beneficiarse de escribir ese código una vez.
Exploración, visualización y limpieza de datos
Las canalizaciones TFX normalmente comienzan con un componente EjemploGen , que acepta datos de entrada y los formatea como tf.Examples. A menudo, esto se hace después de que los datos se hayan dividido en conjuntos de datos de capacitación y evaluación, de modo que en realidad haya dos copias de los componentes de EjemploGen, una para capacitación y otra para evaluación. A esto normalmente le siguen un componente StatisticsGen y un componente SchemaGen , que examinarán sus datos e inferirán un esquema de datos y estadísticas. El esquema y las estadísticas serán consumidos por un componente exampleValidator , que buscará anomalías, valores faltantes y tipos de datos incorrectos en sus datos. Todos estos componentes aprovechan las capacidades de la biblioteca de validación de datos de TensorFlow .
TensorFlow Data Validation (TFDV) es una herramienta valiosa para realizar la exploración, visualización y limpieza inicial de su conjunto de datos. TFDV examina sus datos e infiere los tipos, categorías y rangos de datos, y luego ayuda automáticamente a identificar anomalías y valores faltantes. También proporciona herramientas de visualización que pueden ayudarle a examinar y comprender su conjunto de datos. Una vez que se complete su canalización, puede leer metadatos de MLMD y usar las herramientas de visualización de TFDV en un cuaderno Jupyter para analizar sus datos.
Después del entrenamiento y la implementación inicial del modelo, TFDV se puede utilizar para monitorear nuevos datos de las solicitudes de inferencia a los modelos implementados y buscar anomalías y/o desviaciones. Esto es especialmente útil para datos de series temporales que cambian con el tiempo como resultado de una tendencia o estacionalidad, y puede ayudar a informar cuándo hay problemas con los datos o cuándo es necesario volver a entrenar los modelos con nuevos datos.
Visualización de datos
Después de haber completado la primera ejecución de sus datos a través de la sección de su canalización que usa TFDV (normalmente StatisticsGen, SchemaGen y EjemploValidator), puede visualizar los resultados en un cuaderno estilo Jupyter. Para ejecuciones adicionales, puede comparar estos resultados a medida que realiza ajustes, hasta que sus datos sean óptimos para su modelo y aplicación.
Primero consultará los metadatos de ML (MLMD) para localizar los resultados de estas ejecuciones de estos componentes y luego utilizará la API de soporte de visualización en TFDV para crear las visualizaciones en su cuaderno. Esto incluye tfdv.load_statistics() y tfdv.visualize_statistics(). Con esta visualización puede comprender mejor las características de su conjunto de datos y, si es necesario, modificarlas según sea necesario.
Modelos de desarrollo y capacitación
Una canalización TFX típica incluirá un componente Transform , que realizará ingeniería de funciones aprovechando las capacidades de la biblioteca TensorFlow Transform (TFT) . Un componente Transform consume el esquema creado por un componente SchemaGen y aplica transformaciones de datos para crear, combinar y transformar las características que se utilizarán para entrenar su modelo. La limpieza de valores faltantes y la conversión de tipos también se deben realizar en el componente Transformar si alguna vez existe la posibilidad de que estos también estén presentes en los datos enviados para solicitudes de inferencia. Hay algunas consideraciones importantes al diseñar código de TensorFlow para entrenamiento en TFX.
El resultado de un componente Transform es un SavedModel que se importará y utilizará en su código de modelado en TensorFlow, durante un componente Trainer . Este SavedModel incluye todas las transformaciones de ingeniería de datos que se crearon en el componente Transform, de modo que se realicen transformaciones idénticas utilizando exactamente el mismo código durante el entrenamiento y la inferencia. Usando el código de modelado, incluido el modelo guardado del componente Transformar, puede consumir sus datos de entrenamiento y evaluación y entrenar su modelo.
Cuando trabaje con modelos basados en Estimator, la última sección de su código de modelado debe guardar su modelo como SavedModel y EvalSavedModel. Guardar como EvalSavedModel garantiza que las métricas utilizadas en el momento del entrenamiento también estén disponibles durante la evaluación (tenga en cuenta que esto no es necesario para los modelos basados en keras). Para guardar un EvalSavedModel es necesario importar la biblioteca de Análisis de modelos de TensorFlow (TFMA) en su 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 (por ejemplo, número de capas) para el 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 del modelo
Después del desarrollo y la capacitación inicial del modelo, es importante analizar y comprender realmente el rendimiento de su modelo. Una canalización TFX típica incluirá un componente Evaluador , que aprovecha las capacidades de la biblioteca TensorFlow Model Analysis (TFMA) , que proporciona un potente conjunto de herramientas para esta fase de desarrollo. Un componente Evaluator consume el modelo que exportó anteriormente y le permite especificar una lista de tfma.SlicingSpec
que puede usar al visualizar y analizar el rendimiento de su modelo. Cada SlicingSpec
define una porción de sus datos de entrenamiento que desea examinar, como categorías particulares para características categóricas o rangos particulares para características numéricas.
Por ejemplo, esto sería importante para intentar comprender el rendimiento de su modelo para diferentes segmentos de sus clientes, que podrían segmentarse por compras anuales, datos geográficos, grupo de edad o sexo. Esto puede ser especialmente importante para conjuntos de datos con colas largas, donde el desempeño de un grupo dominante puede enmascarar un desempeño inaceptable para grupos importantes, aunque más pequeños. Por ejemplo, su modelo puede funcionar bien para los empleados promedio pero fallar estrepitosamente para el personal ejecutivo, y podría ser importante para usted saberlo.
Análisis y visualización de modelos.
Una vez que haya completado la primera ejecución de sus datos entrenando su modelo y ejecutando el componente Evaluador (que aprovecha TFMA ) en los resultados del entrenamiento, puede visualizar los resultados en un cuaderno estilo Jupyter. Para ejecuciones adicionales, puede comparar estos resultados a medida que realiza ajustes, hasta que los resultados sean óptimos para su modelo y aplicación.
Primero consultará los metadatos de ML (MLMD) para localizar los resultados de estas ejecuciones de estos componentes y luego utilizará la API de soporte de visualización en TFMA para crear las visualizaciones en su cuaderno. Esto incluye tfma.load_eval_results y tfma.view.render_slicing_metrics. Con esta visualización puede comprender mejor las características de su modelo y, si es necesario, modificarlas según sea necesario.
Validación del rendimiento del modelo
Como parte del análisis del rendimiento de un modelo, es posible que desee validar el rendimiento con respecto a una línea de base (como el modelo que se ofrece actualmente). La validación del modelo se realiza pasando un modelo candidato y de referencia al componente Evaluador . El evaluador calcula métricas (por ejemplo, AUC, pérdida) tanto para el candidato como para la línea base junto con un conjunto correspondiente de métricas diferenciales. Luego se pueden aplicar y utilizar umbrales para impulsar sus modelos a producción.
Validar que se puede servir un modelo
Antes de implementar el modelo entrenado, es posible que desee validar si el modelo realmente se puede utilizar en la infraestructura de servicio. Esto es especialmente importante en entornos de producción para garantizar que el modelo recién publicado no impida que el sistema realice predicciones. El componente InfraValidator realizará una implementación canary de su modelo en un entorno de espacio aislado y, opcionalmente, enviará solicitudes reales para verificar que su modelo funcione correctamente.
Objetivos de implementación
Una vez que haya desarrollado y entrenado un modelo con el que esté satisfecho, ahora es el momento de implementarlo en uno o más objetivos de implementación donde recibirá solicitudes de inferencia. TFX admite la implementación en tres clases de objetivos de implementación. Los modelos entrenados que se han exportado como SavedModels se pueden implementar en cualquiera o en todos estos objetivos de implementación.
Inferencia: servicio de TensorFlow
TensorFlow Serving (TFS) es un sistema de servicio flexible y de alto rendimiento para modelos de aprendizaje automático, diseñado para entornos de producción. Consume un SavedModel y aceptará 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, utilizando una de varias arquitecturas avanzadas para manejar la sincronización y la computación distribuida. Consulte la documentación de TFS para obtener más información sobre el desarrollo y la implementación de soluciones TFS.
En una canalización típica, un SavedModel que ha sido entrenado en un componente Trainer sería primero infravalidado en un componente InfraValidator . InfraValidator lanza un servidor de modelo TFS canary para servir realmente el modelo guardado. Si la validación pasó, un componente Pusher finalmente implementará SavedModel en su infraestructura TFS. Esto incluye el manejo de múltiples versiones y actualizaciones de modelos.
Inferencia en aplicaciones nativas móviles y de IoT: TensorFlow Lite
TensorFlow Lite es un conjunto de herramientas dedicado a ayudar a los desarrolladores a utilizar sus modelos TensorFlow capacitados en aplicaciones nativas móviles y de IoT. Consume los mismos SavedModels que TensorFlow Serving y aplica optimizaciones como cuantificación y poda para optimizar el tamaño y el rendimiento de los modelos resultantes para los desafíos de ejecutarse en dispositivos móviles e IoT. Consulte la documentación de TensorFlow Lite para obtener más información sobre el uso de TensorFlow Lite.
Inferencia en JavaScript: TensorFlow JS
TensorFlow JS es una biblioteca de JavaScript para entrenar e implementar modelos de ML en el navegador y en Node.js. Consume los mismos SavedModels que TensorFlow Serving y TensorFlow Lite, y los convierte al formato web TensorFlow.js. Consulte la documentación de TensorFlow JS para obtener más detalles sobre el uso de TensorFlow JS.
Creando una tubería TFX con flujo de aire
Consulte el taller sobre flujo de aire para obtener más detalles.
Creando una canalización TFX con Kubeflow
Configuración
Kubeflow requiere un clúster de Kubernetes para ejecutar las canalizaciones a escala. Consulte la guía de implementación de Kubeflow que le guía a través de las opciones para implementar el clúster de Kubeflow.
Configurar y ejecutar la canalización TFX
Siga el tutorial de TFX en Cloud AI Platform Pipeline para ejecutar el canal de ejemplo de TFX en Kubeflow. Los componentes TFX se han contenedorizado para componer la canalización de Kubeflow y el ejemplo ilustra la capacidad de configurar la canalización para leer grandes conjuntos de datos públicos y ejecutar pasos de entrenamiento y procesamiento de datos a escala en la nube.
Interfaz de línea de comando para acciones de canalización
TFX proporciona una CLI unificada que ayuda a realizar una gama completa de acciones de canalización, como crear, actualizar, ejecutar, enumerar y eliminar canalizaciones en varios orquestadores, incluidos Apache Airflow, Apache Beam y Kubeflow. Para obtener más información, siga estas instrucciones .