usar python cuda gpu

usar - cuda python



ProgramaciĆ³n GPU Python (7)

Actualmente estoy trabajando en un proyecto en Python, y me gustaría hacer uso de la GPU para algunos cálculos.

A primera vista parece que hay muchas herramientas disponibles; A segunda vista, siento que me estoy perdiendo algo.

Copperhead luce increíble pero aún no ha sido lanzado. Parece que estoy limitado a escribir kernels CUDA o openCL de bajo nivel; Sin empuje, sin cudpp. Si me gustaría tener algo ordenado, tendré que hacerlo yo mismo.

Eso no me parece del todo correcto. ¿Estoy realmente perdiendo algo? ¿O es que el GPU-scripting no está a la altura de las expectativas?

Edit: GPULIB parece que podría ser lo que necesito. La documentación es rudimentaria, y los enlaces de python se mencionan solo de pasada, pero estoy solicitando un enlace de descarga ahora mismo. ¿Alguien tiene experiencia con eso, o enlaces a bibliotecas de GPU similares para uso académico gratuito? ReEdit: ok, los enlaces de python son, de hecho, inexistentes.

Edit2: ¿Entonces supongo que mi mejor apuesta es escribir algo en C / CUDA y llamarlo desde python?



Consulte esta página para obtener una biblioteca de código abierto distribuida con Anaconda https://www.anaconda.com/blog/developer-blog/open-sourcing-anaconda-accelerate/

"Hoy, estamos lanzando dos nuevos subproyectos Numba llamados pyculib y pyculib_sorting, que contienen las envolturas de Python de NVIDIA GPU Python y las funciones de clasificación de Accelerate. Estas envolturas funcionan con matrices NumPy y matrices de dispositivos Numba GPU para proporcionar acceso a funciones aceleradas de : cuBLAS: álgebra lineal cuFFT: transformación de Fourier rápida cuSparse: operaciones de matriz dispersa cuRand: generación de números aleatorios (solo funciones de host) Clasificación: algoritmos de clasificación rápida portados desde CUB y ModernGPU En el futuro, el proyecto Numba tomará la custodia de pyculib y pyculib_sorting, liberando se actualiza cuando sea necesario cuando salgan nuevas versiones de Numba. Estos proyectos tienen licencia BSD, al igual que Numba "


Publicaré aquí algo de información que leí en reddit. Será útil para las personas que vienen sin tener una idea clara de lo que hacen los diferentes paquetes y cómo conectan Cuda con Python:

Desde: Reddit

Hay mucha confusión en este hilo acerca de lo que varios proyectos pretenden hacer y qué tan listos están. No hay "backend GPU para NumPy" (mucho menos para cualquiera de las funciones de SciPy). Hay algunas formas de escribir código CUDA dentro de Python y algunos objetos tipo matriz GPU que admiten subconjuntos de los métodos ndarray de NumPy (pero no el resto de NumPy, como linalg, fft, etc.)

  • PyCUDA y PyOpenCL se acercan más. Eliminan muchas de las tuberías que rodean el lanzamiento de los núcleos de GPU (creación simplificada de arreglos y transferencia de memoria, sin necesidad de desasignación manual, etc ...). Sin embargo, en su mayor parte, aún estás atascado escribiendo los núcleos CUDA manualmente, simplemente están dentro de tu archivo Python como una cadena de tres comillas. El GPUarray de PyCUDA incluye algunas funciones limitadas de tipo NumPy, por lo que si estás haciendo algo muy simple, puedes escapar sin escribir ningún kernel.

  • NumbaPro incluye un decorador "cuda.jit" que te permite escribir núcleos CUDA utilizando la sintaxis de Python. En realidad, no es un gran avance sobre lo que hace PyCUDA (fuente del kernel citado), solo su código ahora parece más Pythonic. Sin embargo, definitivamente no ejecuta automáticamente el código NumPy existente en la GPU.

  • Theano te permite construir árboles de expresiones simbólicas y luego compilarlos para que se ejecuten en la GPU. No es NumPy y solo tiene equivalentes para un pequeño subconjunto de la funcionalidad de NumPy.

  • gnumpy es un envoltorio ligeramente documentado alrededor de CudaMat. El único tipo de elemento admitido es float32 y solo se implementa un pequeño subconjunto de NumPy.


Puedo recomendar scikits.cuda . pero para eso necesitas descargar la versión completa de CULA (gratis para estudiantes). Otro es CUV . Si está buscando algo mejor y listo para pagar por eso, también puede echar un vistazo a array fire. Escriba ahora que estoy usando scikits y hasta ahora estoy bastante satisfecho.


Sé que este hilo es antiguo, pero creo que puedo aportar información relevante que responda a la pregunta formulada.

Continuum Analytics tiene un paquete que contiene bibliotecas que resuelven la computación CUDA por usted. Básicamente, usted implementa su código que debe estar en paralelo (dentro de una función) con un decorador y usted necesita importar una biblioteca. Por lo tanto, no necesita ningún conocimiento sobre las instrucciones de CUDA.

La información se puede encontrar en la página de NVIDIA.

https://developer.nvidia.com/anaconda-accelerate

o puedes ir directamente a la página de Continuum Analytics

https://store.continuum.io/cshop/anaconda/

Hay un período de prueba de 30 días y una licencia gratuita para académicos.

Lo uso ampliamente y acelero mi código entre 10 y 50 veces.


Theano parece que podría ser lo que estás buscando. Por lo que entiendo, es muy capaz de hacer un gran levantamiento matemático con la GPU y parece que se mantiene activamente.

¡Buena suerte!


PyCUDA proporciona una muy buena integración con CUDA y tiene varias interfaces de ayuda para facilitar la escritura del código CUDA que en la API C recta. Here hay un ejemplo del Wiki que hace un FFT 2D sin necesitar ningún código C en absoluto.