web-dev-qa-db-fra.com

Python Programmation GPU

Je travaille actuellement sur un projet en python, et j'aimerais utiliser le GPU pour certains calculs.

À première vue, il semble qu'il existe de nombreux outils; au deuxième coup d'œil, j'ai l'impression de manquer quelque chose.

Copperhead a l'air génial mais n'a pas encore été publié. Il semblerait que je me limite à écrire des noyaux CUDA ou openCL de bas niveau; pas de poussée, pas de cudpp. Si j'aime faire trier quelque chose, je vais devoir le faire moi-même.

Cela ne me semble pas tout à fait juste. Suis-je en effet en train de manquer quelque chose? Ou ce script GPU n'est-il pas encore à la hauteur du battage médiatique?

Edit: GPULIB semble être ce dont j'ai besoin. La documentation est rudimentaire, et les liaisons python ne sont mentionnées qu'en passant, mais je demande un lien de téléchargement pour le moment. Bibliothèques GPU? ReEdit: ok, python sont en fait inexistantes.

Edit2: Donc je suppose que mon meilleur pari est d'écrire quelque chose en C/CUDA et d'appeler ça depuis python?

52

PyCUDA offre une très bonne intégration avec CUDA et dispose de plusieurs interfaces d'assistance pour faciliter l'écriture de code CUDA que dans l'API C droit. Ici est un exemple du Wiki qui fait une FFT 2D sans avoir besoin de code C du tout.

28
Joseph Lisee

Je publierai ici quelques informations que j'ai lues sur reddit. Il sera utile pour les personnes qui arrivent sans avoir une idée claire de ce que font les différents packages et comment ils connectent cuda à Python:


De: Reddit

Il y a beaucoup de confusion dans ce fil sur ce que divers projets visent à faire et dans quelle mesure ils sont prêts. Il n'y a pas de "backend GPU pour NumPy" (beaucoup moins pour les fonctionnalités de SciPy). Il existe plusieurs façons d'écrire du code CUDA dans Python et certains objets de type tableau GPU qui prennent en charge des sous-ensembles des méthodes ndarray de NumPy (mais pas le reste de NumPy, comme linalg, fft, etc.). .)

  • PyCUDA et PyOpenCL sont les plus proches. Ils éliminent une grande partie de la plomberie entourant le lancement des noyaux GPU (transfert de mémoire de création de baie simplifié, pas besoin de désallocation manuelle, etc ...). Pour la plupart, cependant, vous êtes toujours bloqué dans l'écriture manuelle des noyaux CUDA, ils se trouvent juste à l'intérieur de votre fichier Python sous la forme d'une chaîne à trois guillemets. Le GPUarray de PyCUDA comprend un nombre limité de NumPy- comme la fonctionnalité, donc si vous faites quelque chose de très simple, vous pourriez vous en tirer sans écrire vous-même des noyaux.

  • NumbaPro inclut un décorateur "cuda.jit" qui vous permet d'écrire des noyaux CUDA en utilisant la syntaxe Python. Ce n'est pas vraiment beaucoup d'une avancée par rapport à ce que fait PyCUDA (source de noyau citée), c'est juste que votre code ressemble maintenant plus à Pythonic. Cependant, il n'exécute certainement pas automatiquement le code NumPy existant sur le GPU.

  • Theano vous permet de construire des arborescences d'expressions symboliques puis de les compiler pour les exécuter sur le GPU. Ce n'est pas NumPy et n'a que des équivalents pour un petit sous-ensemble de fonctionnalités de NumPy.

  • gnumpy est un wrapper finement documenté autour de CudaMat. Le seul type d'élément pris en charge est float32 et seul un petit sous-ensemble de NumPy est implémenté.


10
Ramon Martinez

Je sais que ce fil est ancien, mais je pense que je peux apporter des informations pertinentes qui répondent à la question posée.

Continuum Analytics a un package qui contient des bibliothèques qui résout l'informatique CUDA pour vous. Fondamentalement, vous instrumentez votre code qui doit être parallélisé (au sein d'une fonction) avec un décorateur et vous devez importer une bibliothèque. Ainsi, vous n'avez besoin d'aucune connaissance des instructions CUDA.

Des informations peuvent être trouvées sur la page NVIDIA

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

ou vous pouvez aller directement à la page de Continuum Analytics

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

Il y a une période d'essai de 30 jours et une licence gratuite pour les universitaires.

J'utilise beaucoup et accélère mon code entre 10 à 50 fois.

7
Bogdan

Theano semble que ce soit ce que vous cherchez. D'après ce que je comprends, il est très capable de faire de lourdes tâches mathématiques avec le GPU et semble être activement maintenu.

Bonne chance!

5
katzenklavier

Consultez cette page pour une bibliothèque open source distribuée avec Anaconda https://www.anaconda.com/blog/developer-blog/open-sourcing-anaconda-accelerate/

"Aujourd'hui, nous publions deux nouveaux sous-projets Numba appelés pyculib et pyculib_sorting, qui contiennent la bibliothèque GPU NVIDIA Python et fonctions de tri d'Accelerate. Ces wrappers fonctionnent avec les tableaux NumPy et le GPU Numba tableaux de périphériques pour fournir un accès aux fonctions accélérées à partir de: cuBLAS: algèbre linéaire cuFFT: transformation de Fourier rapide cuSparse: opérations de matrice clairsemée cuRand: génération de nombres aléatoires (fonctions hôtes uniquement) Tri: algorithmes de tri rapides portés à partir de CUB et ModernGPU À l'avenir, le projet Numba prendra en charge pyculib et pyculib_sorting, libérant des mises à jour selon les besoins lorsque de nouvelles versions de Numba sortiront. Ces projets sont sous licence BSD, tout comme Numba "

2
1
onteria_

Je peux recommander scikits.cuda . mais pour cela, vous devez télécharger CULA version complète (gratuite pour les étudiants.). Un autre est CUV . Si vous cherchez quelque chose de mieux et prêt à payer pour cela, vous pouvez également jeter un œil à feu de tablea . Écrivez maintenant J'utilise des scikits et je suis assez satisfait jusqu'à présent.

0
Moj