Aprovechando el poder de las GPUs con CuPy en Python

Potenciando el poder de las GPUs con CuPy en Python

 

¿Qué es CuPy?

 

CuPy es una biblioteca de Python compatible con arreglos de NumPy y SciPy, diseñada para el cálculo acelerado por GPU. Al reemplazar la sintaxis de NumPy con CuPy, puedes ejecutar tu código en plataformas NVIDIA CUDA o AMD ROCm. Esto te permite realizar tareas relacionadas con arreglos utilizando aceleración GPU, lo que resulta en un procesamiento más rápido de arreglos más grandes.

Al cambiar solo unas pocas líneas de código, puedes aprovechar el enorme poder de procesamiento en paralelo de las GPUs para acelerar significativamente operaciones de arreglos como indexado, normalización y multiplicación de matrices.

CuPy también permite el acceso a características de bajo nivel de CUDA. Permite pasar ndarrays a programas existentes de CUDA C/C++ mediante RawKernels, mejora el rendimiento con Streams y permite la llamada directa de las APIs de CUDA Runtime.

 

Instalando CuPy

 

Puedes instalar CuPy utilizando pip, pero antes debes encontrar la versión correcta de CUDA utilizando el siguiente comando.

!nvcc --version

 

nvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2022 NVIDIA CorporationBuilt on Wed_Sep_21_10:33:58_PDT_2022Cuda compilation tools, release 11.8, V11.8.89Build cuda_11.8.r11.8/compiler.31833905_0

 

Parece que la versión actual de Google Colab utiliza CUDA versión 11.8. Por lo tanto, procederemos a instalar la versión cupy-cuda11x.

Si estás utilizando una versión más antigua de CUDA, he proporcionado una tabla a continuación para ayudarte a determinar el paquete CuPy apropiado para instalar.

  

Después de seleccionar la versión correcta, instalaremos el paquete de Python utilizando pip.

pip install cupy-cuda11x

 

También puedes usar el comando conda para detectar e instalar automáticamente la versión correcta del paquete CuPy si tienes Anaconda instalado.

conda install -c conda-forge cupy

 

Conceptos básicos de CuPy

 

En esta sección, compararemos la sintaxis de CuPy con la de NumPy, y son un 95% similares. En lugar de utilizar np, lo reemplazarás con cp.

Primero crearemos un arreglo de NumPy y CuPy utilizando una lista de Python. Luego calcularemos la norma del vector.

import cupy as cpimport numpy as npx = [3, 4, 5] x_np = np.array(x)x_cp = cp.array(x) l2_np = np.linalg.norm(x_np)l2_cp = cp.linalg.norm(x_cp) print("NumPy: ", l2_np)print("CuPy: ", l2_cp)

 

Como podemos ver, obtuvimos resultados similares.

NumPy:  7.0710678118654755CuPy:  7.0710678118654755

 

Para convertir un arreglo de NumPy a CuPy, simplemente puedes usar cp.asarray(X).

x_array = np.array([10, 22, 30])x_cp_array = cp.asarray(x_array)type(x_cp_array)

 

cupy.ndarray

 

O, usa .get() para convertir un arreglo de CuPy a NumPy.

x_np_array = x_cp_array.get()type(x_np_array)

 

numpy.ndarray

 

Comparación de rendimiento 

 

En esta sección, estaremos comparando el rendimiento de NumPy y CuPy.

Usaremos time.time() para medir el tiempo de ejecución del código. Luego, crearemos un array tridimensional de NumPy y realizaremos algunas funciones matemáticas. 

import time# NumPy y CPU Tiempo de ejecución = time.time()x_cpu = np.ones((1000, 100, 1000))np_result = np.sqrt(np.sum(x_cpu**2, axis=-1))e = time.time()np_time = e - sprint("Tiempo consumido por NumPy: ", np_time)

 

Tiempo consumido por NumPy: 0.5474584102630615

 

De manera similar, crearemos un array tridimensional de CuPy, realizaremos operaciones matemáticas y mediremos su rendimiento. 

# CuPy y GPU Tiempo de ejecución = time.time()x_gpu = cp.ones((1000, 100, 1000))cp_result = cp.sqrt(cp.sum(x_gpu**2, axis=-1))e = time.time()cp_time = e - sprint("\nTiempo consumido por CuPy: ", cp_time)

 

Tiempo consumido por CuPy: 0.001028299331665039

 

Para calcular la diferencia, dividiremos el tiempo de NumPy por el tiempo de CuPy y parece que obtuvimos un aumento de rendimiento de más de 500X al usar CuPy. 

diff = np_time/cp_timeprint(f'\nCuPy es {diff: .2f} X más rápido que NumPy')

 

CuPy es 532.39 X más rápido que NumPy

 

Nota:  Para obtener mejores resultados, se recomienda realizar algunas ejecuciones previas para minimizar las fluctuaciones de tiempo.

 

Más allá de su ventaja en velocidad, CuPy ofrece un excelente soporte multi-GPU, permitiendo aprovechar el poder colectivo de múltiples GPUs.

También, puedes echar un vistazo a mi cuaderno de Colab, si deseas comparar los resultados.

 

Conclusión

 

En conclusión, CuPy proporciona una forma sencilla de acelerar el código de NumPy en GPUs NVIDIA. Al realizar solo algunas modificaciones para reemplazar NumPy por CuPy, puedes experimentar una mejora de rendimiento de magnitud en los cálculos de arrays. Este aumento de rendimiento te permite trabajar con conjuntos de datos y modelos mucho más grandes, lo que facilita el aprendizaje automático avanzado y la computación científica.

 

Recursos

 

  

****[Abid Ali Awan](https://www.polywork.com/kingabzpro)**** (@1abidaliawan) es un profesional certificado en ciencia de datos que le encanta construir modelos de aprendizaje automático. Actualmente, se centra en la creación de contenido y en la escritura de blogs técnicos sobre tecnologías de aprendizaje automático y ciencia de datos. Abid tiene un título de maestría en Gestión de Tecnología y un título de licenciatura en Ingeniería de Telecomunicaciones. Su visión es construir un producto de IA utilizando una red neuronal gráfica para estudiantes que luchan con enfermedades mentales.

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

Por qué importa el Hype Pensar de manera práctica sobre la IA

ELIZA era un chatbot temprano que compartía algunas similitudes con ChatGPT. ¿Por qué importa esta emoción? Bueno, cu...

Inteligencia Artificial

Conoce al Creador Estudiante de Robótica presenta la Silla de Ruedas Autónoma con NVIDIA Jetson

Con la ayuda de la IA, los robots, los tractores y los cochecitos de bebé – incluso los parques de patinaje ...

Inteligencia Artificial

Los modelos base Llama 2 de Meta ahora están disponibles en Amazon SageMaker JumpStart

Hoy, nos complace anunciar que los modelos base Llama 2 desarrollados por Meta están disponibles para los clientes a ...

Inteligencia Artificial

¿Deberían las escuelas depender del gobierno para la protección cibernética?

¿Puede el gobierno federal proteger a las escuelas de K-12 y a sus estudiantes de los ciberataques?

Inteligencia Artificial

Conoce LMSYS-Chat-1M Un conjunto de datos a gran escala que contiene un millón de conversaciones del mundo real con 25 LLM de última generación.

Los grandes modelos de lenguaje (LLMs) se han vuelto fundamentales para diversas aplicaciones de IA, desde asistentes...

Inteligencia Artificial

Los robots reciben una mejora 'gripante' ¡AO-Grasp enseña a los bots el arte de no dejar caer tus cosas!

En los últimos años, los robots han encontrado un mayor uso en diversas industrias, desde la fabricación hasta la ate...