¿Cómo acelerar Pandas con cuDF?

Los marcos de datos de Pandas en Python son extremadamente útiles; proporcionan una manera fácil y flexible de manejar los datos y una gran cantidad de funciones integradas para manejar, analizar y procesar los datos. Si bien los marcos de datos de Pandas tienen un tiempo de procesamiento decente, aún en el caso de operaciones computacionalmente intensivas, los marcos de datos de Pandas tienden a ser lentos, lo que provoca demoras en la ciencia de datos y los flujos de trabajo de ML. Esta velocidad limitada de los marcos de datos de pandas se debe a que los pandas funcionan en CPU que solo tienen 8 núcleos. Sin embargo, la aceleración de la GPU de los flujos de trabajo de ciencia de datos y aprendizaje automático proporciona una solución a este problema y mejora la velocidad de las operaciones a un nivel impresionante.

CUDF

cuDF (CUDA DF) es una biblioteca de tramas de datos GPU de Python que ayuda a acelerar la carga, el procesamiento y la manipulación de datos masivos, lo que permite a los usuarios realizar operaciones informáticas intensivas rápidamente. cuDF se basa en un diseño de columna de flecha de apache que discutiremos más adelante. 

Para cambiar de CPU a GPU, es decir, Pandas a cuDF, no es necesario aprender una nueva biblioteca desde cero. cuDF proporciona una API similar a Pandas, lo que hace que el cambio de Pandas a cuDF sea bastante simple para los científicos de datos, analistas e ingenieros de aprendizaje automático. Al igual que Pandas, cuDF ofrece dos estructuras de datos: Series y Dataframe: la mayoría de las funciones integradas también están disponibles en cuDF con la misma sintaxis.

Requisitos CUDA/GPU:

  • CUDA 11.0+
  • Controlador NVIDIA 450.80.02+
  • Arquitectura Pascal o superior (Capacidad informática >=6.0)
  • Conda

cuDF se puede instalar con conda desde el canal rapidsai:

# for CUDA 11.0
conda install -c rapidsai -c nvidia -c numba -c conda-forge \
   cudf=21.08 python=3.7 cudatoolkit=11.0

# or, for CUDA 11.2
conda install -c rapidsai -c nvidia -c numba -c conda-forge \
   cudf=21.08 python=3.7 cudatoolkit=11.2

Comparación entre tiempos computacionales de Pandas y cuDF

Para analizar el tiempo necesario en ambos casos, intentemos cargar un gran conjunto de datos data.csv, primero usando la biblioteca pandas y luego usando cuDF, y comparemos el tiempo computacional en ambos casos.

En el siguiente ejemplo, hemos tomado un conjunto de datos masivo ‘Data.csv’ que comprende 887379 filas y 22 columnas. Primero, cargaremos el conjunto de datos usando Pandas para calcular el tiempo necesario, luego repetiremos lo mismo usando cuDF para cargar el mismo conjunto de datos y comparar los tiempos de ejecución.

Usando Pandas para cargar un conjunto de datos:

Python3

# Loading the Dataset using Pandas Library (CPU Based)
import pandas as pd
import time
  
  
start = time.time()
df = pd.read_csv("Data.csv")
print("no. of rows in the dataset", df.shape[0])
print("no. of columns in the dataset", df.shape[1])
end = time.time()
print("CPU time= ", end-start)

Producción:

no. of rows in the dataset 887379
no. of columns in the dataset 22
CPU time=  2.3006720542907715

El resultado del código anterior usa Pandas para cargar Data.csv.

Usando cuDF para cargar un conjunto de datos:

Python3

# Loading the Dataset using Pandas Library (GPU Based)
import cudf
import time
  
start = time.time()
df = cudf.read_csv("../input/data-big/Data.csv")
print("no. of rows in the dataset", df.shape[0])
print("no. of columns in the dataset", df.shape[1])
end = time.time()
print("GPU time= ", end-start)

Producción:

no. of rows in the dataset 887379
no. of columns in the dataset 22
GPU time=  0.1478710174560547

La salida del código anterior usa cuDF para cargar Data.csv.

De los dos casos anteriores, se puede ver que la CPU (Pandas) tarda 2,3006720542907715 segundos en cargar el conjunto de datos, mientras que la GPU (cuDF) tarda solo 0,1478710174560547 segundos , que es mucho más rápido.

Diseño de columna de flecha en cuDF

Como se indicó anteriormente, cuDF emplea Apache Arrow Columnar Layout, un formato de columna en memoria que se usa para representar conjuntos de datos estructurados. Este formato de columnas es rápido y permite que las operaciones informáticas intensivas funcionen con la máxima eficiencia al manejar e iterar grandes conjuntos de datos.

A continuación, se representa un conjunto de datos de muestra en el búfer de memoria tradicional y el búfer de memoria de flecha (diseño en columnas).

Búfer de memoria tradicional Vs Búfer de memoria de flecha 

Búfer de memoria tradicional: los datos se almacenan en ubicaciones de memoria contiguas en filas. Por el contrario, en el caso de Arrow Memory Buffer, los datos se almacenan en ubicaciones de memoria contiguas en forma de columna. Este es uno de los factores que contribuyen a acelerar la velocidad de las tramas de datos cuDF.

Nota: dado que cuDF requiere que tenga GPU compatibles con RAPIDS específicas, por el bien de la práctica/exploración, se puede usar Kaggle o Google Colaboratory, ya que ambas plataformas brindan acceso gratuito a la GPU. Sin embargo, al usar Google Colabs, solo asegúrese de que se le hayan asignado cualquiera de las siguientes GPU: Tesla T4, P4 o P100, ya que estas son las únicas GPU compatibles con RAPIDS en Google Colab.

Por lo tanto, es evidente que al usar cuDF podemos emplear la aceleración de GPU en los marcos de datos de Python y hacer que el procesamiento de datos sea bastante rápido. Esto tiene una importancia inmensa en los campos de la ciencia de datos y ML, ya que los datos se generan en cantidades abrumadoras cada segundo, y su procesamiento rápido es imperativo. 

Publicación traducida automáticamente

Artículo escrito por suvratarora06 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *