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.
- La amenaza existencial no es la inteligencia artificial, sino la falta de leyes de privacidad de datos
- Los investigadores de China presentaron un novedoso paradigma de compresión llamado Transferencia de Conocimiento basada en la Recuperación (RetriKT) revolucionando el despliegue de modelos de lenguaje pre-entrenados a gran escala en aplicaciones del
- Avanzando en las pruebas Shift-Left con IA generativa
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
- Documentación: CuPy – NumPy & SciPy for GPU — CuPy 12.2.0 documentation
- GitHub: cupy/cupy
- Ejemplos: cupy/examples
- API: API Reference
****[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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Invitación exclusiva ¡Únete a mi charla sobre los AI-Bots esta mañana!
- ¿Es posible demostrar la hipótesis de la simulación?
- 7 Algoritmos de Aprendizaje Automático que no Puedes Perder
- Investigadores de China proponen ALCUNA un innovador punto de referencia de inteligencia artificial para evaluar modelos de lenguaje a gran escala en la integración de nuevos conocimientos.
- El papel de los grafos de conocimiento empresarial en LLMs.
- ¿La academia se está obsesionando con la metodología a costa de verdaderos conocimientos?
- Cómo este investigador ganador de la Turing Award se convirtió en un legendario asesor académico