Meta presenta Velox, un motor de ejecución unificado de código abierto destinado a acelerar los sistemas de gestión de datos y optimizar su desarrollo.Velox está en desarrollo activo. Los resultados experimentales de nuestro artículo publicado en la Conferencia internacional sobre bases de datos muy grandes (VLDB) 2022 muestran cómo Velox mejora la eficiencia y la coherencia en los sistemas de gestión de datos.Velox ayuda a consolidar y unificar los sistemas de administración de datos de una manera que creemos beneficiará a la industria. Esperamos que la comunidad de código abierto más grande se una a nosotros para contribuir al proyecto.La infraestructura de Meta juega un papel importante en el soporte de nuestros productos y servicios. El ecosistema de infraestructura de datos está compuesto por docenas de motores de computación de datos especializados, todos enfocados en diferentes cargas de trabajo para una variedad de casos de uso que van desde análisis de SQL (por lotes e interactivo) hasta cargas de trabajo transaccionales, procesamiento de flujo, ingesta de datos y más.Recientemente, el rápido crecimiento de los casos de uso de inteligencia artificial (IA) y aprendizaje automático (ML) dentro de la infraestructura de Meta ha llevado a motores y bibliotecas adicionales dirigidos a la ingeniería de funciones, el preprocesamiento de datos y otras cargas de trabajo para la formación de ML y canalizaciones de servicio.Para abordar estos desafíos y crear una infraestructura de datos más sólida y eficiente para nuestros propios productos y el mundo, Meta ha creado y abierto Velox . Es un motor de ejecución unificado novedoso y de última generación que tiene como objetivo acelerar los sistemas de gestión de datos y optimizar su desarrollo.Velox unifica los componentes comunes de uso intensivo de datos de los motores de computación de datos sin dejar de ser extensible y adaptable a diferentes motores de computación.Democratiza las optimizaciones que anteriormente solo se implementaban en motores individuales, proporcionando un marco en el que se puede implementar una semántica coherente. Esto reduce la duplicación del trabajo, promueve la reutilización y mejora la eficiencia y la coherencia generales. Velox está en desarrollo activo, pero ya se encuentra en varias etapas de integración con más de una docena de sistemas de datos en Meta, incluidos Presto, Spark y PyTorch (este último a través de una biblioteca de preprocesamiento de datos llamada TorchArrow), así como otros procesos de flujo interno. plataformas, motores transaccionales, sistemas e infraestructura de ingesta de datos, sistemas ML para ingeniería de características y otros. Desde que se cargó por primera vez en GitHub , el proyecto de código abierto Velox ha atraído a más de 150 colaboradores de código, incluidos colaboradores clave como Ahana, Intel y Voltron Data, así como varias instituciones académicas.Al abrir el código fuente y fomentar una comunidad para Velox, creemos que podemos acelerar el ritmo de la innovación en la industria de desarrollo del sistema de administración de datos. Esperamos que más personas y empresas se unan a nosotros en este esfuerzo.
? CÓDIGO FUENTE DEL NUEVO MOTOR VELOX
Descripción general de Velox
Si bien los motores de computación de datos pueden parecer distintos al principio, todos están compuestos por un conjunto similar de componentes lógicos: Una interfaz de lenguaje, una representación intermedia (IR), un optimizador, un tiempo de ejecución de ejecución y un motor de ejecución. Velox proporciona los componentes básicos necesarios para implementar motores de ejecución, que consisten en todas las operaciones de uso intensivo de datos ejecutadas dentro de un solo host, como evaluación de expresiones, agregación, clasificación, unión y más.Por lo tanto, Velox espera un plan optimizado como entrada y lo ejecuta de manera eficiente utilizando los recursos disponibles en el host local.Velox aprovecha numerosas optimizaciones de tiempo de ejecución, como el reordenamiento de filtros y conjuntos, la normalización de claves para agregaciones y uniones basadas en arreglos y hash, la inserción de filtros dinámicos y la captación previa de columnas adaptativas.Estas optimizaciones brindan una eficiencia local óptima dado el conocimiento disponible y las estadísticas extraídas de los lotes de datos entrantes.Velox también está diseñado desde cero para admitir tipos de datos complejos de manera eficiente debido a su ubicuidad en las cargas de trabajo modernas y, por lo tanto, se basa en gran medida en la codificación de diccionario para operaciones de aumento y reducción de cardinalidad, como uniones y filtrado, al tiempo que proporciona rutas rápidas para tipos de datos primitivos.Los principales componentes proporcionados por Velox son:
- Tipo: un sistema de tipo genérico que permite a los desarrolladores representar tipos de datos escalares, complejos y anidados, incluidas estructuras, mapas, matrices, funciones (lambdas), decimales, tensores y más.
- Vector: un módulo de diseño de memoria en columnas compatible con Apache Arrow que admite múltiples codificaciones, como plana, diccionario, constante, secuencia/RLE y marco de referencia, además de un patrón de materialización perezoso y soporte para relleno de búfer de resultados fuera de orden .
- Expression Eval: un motor de evaluación de expresiones vectorizadas de última generación basado en datos codificados por vectores, que aprovecha técnicas como la eliminación de subexpresiones comunes, el plegamiento constante, la propagación nula eficiente, la evaluación consciente de la codificación, el pelado de diccionarios y la memorización.
- Funciones: API que los desarrolladores pueden usar para crear funciones personalizadas, proporcionando una interfaz simple (fila por fila) y vectorizada (lote por lote) para funciones escalares y una API para funciones agregadas.
- También se proporciona como parte de la biblioteca un paquete de funciones compatible con el popular dialecto PrestoSQL.
- Operadores: implementación de operadores SQL comunes como TableScan, Project, Filter, Aggregation, Exchange/Merge, OrderBy, TopN, HashJoin, MergeJoin, Unnest y más.
- I/O: un conjunto de API que permite que Velox se integre en el contexto de otros motores y tiempos de ejecución, como:
- Conectores: permite a los desarrolladores especializar las fuentes y receptores de datos para los operadores de TableScan y TableWrite.
- DWIO: una interfaz extensible que brinda soporte para codificar/descodificar formatos de archivo populares como Parquet, ORC y DWRF.
- Adaptadores de almacenamiento: una interfaz extensible basada en bytes que permite que Velox se conecte a sistemas de almacenamiento como Tectonic , S3, HDFS y más.
- Serializadores: una interfaz de serialización dirigida a la comunicación de red donde se pueden implementar diferentes protocolos de conexión, que admite los formatos PrestoPage y UnsafeRow de Spark.
- Gestión de recursos: una colección de primitivas para manejar recursos computacionales, como la gestión de CPU y memoria, el derrame y el almacenamiento en caché de memoria y SSD.
Spark: Gluten
Velox también se está integrando en Spark como parte del proyecto Gluten creado por Intel. Gluten permite que los motores de ejecución de C++ (como Velox) se utilicen dentro del entorno Spark mientras se ejecutan consultas Spark SQL.Gluten desacopla la JVM de Spark y el motor de ejecución mediante la creación de una API JNI basada en el formato de datos Apache Arrow y los planes de consulta de Substrait, lo que permite que Velox se use dentro de Spark simplemente integrándose con la API JNI de Gluten.El código base de Gluten está disponible en GitHub.
TorchArrow
TorchArrow es una biblioteca de marcos de datos de Python para el preprocesamiento de datos en el aprendizaje profundo y parte del proyecto PyTorch. TorchArrow traduce internamente la representación del marco de datos en un plan de Velox y lo delega a Velox para su ejecución.Además de hacer converger el espacio fragmentado de las bibliotecas de preprocesamiento de datos de ML, esta integración permite que Meta consolide el código del motor de ejecución entre los motores analíticos y la infraestructura de ML.Brinda una experiencia más consistente para los usuarios finales de ML, que comúnmente deben interactuar con diferentes motores de cómputo para completar una tarea en particular, al exponer el mismo conjunto de funciones/UDF y garantizar un comportamiento consistente en todos los motores.TorchArrow se lanzó recientemente en modo beta en GitHub.
El futuro del desarrollo de sistemas de bases de datos
Velox demuestra que es posible hacer que los sistemas de computación de datos sean más adaptables al consolidar sus motores de ejecución en una sola biblioteca unificada.A medida que continuamos integrando Velox en nuestros propios sistemas, nos comprometemos a construir una comunidad de código abierto sostenible para respaldar el proyecto y acelerar el desarrollo de bibliotecas y la adopción de la industria.También estamos interesados en seguir desdibujando los límites entre la infraestructura de ML y los sistemas de gestión de datos tradicionales al unificar los paquetes de funciones y la semántica entre estos silos.