Depuis la dernière décennie, nous avons vu les GPU entrer en scène plus fréquemment dans des domaines comme le HPC(High-Performance Computing) et le domaine le plus populaire c’est-à-dire le jeu. Les GPU se sont améliorés d’année en année et ils sont maintenant capables de faire des choses incroyablement grandes, mais au cours des dernières années, ils attirent encore plus l’attention en raison de l’apprentissage profond.

Comme les modèles d’apprentissage profond passent une grande quantité de temps en formation, même les CPU puissants n’étaient pas assez efficaces pour gérer autant de calculs à un moment donné et c’est le domaine où les GPU ont simplement surpassé les CPU en raison de son parallélisme. Mais avant de plonger dans la profondeur, comprenons d’abord certaines choses sur le GPU.

Qu’est-ce que le GPU ?

Un GPU ou ‘Graphics Processing Unit’ est une version miniature d’un ordinateur entier mais uniquement dédié à une tâche spécifique. Il est différent d’un processeur qui effectue plusieurs tâches en même temps. Le GPU est livré avec son propre processeur qui est intégré sur sa propre carte mère couplé avec v-ram ou ram vidéo, et aussi une conception thermique appropriée pour la ventilation et le refroidissement.

GPUs for Deep Learning

source(Gamers Nexus)

Dans le terme ‘Graphics Processing Unit’, ‘Graphics’ fait référence au rendu d’une image à des coordonnées spécifiées sur un espace 2d ou 3d. Une fenêtre ou un point de vue est la perspective de l’observateur sur un objet, selon le type de projection utilisé. La rastérisation et le traçage de rayons sont quelques-unes des façons de rendre des scènes 3d, ces deux concepts sont basés sur un type de projection appelé projection en perspective. Qu’est-ce que la projection en perspective ?

En bref, c’est la façon dont une image est formée sur un plan de vue ou une toile où les lignes parallèles convergent vers un point de convergence appelé « centre de projection » aussi comme l’objet s’éloigne du point de vue, il semble être plus petit, exactement comme nos yeux dépeignent dans le monde réel et cela aide à comprendre la profondeur dans une image ainsi, c’est la raison pour laquelle il produit des images réalistes.

En outre, les GPU traitent également la géométrie complexe, les vecteurs, les sources de lumière ou les illuminations, les textures, les formes, etc. Comme maintenant nous avons une idée de base sur le GPU, comprenons pourquoi il est fortement utilisé pour l’apprentissage profond.

Pourquoi les GPU sont meilleurs pour l’apprentissage profond?

L’une des caractéristiques les plus admirées d’un GPU est la capacité de calculer des processus en parallèle. C’est là que le concept de calcul parallèle entre en jeu. En général, un CPU accomplit sa tâche de manière séquentielle. Un CPU peut être divisé en cœurs et chaque cœur prend en charge une tâche à la fois. Supposons qu’un CPU possède 2 cœurs. Alors deux processus de tâches différentes peuvent s’exécuter sur ces deux cœurs réalisant ainsi le multitâche.

Mais encore, ces processus s’exécutent de manière sérielle.

GPUs pour l'apprentissage profond

source(Exemples d’exemples)

Cela ne signifie pas que les CPU ne sont pas assez bons. En fait, les CPU sont vraiment bons pour gérer différentes tâches liées à différentes opérations comme la manipulation de systèmes d’exploitation, la manipulation de feuilles de calcul, la lecture de vidéos HD, l’extraction de gros fichiers zip, tout cela en même temps. Ce sont des choses qu’un GPU ne peut tout simplement pas faire.

Où se situe la différence ?

GPUs pour l'apprentissage profond

source(NVIDIA)

Comme nous l’avons vu précédemment, un CPU est divisé en plusieurs cœurs afin qu’ils puissent prendre en charge plusieurs tâches en même temps, alors que le GPU aura des centaines et des milliers de cœurs, tous dédiés à une seule tâche. Il s’agit de calculs simples qui sont effectués plus fréquemment et qui sont indépendants les uns des autres. Et les deux stockent les données fréquemment requises dans leur mémoire cache respective, suivant ainsi le principe de « référence de localité ».

GPUs for Deep Learning

source(NVIDIA)

Il existe de nombreux logiciels et jeux qui peuvent tirer parti des GPU pour l’exécution. L’idée derrière cela est de rendre certaines parties de la tâche ou du code de l’application parallèles mais pas les processus entiers. En effet, la plupart des processus de la tâche doivent être exécutés de manière séquentielle uniquement. Par exemple, la connexion à un système ou à une application n’a pas besoin d’être rendue parallèle.

Quand il y a une partie de l’exécution qui peut être faite en parallèle, elle est simplement déplacée vers le GPU pour le traitement où, au même moment, la tâche séquentielle est exécutée dans le CPU, puis les deux parties de la tâche sont à nouveau combinées ensemble.

Dans le marché des GPU, il y a deux acteurs principaux c’est-à-dire AMD et Nvidia. Les GPU Nvidia sont largement utilisés pour l’apprentissage profond car ils ont un support étendu dans le logiciel du forum, les pilotes, CUDA et cuDNN. Donc, en termes d’IA et d’apprentissage profond, Nvidia est le pionnier depuis longtemps.

On dit que les réseaux neuronaux sont embarrassamment parallèles, ce qui signifie que les calculs dans les réseaux neuronaux peuvent être exécutés en parallèle facilement et qu’ils sont indépendants les uns des autres.

GPUs for Deep Learning

Certains calculs comme le calcul des poids et des fonctions d’activation de chaque couche, la rétropropagation peuvent être exécutés en parallèle. Il y a beaucoup de documents de recherche disponibles sur ce sujet aussi.
Les GPU NVIDIA sont livrés avec des cœurs spécialisés connus sous le nom de cœurs CUDA qui aident à accélérer l’apprentissage profond.

Qu’est-ce que CUDA ?

CUDA signifie ‘Compute Unified Device Architecture’ qui a été lancé en 2007, c’est une façon dont vous pouvez réaliser le calcul parallèle et le rendement le plus élevé de votre puissance GPU d’une manière optimisée, ce qui entraîne de bien meilleures performances lors de l’exécution des tâches.

Image for post

source(NVIDIA)

La boîte à outils CUDA est un package complet qui consiste en un environnement de développement utilisé pour construire des applications qui utilisent les GPU. Cette boîte à outils contient principalement un compilateur c/c++, un débogueur et des bibliothèques. Le runtime CUDA dispose également de ses pilotes afin de pouvoir communiquer avec le GPU. CUDA est également un langage de programmation spécialement conçu pour donner des instructions au GPU afin qu’il effectue une tâche. Il est également connu sous le nom de programmation GPU.
Ci-après est un simple programme hello world juste pour avoir une idée de la façon dont le code CUDA ressemble.

/* hello world program in cuda *\#include<stdio.h>#include<stdlib.h>#include<cuda.h>__global__ void demo() { printf("hello world!,my first cuda program");}int main() { printf("From main!\n"); demo<<<1,1>>>(); return 0;}

Image pour le poste

sortie

Qu’est-ce que cuDNN ?

Image pour le post

Source(Hyper Linuxer)

cuDNN est une bibliothèque de réseaux neuronaux qui est optimisée pour les GPU et peut tirer pleinement parti des GPU Nvidia. Cette bibliothèque consiste en l’implémentation de la convolution, de la propagation avant et arrière, des fonctions d’activation et du pooling. C’est une bibliothèque incontournable sans laquelle vous ne pouvez pas utiliser le GPU pour la formation de réseaux neuronaux.

Un grand bond en avant avec les cœurs Tensor !

En 2018, Nvidia a lancé une nouvelle gamme de ses GPU c’est-à-dire la série 2000. Également appelées RTX, ces cartes sont livrées avec des cœurs tenseurs dédiés au deep learning et basés sur l’architecture Volta.

Image for post

Source(Anand Tech)

Les cœurs tenseurs sont des cœurs particuliers qui effectuent une multiplication matricielle de 4 x 4 matrice FP16 et une addition avec 4 x 4 matrice FP16 ou FP32 en demi-précision, la sortie sera le résultat d’une matrice 4 x 4 FP16 ou FP32 en pleine précision.
Note : ‘FP’ signifie virgule flottante pour comprendre plus sur la virgule flottante et la précision consultez ce blog.

Comme l’a déclaré Nvidia, la nouvelle génération de cœurs tenseurs basée sur l’architecture volta est beaucoup plus rapide que les cœurs CUDA basés sur l’architecture Pascal. Cela a donné un énorme coup de pouce à l’apprentissage profond.

Image pour le post

source(NVIDIA)

Au moment d’écrire ce blog, Nvidia a annoncé la dernière série 3000 de leur gamme de GPU qui viennent avec l’architecture Ampère. Dans cette dernière, ils ont amélioré les performances des cœurs tenseurs de 2x. Ils apportent également de nouvelles valeurs de précision comme TF32 (tensor float 32), FP64 (floating point 64). Le TF32 fonctionne de la même manière que le FP32 mais avec une accélération jusqu’à 20x, en conséquence de tout cela Nvidia, affirme que le temps d’inférence ou d’entraînement des modèles sera réduit de semaines à heures.

AMD vs Nvidia

Image pour post

source(Tom’s Hardware)

Les GPU AMD sont décents pour les jeux mais dès que l’apprentissage profond entre en jeu, alors simplement Nvidia est loin devant. Cela ne signifie pas que les GPU d’AMD sont mauvais. C’est dû à l’optimisation logicielle et aux pilotes qui ne sont pas mis à jour activement, du côté de Nvidia ils ont de meilleurs pilotes avec des mises à jour fréquentes et en plus de cela CUDA, cuDNN aide à accélérer le calcul.

Certaines bibliothèques bien connues comme Tensorflow, PyTorch supportent CUDA. Cela signifie que les GPU d’entrée de gamme de la série GTX 1000 peuvent être utilisés. Du côté d’AMD, il y a très peu de support logiciel pour leurs GPU. Sur le plan matériel, Nvidia a introduit des cœurs tenseurs dédiés. AMD a ROCm pour l’accélération, mais il n’est pas aussi bon que les cœurs tenseurs, et de nombreuses bibliothèques d’apprentissage profond ne prennent pas en charge ROCm. Au cours des dernières années, aucun grand saut n’a été remarqué en termes de performances.

En raison de tous ces points, Nvidia excelle tout simplement dans l’apprentissage profond.

Sommaire

Pour conclure de tout ce que nous avons appris, il est clair qu’à l’heure actuelle Nvidia est le leader du marché en termes de GPU, mais j’espère vraiment que même AMD rattrape son retard à l’avenir ou au moins faire quelques améliorations remarquables dans la prochaine gamme de leurs GPU comme ils font déjà un excellent travail en ce qui concerne leurs CPU i.La portée des GPU dans les années à venir est énorme car nous faisons de nouvelles innovations et des percées dans l’apprentissage profond, l’apprentissage automatique et le HPC. L’accélération GPU sera toujours utile à de nombreux développeurs et étudiants pour entrer dans ce domaine, car leurs prix deviennent également plus abordables. Merci également à la large communauté qui contribue également au développement de l’IA et du HPC.

À propos de l’auteur

Prathmesh Patil

Prathmesh Patil

Prathmesh Patil

Enthousiaste deML, Data Science, développeur Python.

LinkedIn : https://www.linkedin.com/in/prathmesh

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.