Quand on fait de l'intelligence artificielle ou tout calcul énorme, la question du GPU se pose .... Clairement NVidia avec ses GTX et RTX domine le marché ... MAIS... Non le GPU n'est pas toujours le plus performant.

A l'origine il y'a une vidéo sur Python et CUDA qui s'avère être fausse. La vidéo montre un calcul, une addition, de deux matrices (vecteurs) énormes :

Dans le premier cas, on fait cela de manière classique en python STANDARD

Dans le second cas, on utilise NUMBAPRO en activant le GPU de sa carte graphique...

Et forcément le résultat est beaucoup plus rapide... Grace à un @vectorize et un target=gpu sauf que ..... que si on repasse en cpu target=cpu la performance est ENCORE ENCORE PLUS RAPIDE... La performance de la démonstration était liée à la librairie et non pas au GPU (pas de bol)


Ce qu'on doit comprendre quant on évalue l'utilisation du GPU !

Chaque fois qu'on utilise un GPU (ou plusieurs), on transfert les data de la mémoir PC à la carte graphique ou carte CUDA, un cuda_malloc, et cela prend un certain temps.

De plus il faut un calcul parallélisé et parallélisable... Et surtout important en taille avec si possible plusieurs étapes avec des aggrégations de tous les résultats, d'une matrice la plus grande à la matrice la plus petite, ou chaque étape correspond à une quantité importe d'opération.

Donc au final, NON LE GPU N'EST PAS TOUJOURS LE PLUS PERFORMANT ! Parfois utiliser tous les cores du CPU est plus performant.

MAIS QUANT LE GPU PEUT ETRE UTILISER PLEINEMENT C'EST GENIAL :-)

La preuve en image

Je ne vous indique pas la machine, ni le code... Il s'agit juste d'une fonction avec de la récursivité avec de 1 à 100 000 "boucles" .... Ci dessous mes résultats. L'image en grand format tout en bas de l'article ;-)
No alt text provided for this image
Au final... si on regarde les résultats... Jusqu'à 14-15 récursivités le CPU est plus performant que le GPU en mode python standard (mono core cpu)

Pendant une transition, le multicore CPU est plus performant que le GPU, puis enfin le GPU prend largement le dessus. (les valeurs sur l'image sont en seconde)

Conclusion

Le GPU n'est pas obligatoirement plus performant.
On choisit le GPU surtout quand on a des calculs complexes lourds avec énormément de critères (comme en deep learning par exemple). Dans mon exemple c'est au final 40 fois plus performant, et le max écard que j'ai eu c'est x200 (200 fois plus rapide)....

Mais souvent le CPU en Parallel est largement assez performant.... Si on fait des trucs simples...

MAIS DANS TOUS LES CAS - EVALUEZ VOS CODES en CPU/Parallel/ et GPU pour fournir à vos clients et à l'IT des indicateurs fiables qui permettent de mieux dimensionner les machines, et la roadmap IT en IA, stochastiques, simulation ou stats....

J'ai fait ces tests pour fournir à l'IT d'un client tous les éléments de sizing machine....sur un projet NLP qui intégre aussi du deeplearning... mais pas que !

Jérôme Fortias

Commentaires