Articulo de referencia

CuPy

{{cite web|url=https://github.com/chainer/chainer/releases/v1.3.0|title=Release v1.3.0 – chainer/chainer|via=[[GitHub]]|access-date=25 June 2022}} "},"latest release version":{"...

CuPy es una biblioteca de código abierto para computación acelerada por GPU con el lenguaje de programación Python , que proporciona soporte para matrices multidimensionales, matrices dispersas y una variedad de algoritmos numéricos implementados sobre ellas. [ 3 ] CuPy comparte el mismo conjunto de API que NumPy y SciPy , lo que permite que sea un reemplazo directo para ejecutar código NumPy/SciPy en la GPU. CuPy es compatible con la plataforma de GPU Nvidia CUDA y la plataforma de GPU AMD ROCm a partir de la versión 9.0. [ 4 ] [ 5 ]

CuPy se desarrolló inicialmente como un backend del marco de aprendizaje profundo Chainer , y posteriormente se estableció como un proyecto independiente en 2017. [ 6 ]

CuPy es parte de las bibliotecas de matrices del ecosistema NumPy [ 7 ] y se adopta ampliamente para utilizar GPU con Python, [ 8 ] especialmente en entornos de computación de alto rendimiento como Summit , [ 9 ] Perlmutter , [ 10 ] EULER , [ 11 ] y ABCI . [ 12 ]

CuPy es un proyecto patrocinado por NumFOCUS . [ 13 ]

Características

CuPy implementa API compatibles con NumPy/SciPy, así como funciones para escribir kernels de GPU definidos por el usuario o acceder a API de bajo nivel. [ 14 ] [ 15 ]

API compatibles con NumPy

El mismo conjunto de API definidas en el paquete NumPy ( numpy.*) están disponibles en el cupy.*paquete.

API compatibles con SciPy

El mismo conjunto de API definidas en el paquete SciPy ( scipy.*) están disponibles en el cupyx.scipy.*paquete.

Núcleos de GPU definidos por el usuario

  • Plantillas de núcleo para operaciones elemento a elemento y de reducción
  • Kernel sin procesar (CUDA C/C++)
  • Transpilador justo a tiempo (JIT)
  • Fusión de núcleos

computación distribuida

  • Paquete de comunicación distribuida ( cupyx.distributed), que proporciona primitivas colectivas y entre pares

Características CUDA de bajo nivel

  • Transmisión y evento
  • grupo de memoria
  • Perfilador
  • Enlace de API de host
  • Compatibilidad con CUDA Python [ 16 ]

Interoperabilidad

Ejemplos

Creación de matrices

>>> import cupy as cp >>> x = cp . array ([ 1 , 2 , 3 ]) >>> x array ([ 1 , 2 , 3 ]) >>> y = cp . arange ( 10 ) >>> y array ([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ])

Operaciones básicas

>>> import cupy as cp >>> x = cp . arange ( 12 ) . reshape ( 3 , 4 ) . astype ( cp . float32 ) >>> x array ([[ 0. , 1. , 2. , 3. ], [ 4. , 5. , 6. , 7. ], [ 8. , 9. , 10. , 11. ]], dtype = float32 ) >>> x . sum ( axis = 1 ) array ([ 6. , 22. , 38. ], dtype = float32 )

Kernel CUDA C/C++ sin procesar

>>> import cupy as cp >>> kern = cp . RawKernel ( r ''' ... extern "C" __global__ ... void multiply_elemwise(const float* in1, const float* in2, float* out) { ... int tid = blockDim.x * blockIdx.x + threadIdx.x; ... out[tid] = in1[tid] * in2[tid]; ... } ... ''' , 'multiply_elemwise' ) >>> in1 = cp . arange ( 16 , dtype = cp . float32 ) . reshape ( 4 , 4 ) >>> in2 = cp . arange ( 16 , dtype = cp . float32 ) . reshape ( 4 , 4 ) >>> out = cp . zeros (( 4 , 4 ), dtype = cp . float32 ) >>> kern (( 4 ,), ( 4 ,), ( in1 , in2 , out )) # cuadrícula, bloque y argumentos >>> out array ([[ 0. , 1. , 4. , 9. ], [ 16. , 25. , 36. , 49. ], [ 64. , 81. , 100. , 121. ], [ 144. , 169. , 196. , 225. ]], dtype = float32 )

Aplicaciones

Véase también

Referencias

  1. "Versión v1.3.0 – chainer/chainer" . Consultado el 25 de junio de 2022 vía GitHub .
  2. 1 2 "Releases – cupy/cupy" . Recuperado el 13 de noviembre de 2025 vía GitHub .
  3. Okuta, Ryosuke; Unno, Yuya; Nishino, Daisuke; Hido, Shohei; Loomis, Crissman (2017). CuPy: Una biblioteca compatible con NumPy para cálculos de GPU de NVIDIA (PDF) . Actas del Taller sobre Sistemas de Aprendizaje Automático (LearningSys) en la Trigésimo Primera Conferencia Anual sobre Sistemas de Procesamiento de Información Neuronal (NIPS).
  4. "CuPy 9.0 incorpora soporte para GPU AMD a esta biblioteca compatible con Numpy - Phoronix" . Phoronix . 29 de abril de 2021. Consultado el 21 de junio de 2022 .
  5. "AMD lidera la computación de alto rendimiento hacia la exaescala y más allá" . 28 de junio de 2021. Consultado el 21 de junio de 2022. Más recientemente , CuPy, una biblioteca de matrices de código abierto con Python, ha ampliado su soporte tradicional para GPU con la introducción de la versión 9.0, que ahora ofrece soporte para la pila ROCm para computación acelerada por GPU.
  6. "Preferred Networks lanzó la versión 2 de Chainer, un marco de código abierto para aprendizaje profundo - Preferred Networks, Inc." 2 de junio de 2017. Consultado el 18 de junio de 2022 .
  7. "NumPy" . numpy.org . Consultado el 21 de junio de 2022 .
  8. Gorelick, Micha; Ozsvald, Ian (abril de 2020). High Performance Python: Practical Performant Programming for Humans (2.ª ed.). O'Reilly Media, Inc. pág. 190. ISBN   9781492055020.
  9. Oak Ridge Leadership Computing Facility . "Instalación de CuPy" . Documentación del usuario de OLCF . Consultado el 21 de junio de 2022 .
  10. Centro Nacional de Computación Científica para la Investigación Energética . "Uso de Python en Perlmutter" . Documentación de NERSC . Consultado el 21 de junio de 2022 .
  11. ETH Zurich . "CuPy" . ScientificComputing . Consultado el 21 de junio de 2022 .
  12. Instituto Nacional de Ciencia y Tecnología Industrial Avanzada . "Chainer" . Guía del usuario de ABCI 2.0 . Consultado el 21 de junio de 2022 .
  13. "Proyectos patrocinados - NumFOCUS" . Consultado el 8 de septiembre de 2024 .
  14. "Descripción general" . Documentación de CuPy . Consultado el 18 de junio de 2022 .
  15. "Tabla comparativa" . Documentación de CuPy . Consultado el 18 de junio de 2022 .
  16. "CUDA Python | Desarrollador de NVIDIA" . Consultado el 21 de junio de 2022 .
  17. "¡Bienvenido a la documentación de DLPack!" . Documentación de DLPack 0.6.0 . Consultado el 21 de junio de 2022 .
  18. "Interfaz de matriz CUDA (versión 3)" . Documentación de Numba 0.55.2+0.g2298ad618.dirty-py3.7-linux-x86_64.egg . Consultado el 21 de junio de 2022 .
  19. "NEP 13 — Un mecanismo para anular Ufuncs — Propuestas de mejora de NumPy" . numpy.org . Consultado el 21 de junio de 2022 .
  20. "NEP 18 — Un mecanismo de despacho para las funciones de matrices de alto nivel de NumPy — Propuestas de mejora de NumPy" . numpy.org . Consultado el 21 de junio de 2022 .
  21. Charles R Harris; K. Jarrod Millman; Stéfan J. van der Walt; et al. (16 de septiembre de 2020). " Programación de matrices con NumPy" ( PDF) . Nature . 585 (7825): 357–362 . arXiv : 2006.10256 . Bibcode : 2020Natur.585..357H . doi : 10.1038/S41586-020-2649-2 . ISSN 1476-4687 . PMC 7759461. PMID 32939066. Wikidata Q99413970 .     
  22. "Informe de 2021 - Consorcio de API de datos de Python" (PDF) . Consultado el 21 de junio de 2022 .
  23. "Propósito y alcance" . Documentación del estándar de la API de matrices de Python 2021.12 . Consultado el 21 de junio de 2022 .
  24. "Instalar spaCy" . Documentación de uso de spaCy . Consultado el 21 de junio de 2022 .
  25. ^ Patel, Ankur A.; Arasanipalai, Ajay Uppili (mayo de 2021). Procesamiento aplicado del lenguaje natural en la empresa (1ª ed.). O'Reilly Media, Inc. pág. 68.ISBN   9781492062578.
  26. "Introducción al paquete de Python" . Documentación de xgboost 1.6.1 . Consultado el 21 de junio de 2022 .
  27. "UCBerkeleySETI/turbo_seti: turboSETI -- algoritmo de búsqueda SETI basado en Python" . GitHub . Consultado el 21 de junio de 2022 .
  28. "Open GPU Data Science | RAPIDS" . Consultado el 21 de junio de 2022 .
  29. "Documentación de la API" . Documentación de RAPIDS . Consultado el 21 de junio de 2022 .
  30. "Compartición eficiente de datos entre CuPy y RAPIDS" . Consultado el 21 de junio de 2022 .
  31. "10 minutos para cuDF y CuPy" . Consultado el 21 de junio de 2022 .
  32. Alex, Rogozhnikov (2022). Einops: Manipulaciones tensoriales claras y fiables con notación tipo Einstein . Conferencia internacional sobre representaciones de aprendizaje.
  33. "arogozhnikov/einops: Operaciones de aprendizaje profundo reinventadas (para pytorch, tensorflow, jax y otros)" . GitHub . Consultado el 21 de junio de 2022 .
  34. "Soporte para la API de arrays (experimental) — documentación de scikit-learn" . Consultado el 8 de septiembre de 2024 .
  35. Tokui, Seiya; Okuta, Ryosuke; Akiba, Takuya; Niitani, Yusuke; Ogawa, Toru; Saito, Shunta; Suzuki, Shuji; Uenishi, Kota; Vogel, Brian; Vincent, Hiroyuki Yamazaki (2019). Chainer: Un marco de aprendizaje profundo para acelerar el ciclo de investigación . Actas de la 25.ª Conferencia Internacional ACM SIGKDD sobre Descubrimiento de Conocimiento y Minería de Datos. doi : 10.1145/3292500.3330756 .
  • Sitio web oficial
  • cupy en GitHub