Dominando las GPUs Una guía para principiantes sobre DataFrames acelerados por GPU en Python

Dominando las GPUs Guía principiantes DataFrames GPU Python

Publicación de Asociación

 

Si estás trabajando en Python con grandes conjuntos de datos, tal vez de varios gigabytes de tamaño, probablemente puedas relacionarte con la frustración de esperar horas para que tus consultas terminen mientras tu DataFrame de pandas basado en CPU lucha por realizar operaciones. Esta situación exacta es donde un usuario de pandas debería considerar aprovechar el poder de las GPU para el procesamiento de datos con RAPIDS cuDF.

RAPIDS cuDF, con su API similar a pandas, permite a los científicos de datos e ingenieros aprovechar rápidamente el inmenso potencial de la computación paralela en las GPU, con solo unos pocos cambios en las líneas de código.

Si no estás familiarizado con la aceleración de GPU, esta publicación es una introducción fácil al ecosistema de RAPIDS y muestra la funcionalidad más común de cuDF, el equivalente de DataFrame de pandas basado en GPU.

¿Quieres un resumen práctico de estos consejos? Sigue con la hoja de trucos descargable de cuDF.

 

Aprovechando las GPU con cuDF DataFrame

  cuDF es un componente básico para la ciencia de datos en la suite de bibliotecas aceleradas por GPU de RAPIDS. Es un caballo de batalla para el análisis exploratorio de datos que puedes usar para construir tuberías de datos permitiendo procesar datos y derivar nuevas características. Como componente fundamental dentro de la suite de RAPIDS, cuDF respalda a las otras bibliotecas, solidificando su papel como un componente común. Al igual que todos los componentes de la suite de RAPIDS, cuDF utiliza el backend de CUDA para alimentar los cálculos de la GPU.

Sin embargo, con una interfaz de Python fácil y familiar, los usuarios de cuDF no necesitan interactuar directamente con esa capa.

Cómo cuDF puede acelerar tu trabajo de ciencia de datos

  ¿Estás cansado de ver el reloj mientras se ejecuta tu script? Ya sea que estés manejando datos de cadenas o trabajando con series de tiempo, hay muchas formas en las que puedes usar cuDF para impulsar tu trabajo con datos.

  • Análisis de series de tiempo: Ya sea que estés remuestreando datos, extrayendo características o realizando cálculos complejos, cuDF ofrece una mejora significativa de velocidad, potencialmente hasta 880 veces más rápido que pandas para el análisis de series de tiempo.
  • Análisis exploratorio de datos en tiempo real (EDA): Navegar por grandes conjuntos de datos puede ser una tarea difícil con herramientas tradicionales, pero el poder de procesamiento acelerado por GPU de cuDF hace posible la exploración en tiempo real incluso de los conjuntos de datos más grandes.
  • Preparación de datos para aprendizaje automático (ML): Acelera las tareas de transformación de datos y prepara tus datos para algoritmos de aprendizaje automático comúnmente utilizados, como regresión, clasificación y agrupación, con las capacidades de aceleración de cuDF. Un procesamiento eficiente significa un desarrollo de modelos más rápido y te permite avanzar hacia la implementación más rápidamente.
  • Visualización de datos a gran escala: Ya sea que estés creando mapas de calor para datos geográficos o visualizando tendencias financieras complejas, los desarrolladores pueden implementar bibliotecas de visualización de datos con visualización de datos de alto rendimiento y alta FPS utilizando cuDF y cuxfilter. Esta integración permite que la interactividad en tiempo real se convierta en un componente vital de tu ciclo de análisis.
  • Filtrado y transformación de datos a gran escala: Para conjuntos de datos grandes que exceden varios gigabytes, puedes realizar tareas de filtrado y transformación utilizando cuDF en una fracción del tiempo que lleva con pandas.
  • Procesamiento de datos de cadenas: Tradicionalmente, el procesamiento de datos de cadenas ha sido una tarea desafiante y lenta debido a la naturaleza compleja de los datos de texto. Estas operaciones se vuelven sencillas con la aceleración de GPU.
  • Operaciones de GroupBy: Las operaciones de GroupBy son fundamentales en el análisis de datos, pero pueden requerir muchos recursos. cuDF acelera significativamente estas tareas, lo que te permite obtener ideas más rápido al dividir y agregar tus datos.

 

Interfaz familiar para el procesamiento de GPU

  La premisa principal de RAPIDS es proporcionar una experiencia de usuario familiar para las herramientas populares de ciencia de datos, de modo que el poder de las GPU de NVIDIA esté fácilmente accesible para todos los profesionales. Ya sea que estés realizando ETL, construyendo modelos de ML o procesando gráficos, si conoces pandas, NumPy, scikit-learn o NetworkX, te sentirás como en casa al usar RAPIDS.

Cambiar de la pila de ciencia de datos de CPU a GPU nunca ha sido tan fácil: con tan solo importar cuDF en lugar de pandas, puedes aprovechar el enorme poder de las GPU de NVIDIA, acelerando las cargas de trabajo de 10 a 100 veces (en el extremo inferior) y disfrutar de una mayor productividad, todo mientras usas tus herramientas favoritas.

Verifique el código de muestra a continuación que presenta lo familiar que es la API de cuDF para cualquier persona que use pandas.

import pandas as pd
import cudf
df_cpu = pd.read_csv('/data/sample.csv')
df_gpu = cudf.read_csv('/data/sample.csv')

 

Cargando datos de tus fuentes de datos favoritas

  Las capacidades de lectura y escritura de cuDF han crecido significativamente desde el primer lanzamiento de RAPIDS en octubre de 2018. Los datos pueden estar locales en una máquina, almacenados en un clúster local o en la nube. cuDF utiliza la biblioteca fsspec para abstraer la mayoría de las tareas relacionadas con el sistema de archivos para que puedas centrarte en lo que más importa: crear características y construir tu modelo.

Gracias a fsspec, leer datos desde un sistema de archivos local o en la nube solo requiere proporcionar credenciales para este último. El siguiente ejemplo lee el mismo archivo desde dos ubicaciones diferentes,

import cudf
df_local = cudf.read_csv('/data/sample.csv')
df_remote = cudf.read_csv(
    's3://<bucket>/sample.csv'
    , storage_options = {'anon': True})

 

cuDF admite múltiples formatos de archivo: formatos basados en texto como CSV/TSV o JSON, formatos orientados a columnas como Parquet o ORC, o formatos orientados a filas como Avro. En términos de soporte de sistema de archivos, cuDF puede leer archivos desde el sistema de archivos local, proveedores de la nube como AWS S3, Google GS o Azure Blob/Data Lake, sistemas de archivos Hadoop en local o remoto, y también directamente desde servidores web HTTP o (S)FTP, Dropbox o Google Drive, o el sistema de archivos de Jupyter.

 

Creando y guardando DataFrames fácilmente

  Leer archivos no es la única forma de crear DataFrames de cuDF. De hecho, hay al menos 4 formas de hacerlo:

A partir de una lista de valores puedes crear un DataFrame con una columna,

cudf.DataFrame([1,2,3,4], columns=['foo'])

Pasando un diccionario si quieres crear un DataFrame con varias columnas,

cudf.DataFrame({
      'foo': [1,2,3,4]
    , 'bar': ['a','b','c',None]
})

 

Creando un DataFrame vacío y asignando columnas,

df_sample = cudf.DataFrame()
df_sample['foo'] = [1,2,3,4]
df_sample['bar'] = ['a','b','c',None]

 

Pasando una lista de tuplas,

cudf.DataFrame([
      (1, 'a')
    , (2, 'b')
    , (3, 'c')
    , (4, None)
], columns=['ints', 'strings'])

 

También puedes convertir hacia y desde otras representaciones de memoria:

  • Desde una matriz interna de GPU representada como un DeviceNDArray,
  • A través de objetos de memoria DLPack utilizados para compartir tensores entre marcos de aprendizaje profundo y el formato Apache Arrow que facilita una forma mucho más conveniente de manipular objetos de memoria desde varios lenguajes de programación,
  • A convertir hacia y desde pandas DataFrames y Series.

Además, cuDF admite guardar los datos almacenados en un DataFrame en múltiples formatos y sistemas de archivos. De hecho, cuDF puede almacenar datos en todos los formatos que puede leer.

Todas estas capacidades hacen posible comenzar rápidamente sin importar cuál sea tu tarea o dónde se encuentren tus datos.

 

Extrayendo, transformando y resumiendo datos

  La tarea fundamental de la ciencia de datos, y aquella de la que todos los científicos de datos se quejan, es limpiar, generar características y familiarizarse con el conjunto de datos. Pasamos el 80% de nuestro tiempo haciendo eso. ¿Por qué lleva tanto tiempo?

Una de las razones es porque las preguntas que hacemos al conjunto de datos tardan demasiado en responderse. Cualquiera que haya intentado leer y procesar un conjunto de datos de 2 GB en una CPU sabe de qué estamos hablando.

Además, como somos humanos y cometemos errores, volver a ejecutar un pipeline puede convertirse rápidamente en un ejercicio de todo el día. Esto resulta en una productividad perdida y, probablemente, en una adicción al café si observamos el gráfico a continuación.

   

RAPIDS con el flujo de trabajo impulsado por GPU elimina todos estos obstáculos. La etapa de ETL normalmente es entre 8 y 20 veces más rápida, por lo que cargar ese conjunto de datos de 2GB lleva segundos en comparación con minutos en una CPU, ¡limpiar y transformar los datos también es mucho más rápido! Todo esto con una interfaz familiar y cambios mínimos en el código.

 

Trabajando con cadenas y fechas en GPU

  No hace más de 5 años, trabajar con cadenas y fechas en GPU se consideraba casi imposible y fuera del alcance de los lenguajes de programación de bajo nivel como CUDA. Después de todo, las GPU fueron diseñadas para procesar gráficos, es decir, manipular matrices y matrices grandes de enteros y flotantes, no cadenas o fechas.

RAPIDS te permite no solo leer cadenas en la memoria de la GPU, sino también extraer características, procesarlas y manipularlas. Si estás familiarizado con Regex, entonces extraer información útil de un documento en una GPU ahora es una tarea trivial gracias a cuDF. Por ejemplo, si quieres encontrar y extraer todas las palabras en tu documento que coincidan con el patrón [a-z]*flow (como dataflow, workflow o flow), todo lo que necesitas hacer es,

df['string'].str.findall('([a-z]*flow)')

Extraer características útiles de fechas o consultar los datos para un período de tiempo específico se ha vuelto más fácil y rápido gracias a RAPIDS también. 

dt_to = dt.datetime.strptime("2020-10-03", "%Y-%m-%d")
df.query('dttm <= @dt_to')

 

Potenciando a los usuarios de Pandas con aceleración de GPU

  La transición de una pila de ciencia de datos de CPU a GPU es sencilla con RAPIDS. Importar cuDF en lugar de pandas es un cambio pequeño que puede brindar beneficios inmensos. Ya sea que estés trabajando en una GPU local o escalando a centros de datos completos, el poder acelerado por GPU de RAPIDS ofrece mejoras de velocidad de 10 a 100 veces (en el extremo inferior). Esto no solo conduce a un aumento de la productividad, sino que también permite una utilización eficiente de tus herramientas favoritas, incluso en los escenarios a gran escala más exigentes. 

​​RAPIDS ha revolucionado verdaderamente el panorama del procesamiento de datos, permitiendo a los científicos de datos completar tareas en minutos que antes llevaban horas o incluso días, lo que conduce a un aumento de la productividad y costos generales más bajos. 

Para comenzar a aplicar estas técnicas a tu conjunto de datos, lee la serie de análisis de datos acelerados en el blog técnico de NVIDIA.

Nota del editor: Esta publicación se actualizó con permiso y se adaptó originalmente del blog técnico de NVIDIA.    

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Evaluar las solicitudes RAG con las RAGAs

Evaluando los componentes de recuperación y generación de un sistema de generación mejorado con recuperación (RAG) po...

Inteligencia Artificial

La Escuela de Ingeniería da la bienvenida a Songyee Yoon, PhD '00, como investigadora visitante de innovación.

Un emprendedor e innovador visionario, Yoon se enfocará en el emprendimiento, el apoyo a las ingenieras mujeres y el ...

Inteligencia Artificial

Shutterstock lleva la IA generativa a los fondos de escenas en 3D con NVIDIA Picasso

Imagínate esto: los creadores pueden crear y personalizar rápidamente fondos de escenas en 3D con la ayuda de la IA g...

Inteligencia Artificial

Luchando contra los 'hechos' falsos con dos pequeñas palabras

Los investigadores han desarrollado un método para disminuir las alucinaciones en modelos de lenguaje grandes (LLMs) ...

Ciencias de la Computación

Después de un año difícil, Zuckerberg presenta el plan de Meta a los empleados.

En una reunión interna de toda la empresa, el director ejecutivo explicó sus planes para la inteligencia artificial, ...

Inteligencia Artificial

Jugando ¿Dónde está Wally? en 3D OpenMask3D es un modelo de IA que puede segmentar instancias en 3D con consultas de vocabulario abierto.

La segmentación de imágenes ha avanzado mucho en la última década, gracias al avance de las redes neuronales. Ahora e...