- La visualización de datos científicos se ha vuelto más propensa a cuellos de botella por los datos masivos y de alta dimensión, junto con las exigencias de análisis en tiempo real, y fastplotlib es una biblioteca de Python que busca reducirlos con plotting acelerado por GPU
- Con renderizado basado en WGPU, permite exploración de datos a gran escala, prototipado rápido, diseño de algoritmos y construcción de sistemas de adquisición en tiempo real para instrumentación
- Adopta una API centrada en arreglos, de modo que incluso después del plot inicial se pueden cambiar dinámicamente propiedades gráficas como color, colormap y datos usando indexación al estilo de NumPy
- Con un sistema de eventos basado en callbacks, define interacciones del usuario como clics; en el ejemplo se construye un flujo que encuentra el círculo más cercano a la posición clicada y cambia su color
- El renderizado se abstrae sobre pygfx y, a través de WGPU, apunta a Vulkan, Metal y DX12, por lo que se enfoca en aprovechar GPUs modernas más que herramientas centradas en OpenGL
El cuello de botella de visualización científica al que apunta fastplotlib
- fastplotlib es una biblioteca de plotting científico acelerada por GPU con WGPU que busca una visualización rápida e interactiva
- En general, la visualización científica se vuelve difícil por las siguientes razones
- Los datos pueden llegar a una escala de terabytes y a menudo son de alta dimensión
- Es difícil usar eficientemente los recursos de cómputo
- Muchas herramientas se centran en plots estáticos o no escalan bien con grandes volúmenes de datos
- La visualización va más lenta que la generación de datos, lo que retrasa el análisis en tiempo real
- fastplotlib enfatiza los siguientes usos para lograr visualización interactiva y de alto rendimiento
- Visualización acelerada por GPU
- Prototipado rápido y diseño de algoritmos
- Exploración de datos a gran escala y renderizado rápido
- Creación de sistemas de adquisición en tiempo real para instrumentación
- Para la mayoría de los casos de uso, una GPU integrada moderna es suficiente
Exploración interactiva más allá de los plots estáticos
- La visualización científica tradicional ha dependido de plots estáticos, pero la visualización dinámica e interactiva hace que la exploración y el análisis de datos sean más directos
- Como ejemplo, se visualiza de manera interactiva con fastplotlib la matriz de covarianza del Olivetti faces dataset
- El subplot de la izquierda muestra la matriz de covarianza del Olivetti faces dataset
- Cada elemento de la matriz de covarianza representa cómo cambian juntas las intensidades de dos píxeles
- El subplot de la derecha es una imagen reconstruida de la fila actualmente seleccionada de la matriz de covarianza
- Al mover el selector, se puede cambiar fácilmente la fila que se está viendo
- En lugar de ver la matriz de covarianza solo de forma estática, observar junto a ella la imagen reconstruida de cada fila permite entender mejor cómo cambian las intensidades de los píxeles en los rostros del dataset
- Este ejemplo muestra que, incluso con un nivel pequeño de interacción, se puede mejorar la comprensión de los datos, más que profundizar en el análisis de la propia matriz de covarianza
- fastplotlib busca ampliar el alcance de uso de la visualización científica al ofrecer mecanismos para crear plots interactivos de alto nivel
Una API que se maneja como un arreglo
- En el ecosistema de visualización científica de Python hay muchas herramientas de código abierto, pero algunas bibliotecas tienen APIs complejas que elevan la barrera de entrada para científicos y usuarios
- fastplotlib busca ofrecer visualización interactiva rápida con una API intuitiva
- Su diseño central consiste en hacer que no sea necesario pensar en los datos de la visualización como algo distinto de un arreglo
- Si los datos mantienen una estructura de arreglo familiar, también se simplifica la interacción con la visualización
- En el ejemplo, después de dibujar una onda seno, se cambia a rojo el color de un punto de cada tres mediante indexación al estilo de NumPy
sine_wave.colors[::3] = "red"
- De esta manera, incluso después del plot inicial se pueden manipular dinámicamente varias propiedades del gráfico
- La API basada en arreglos es la base para que fastplotlib sea flexible e intuitivo de usar
Un sistema de eventos construido con callbacks
- fastplotlib también está diseñado para que su sistema de eventos sea fácil de manejar
- Los eventos entre gráficos o plots pueden definirse con funciones callback, lo que permite crear y extender visualizaciones interactivas
- El ejemplo de evento de clic funciona con el siguiente flujo
- Se generan datos de varios círculos
- Se agregan los círculos al plot con
add_line_collection
- Se registra un handler del evento
"click" en el renderizador
- Se convierte la posición del clic de coordenadas de pantalla a coordenadas del mundo
- Se encuentra el gráfico más cercano a la posición clicada
- Se cambia a blanco el color del círculo más cercano
- El manejo de eventos sigue un método en el que primero se define la acción como función y luego se agrega el handler al gráfico o plot correspondiente
- En vez de tener que aprender una API compleja y específica de la biblioteca, el usuario puede construir interacciones definiendo funciones
Uso de GPUs modernas y APIs gráficas modernas
- La GPU se ha vuelto casi una condición previa de facto en el trabajo científico, y la visualización no es la excepción
- Para crear visualizaciones de alta resolución con buen rendimiento, es necesario aprovechar al máximo los recursos de cómputo de la GPU
- Un ejemplo de fastplotlib hace plotting de 3 millones de puntos mientras realiza las siguientes tareas
- Graficar una línea
- Hacer zoom in y zoom out
- Cambiar el colormap de la línea
- Cambiar individualmente el color de puntos específicos
- En otras bibliotecas de visualización científica de Python, es difícil graficar tantos puntos de una sola vez y controlar con tanto detalle el color de cada punto
- fastplotlib se abstrae sobre el motor de renderizado pygfx
- pygfx funciona sobre WGPU, y WGPU apunta a las siguientes APIs gráficas según la plataforma
- Linux: Vulkan
- Mac: Metal
- Windows: DX12
- Vulkan, Metal y DX12 son APIs gráficas nuevas que son más rápidas y eficientes que OpenGL, y aprovechan mejor el hardware de la GPU
- fastplotlib fue construido sobre pygfx para abstraer detalles de bajo nivel del motor de renderizado, como cámara, renderizador y escena, así como código repetitivo, de modo que el usuario pueda concentrarse en los datos
Documentación y lo que sigue
- fastplotlib busca abordar los problemas actuales de la visualización científica en Python combinando una API basada en arreglos y fácil de usar con hardware gráfico moderno
- La documentación y los ejemplos están disponibles en la documentación de fastplotlib
- Guía de usuario
- Cómo empezar
- Galería de ejemplos
- Las preguntas o conversaciones se reciben a través de GitHub Issue o Discussion
- En el futuro se agregarán textos que profundicen más en ejemplos de uso de fastplotlib y en la tecnología gráfica subyacente
Aún no hay comentarios.