Description
Durante las últimas décadas del siglo XX el mundo académico llevó a cabo numerosas investigaciones y desarrollos relacionados con el análisis de time series (TS). Sin embargo, no es hasta estos últimos años en los que la industria se ha lanzado al análisis y cómputo masivo de este tipo de datos. El auge del Internet de la Cosas y la necesidad de analizar y monitorizar datos en los que el tiempo no es una simple métrica más, sino el eje principal sobre el que versan otras variables es lo que ha puesto el foco de atención en el análisis de time series. Esta nueva demanda de cómputo debe ser acompasada por las últimas generaciones de procesadores, (multicore y GPUs), así como en el desarrollo de tecnologías de Big Data y de computación distribuida, las cuales proporcionan los medios para tratar estos grandes volúmenes de datos en tiempo real suave.
En el contexto de Python, en la actualidad existen algunas librerías que ofrecen funciones para analizar time series. Si nos centramos en librerías de pre-procesamiento, encontramos librerías como Pandas [1] y tspreprocess [2], las cuales ofrecen funciones para la carga y almacenamiento de TS, además de funciones de conversión, resampling y desplazamiento de tiempo. Por otro lado, encontramos las librerías Prophet [3], PyFlux [4] y Pyramid [5], que nos ofrecen funciones de forecasting para predecir futuros valores en una time series. Por último, hay otro grupo de librerías como, tsfresh [6], tslearn [7] y shapelets [8] que generan clasificadores y regresores para time series. A pesar de la existencia de estas librerías que tratan time series, observamos principalmente dos limitaciones: 1) La funcionalidad que ofrecen estas librerías se encuentra muy fragmentada en librerías inconexas y 2) la mayoría de estas librerías son secuenciales, es decir, se ejecutan en un único thread, por lo que no son capaces de sacar ventaja de los procesadores paralelos como GPUs o CPUs multicores.
Para superar las dos limitaciones anteriores, presentamos Khiva [9], una librería opensource que permite la ejecución de una larga lista de algoritmos de análisis de time series sobre GPUs. Khiva incorpora algoritmos de reducción de dimensionalidad, cálculo de distancias, normalización, regresión, regularización, extracción de características, estadísticos descriptivos, búsqueda de patrones, etc. Para la implementación de todos los algoritmos hemos usado la librería Arrayfire [10] como capa de abstracción de las principales APIs de GPUs para cómputo, OpenCL [11] y Nvidia CUDA [12]. De esta forma, somos capaces de asegurar que la librería Khiva se puede ejecutar en cualquier plataforma independientemente de la GPU que se encuentre disponible. Además de la aceleración del tiempo de ejecución, otra de las principales ventajas que proporciona Khiva, es que la mayoría de los algoritmos mencionados son concatenables. Debido a que implementamos una estrategia lazy para las transferencias de memoria entre CPU y GPU, así solo se transfieren datos entre CPU y GPU si es estrictamente necesario, por lo que evitamos todas aquellas transferencias que son innecesarias.
Durante la charla, ofreceremos una introducción a las time series y a los problemas que se pueden resolver con el tratamiento de éstas. Posteriormente, presentaremos los aspectos de implementación más importantes, aquí profundizaremos en los mecanismos que hemos usado para ejecutar nuestros algoritmos en GPU y finalizaremos con una sencilla demostración en Python (live coding), utilizaremos Khiva para analizar un conjunto de datos de consumo energético para encontrar patrones comunes entre ellos.
Works Cited
[1] "Pandas Library Documentation," [Online]. Available: https://pandas.pydata.org/pandas-docs/version/0.22.0/timeseries.html. [Accessed 04 06 2018].
[2] "tspreprocess," Maximilian Christ, [Online]. Available: https://github.com/MaxBenChrist/tspreprocess. [Accessed 04 06 2018].
[3] "Prophet," Facebook, [Online]. Available: https://github.com/facebook/prophet. [Accessed 20018 06 04].
[4] "PyFlux," Ross Taylor, [Online]. Available: https://github.com/RJT1990/pyflux. [Accessed 04 06 2018].
[5] "Pyramid," Taylor G Smith, [Online]. Available: https://github.com/tgsmith61591/pyramid. [Accessed 04 06 2018].
[6] "tsfresh," Blue-yonder, [Online]. Available: https://github.com/blue-yonder/tsfresh. [Accessed 04 06 2018].
[7] "tslearn," Romain Tavenard, [Online]. Available: https://github.com/rtavenar/tslearn. [Accessed 04 06 2018].
[8] "shaplets-python," Mohamed Abdulaziz Ali Haseeb, [Online]. Available: https://github.com/mohaseeb/shaplets-python. [Accessed 04 06 2018].
[9] "Khiva Library," Shapelets.io, [Online]. Available: https://github.com/Shapelets/Khiva. [Accessed 04 06 2018].
[10] "Arrayfire Documentation," ArrayFire, [Online]. Available: https://arrayfire.org/docs/index.htm. [Accessed 04 06 2018].
[11] "OpenCL," Khronos Group, [Online]. Available: https://www.khronos.org/opencl/. [Accessed 04 06 2018].
[12] "Nvidia Cuda," Nvidia, [Online]. Available: https://developer.nvidia.com/cuda-toolkit. [Accessed 04 06 2018].