Comme nous le savons tous, lorsqu'il s'agit de tâches d'apprentissage profond et de réseaux neuronaux, il est préférable d'utiliser le GPU plutôt que le CPU, car lorsqu'il s'agit de réseaux neuronaux, même un GPU relativement bas de gamme surpassera le CPU.
Le deep learning est un domaine qui nécessite beaucoup de calcul. Dans une certaine mesure, le choix du GPU déterminera fondamentalement l'expérience de deep learning.
Mais voici le problème : comment choisir le bon GPU est aussi un casse-tête et une brûlure cérébrale.
Comment éviter de tomber dans le piège et comment faire un choix rentable ?
Tim Dettmers, un blogueur critique bien connu qui a reçu des offres de doctorat de Stanford, UCL, CMU, NYU et UW et qui étudie actuellement pour un doctorat à l'Université de Washington, a écrit un article de 10 000 mots basé sur sa propre expérience sur le type de GPU nécessaire dans le domaine du deep learning. L'article donne enfin le GPU recommandé dans le domaine DL.
L'orientation de recherche de Tim Dettmers est l'apprentissage profond de l'apprentissage des représentations et de l'optimisation matérielle. Le site Web qu'il a lui-même créé est également bien connu dans les domaines de l'apprentissage profond et du matériel informatique.
Les GPU recommandés par Tim Dettmers dans cet article proviennent tous de N Factory. Il estime évidemment aussi qu'AMD n'est pas digne d'avoir un nom en matière d'apprentissage automatique.
L'éditeur a également publié le lien original ci-dessous.
Lien original : https://timdettmers.com/2023/01/16/which-gpu-for-deep-learning/#GPU_Deep_Learning_Performance_per_Dollar
Par rapport à la série RTX 20 à architecture NVIDIA Turing, la nouvelle série RTX 30 à architecture NVIDIA Ampere présente plus d'avantages, tels que la formation et l'inférence de réseau clairsemé. D'autres fonctionnalités, telles que les nouveaux types de données, doivent être davantage considérées comme des fonctionnalités de facilité d'utilisation, car elles offrent les mêmes améliorations de performances que l'architecture de Turing mais ne nécessitent aucune exigence de programmation supplémentaire.
La série Ada RTX 40 présente encore plus d'avancées, telles que l'accélérateur de mémoire tenseur (TMA) et les opérations à virgule flottante 8 bits (FP8) présentées ci-dessus. La série RTX 40 présente des problèmes de puissance et de température similaires à ceux du RTX 30. Le problème avec le câble du connecteur d'alimentation fondu du RTX 40 peut être facilement évité en connectant correctement le câble d'alimentation.
Ampere permet une multiplication automatique de matrices clairsemées de structures à grains fins à des vitesses intensives. Comment cela se fait-il ? Prenez une matrice de poids comme exemple et coupez-la en morceaux avec 4 éléments. Imaginez maintenant que 2 de ces 4 éléments sont nuls. La figure 1 montre à quoi ressemble cette situation.
Figure 1 : Structure prise en charge par la fonction de multiplication de matrice clairsemée dans les GPU à architecture Ampere
Lorsque vous multipliez cette matrice de poids clairsemée avec une entrée dense, le tenseur de matrice clairsemée d'Ampère. La fonctionnalité de base compresse automatiquement le matrice clairsemée en une représentation dense moitié moins grande que celle illustrée à la figure 2.
Après la compression, les tuiles matricielles densément compressées sont introduites dans le noyau tenseur, qui calcule des multiplications matricielles deux fois la taille habituelle. Cela donne effectivement une accélération 2x car les besoins en bande passante sont réduits de moitié lors de la multiplication matricielle dans la mémoire partagée.
Figure 2 : Les matrices clairsemées sont compressées en représentation dense avant la multiplication matricielle.
Je travaille sur la formation en réseau clairsemé dans mes recherches, et j'ai également écrit un article de blog sur la formation en réseau clairsemé. Une critique de mon travail était la suivante : "Vous réduisez les FLOPS requis par le réseau, mais ne produisez pas d'accélération car les GPU ne peuvent pas effectuer de multiplications matricielles clairsemées rapides".
Avec l'ajout de capacités de multiplication matricielle clairsemée dans Tensor Cores, mon algorithme, ou d'autres algorithmes d'entraînement clairsemés, fournit désormais une accélération jusqu'à 2x pendant l'entraînement.
L'algorithme d'entraînement clairsemé développé comporte trois étapes : (1) Déterminer l'importance de chaque couche. (2) Supprimez les poids les moins importants. (3) Promouvoir de nouvelles pondérations proportionnelles à l’importance de chaque couche.
Bien que cette fonctionnalité soit encore expérimentale et que la formation de réseaux clairsemés ne soit pas encore courante, avoir cette capacité sur votre GPU signifie que vous êtes prêt pour l'avenir de la formation clairsemée.
Dans mon travail, j'ai déjà montré que de nouveaux types de données peuvent améliorer la stabilité lors d'une rétropropagation de faible précision.
Figure 4 : Type de données 8 bits d'apprentissage profond de faible précision. La formation en deep learning bénéficie de types de données hautement spécialisés
Actuellement, si vous souhaitez effectuer une rétropropagation stable avec des nombres à virgule flottante 16 bits (FP16), le plus gros problème est que les types de données FP16 ordinaires ne prennent en charge que [-65,504 , 65,504 ]. Si votre dégradé dépasse cette plage, votre dégradé explosera en valeurs NaN.
Pour éviter que cela ne se produise lors de la formation FP16, nous effectuons généralement une mise à l'échelle des pertes, c'est-à-dire que nous multiplions la perte par un petit nombre avant la rétropropagation pour éviter cette explosion de gradient.
Le format Brain Float 16 (BF16) utilise plus de bits pour l'exposant afin que la plage de nombres possibles soit la même que celle du FP32, BF16 a une précision inférieure, c'est-à-dire des chiffres significatifs, mais la précision du gradient n'est pas si bonne pour l'apprentissage important .
Donc, ce que fait BF16, c'est que vous n'avez plus besoin de faire de mise à l'échelle des pertes et vous n'avez pas à vous soucier de l'explosion rapide des gradients. On devrait donc constater une amélioration de la stabilité de l’entraînement en utilisant le format BF16, car il y a une légère perte de précision.
Qu'est-ce que cela signifie pour vous. En utilisant la précision BF16, l’entraînement sera probablement plus stable qu’en utilisant la précision FP16 tout en offrant la même amélioration de la vitesse. Avec la précision TF32, vous obtenez une stabilité proche du FP32 tout en offrant des améliorations de vitesse proches du FP16.
La bonne nouvelle est que pour utiliser ces types de données, il vous suffit de remplacer FP32 par TF32 et FP16 par BF16 - aucune modification de code n'est requise.
En général cependant, ces nouveaux types de données peuvent être considérés comme des types de données paresseux puisque vous pouvez obtenir les anciens avec un effort de programmation supplémentaire (mise à l'échelle des pertes, initialisation, normalisation, utilisation d'Apex). Tous les avantages des types de données.
Ainsi, ces types de données n'apportent pas de vitesse, mais améliorent la facilité d'utilisation de faible précision dans l'entraînement.
Bien que la nouvelle conception du ventilateur de la série RTX 30 fasse un très bon travail de refroidissement du GPU, d'autres problèmes peuvent survenir avec différentes conceptions de ventilateurs des GPU non-Founder Edition.
Si votre GPU chauffe au-dessus de 80 °C, il s'auto-étranglera, ralentissant sa vitesse/puissance de calcul. La solution à ce problème consiste à utiliser un extendeur PCIe pour créer un espace entre les GPU.
La répartition du GPU avec des extensions PCIe est très efficace pour le refroidissement, d'autres doctorants de l'Université de Washington et moi-même avons utilisé cette configuration avec beaucoup de succès. Ce n'est pas joli, mais cela garde votre GPU au frais
!Le système ci-dessous fonctionne depuis 4 ans sans aucun problème. Cela peut également être utilisé si vous ne disposez pas de suffisamment d'espace pour installer tous les GPU dans les emplacements PCIe.
Figure 5 : Système à 4 cartes graphiques avec port d'extension PCIE, cela ressemble à un gâchis, mais l'efficacité de dissipation thermique est très élevée.
Il est possible de définir une limite de puissance sur votre GPU. En conséquence, vous pourrez définir par programme la limite de puissance du RTX 3090 à 300 W au lieu de sa norme de 350 W. Dans un système à 4 GPU, cela équivaut à une économie de 200 W, ce qui peut être juste suffisant pour rendre réalisable un système 4x RTX 3090 avec un bloc d’alimentation de 1 600 W.
Cela permet également de garder le GPU au frais. Par conséquent, la définition d’une limite de puissance résout à la fois les principaux problèmes d’une configuration 4x RTX 3080 ou 4x RTX 3090, de refroidissement et d’alimentation. Pour une configuration 4x, vous avez toujours besoin d'un ventilateur de refroidissement à haut rendement pour le GPU, mais cela résout le problème d'alimentation.
Figure 6 : Réduire la limite de puissance a un léger effet de refroidissement. Réduisez la limite de puissance du RTX 2080 Ti de 50 à 60 W, la température baisse légèrement et le ventilateur fonctionne plus silencieusement
Vous vous demandez peut-être : « Cela ne ralentira-t-il pas le GPU ? Oui, c'est le cas, mais ? La question est de savoir dans quelle mesure.
J'ai comparé le système 4x RTX 2080 Ti illustré à la figure 5 à différentes limites de puissance. J'ai comparé le temps pour 500 mini-lots de BERT Large pendant l'inférence (hors couche softmax). Le choix de l'inférence BERT Large exerce la plus grande pression sur le GPU.
Figure 7 : Chute de vitesse mesurée à une limite de puissance donnée sur RTX 2080 Ti
Nous pouvons voir que la définition d'une limite de puissance n'a pas d'impact grave sur les performances. Limiter la puissance à 50 W ne réduit les performances que de 7 %.
Il y a un malentendu selon lequel le cordon d'alimentation du RTX 4090 prend feu car il est trop plié. C'est en réalité le cas de seulement 0,1% des utilisateurs, et le principal problème est que le câble n'est pas branché correctement.
Donc, si vous suivez les instructions d'installation ci-dessous, vous pouvez utiliser le RTX 4090 en toute sécurité.
1. Si vous utilisez un vieux câble ou un vieux GPU, assurez-vous que les contacts sont exempts de débris/poussière.
2. Utilisez le connecteur d'alimentation et branchez-le dans la prise jusqu'à ce que vous entendiez un clic - c'est la partie la plus importante.
3. Testez l'ajustement en tournant le cordon de gauche à droite. Le câble ne doit pas bouger.
4. Vérifiez visuellement le contact avec la prise et il n'y a pas d'espace entre le câble et la prise.
La prise en charge de la virgule flottante 8 bits (FP8) est un énorme avantage pour la série RTX 40 et les GPU H100.
Avec une entrée 8 bits, il vous permet de charger des données pour la multiplication matricielle deux fois plus rapidement, et vous pouvez stocker deux fois plus d'éléments matriciels dans le cache, alors que dans les architectures Ada et Hopper, le cache est très volumineux, maintenant avec les cœurs tenseurs FP8, vous pouvez obtenir 0,66 PFLOPS de calcul pour le RTX 4090.
C'est supérieur à la puissance de calcul totale du supercalculateur le plus rapide du monde en 2007. Le RTX 4090 dispose de calculs 4 fois supérieurs au FP8 et est comparable au supercalculateur le plus rapide du monde en 2010.
On peut voir que la meilleure ligne de base de 8 bits n'a pas réussi à fournir de bonnes performances au point zéro. La méthode que j'ai développée, LLM.int8(), peut effectuer une multiplication matricielle Int8 avec les mêmes résultats que la ligne de base 16 bits.
Mais Int8 est déjà pris en charge par les GPU de génération RTX 30/A100/Ampere. Pourquoi FP8 est-il une autre mise à niveau importante du RTX 40 ? Le type de données FP8 est beaucoup plus stable que le type de données Int8 et est facile à utiliser dans les spécifications de couche ou les fonctions non linéaires, ce qui est difficile à faire avec le type de données entier.
Cela rendra son utilisation dans la formation et l'inférence très simple et directe. Je pense que cela rendra la formation et l'inférence FP8 relativement courantes dans quelques mois.
Ci-dessous, vous pouvez voir un résultat principal pertinent de cet article concernant le type de données Float vs Integer. Nous pouvons voir que petit à petit, le type de données FP4 retient plus d'informations que le type de données Int4, améliorant ainsi la précision moyenne du point zéro LLM sur les 4 tâches.
Tout d'abord, jetez un œil au classement original des performances du GPU et voyez qui peut le battre le mieux.
Nous pouvons constater un énorme écart entre les performances 8 bits du GPU H100 et les anciennes cartes optimisées pour les performances 16 bits.
La figure ci-dessus montre les performances relatives brutes du GPU. Par exemple, pour une inférence 8 bits, les performances du RTX 4090 sont environ 0,33 fois celles du H100 SMX.
En d'autres termes, le H100 SMX est trois fois plus rapide en inférence 8 bits par rapport au RTX 4090.
Pour ces données, il n'a pas modélisé le calcul 8 bits pour les anciens GPU.
Parce que l'inférence et la formation 8 bits sont plus efficaces sur les GPU Ada/Hopper, et que le Tensor Memory Accelerator (TMA) enregistre de nombreux registres très précis dans la multiplication matricielle 8 bits.
Ada/Hopper prend également en charge FP8, ce qui rend l'entraînement 8 bits plus efficace. Sur Hopper/Ada, les performances d'entraînement 8 bits sont susceptibles d'être 3 à 4 fois supérieures à celles d'un entraînement 16 bits.
Pour les anciens GPU, les performances d'inférence Int8 des anciens GPU sont proches des performances d'inférence 16 bits.
Ensuite, la question est, les performances du GPU sont fortes mais je ne peux pas me le permettre...
Pour ceux qui n'ont pas assez de budget, voici ce qui suit Le graphique présente son classement des performances par dollar (Performance per Dollar) basé sur les statistiques de prix et de performances de chaque GPU, qui reflète la rentabilité du GPU.
Le choix d'un GPU qui effectue des tâches d'apprentissage en profondeur et qui correspond à votre budget peut être divisé en les étapes suivantes :
Nous pouvons voir que le RTX4070Ti est le plus rentable pour l'inférence 8 bits et 16 bits, tandis que le RTX3080 est le plus rentable pour la formation 16 bits.
Bien que ces GPU soient les plus rentables, leur mémoire est également un défaut, et 10 Go et 12 Go de mémoire peuvent ne pas répondre à tous les besoins.
Mais il peut s'agir d'un GPU idéal pour les novices qui débutent dans l'apprentissage profond.
Certains de ces GPU sont parfaits pour les compétitions Kaggle, pour réussir dans les compétitions Kaggle, la méthode de travail est plus importante que la taille du modèle, donc de nombreux GPU plus petits sont bien adaptés.
Kaggle est connue comme la plus grande plateforme de rassemblement de data scientists au monde, avec des experts réunis ici, et elle est également conviviale pour les débutants.
Le meilleur GPU s'il est utilisé pour la recherche universitaire et les opérations de serveur semble être le GPU A6000 Ada.
En même temps, le H100 SXM est également très rentable, avec une grande mémoire et de solides performances.
Parlant de mon expérience personnelle, si je devais construire un petit cluster pour un laboratoire d'entreprise/académique, je recommanderais 66 à 80 % de GPU A6000 et 20 à 33 % de GPU H100 SXM.
Cela dit, nous arrivons enfin à l'étape de confort du GPU.
Tim Dettmers a spécialement créé un « organigramme d'achat de GPU ». Si vous avez suffisamment de budget, vous pouvez opter pour une configuration plus élevée. Si vous n'avez pas assez de budget, veuillez vous référer au choix le plus rentable.
Tout d'abord, permettez-moi de souligner un point : quel que soit le GPU que vous choisissez, vous devez d'abord vous assurer que sa mémoire peut répondre à vos besoins. Pour ce faire, vous devez vous poser quelques questions :
Qu'est-ce que je veux faire avec le GPU ? Est-il utilisé pour participer à des concours Kaggle, apprendre le deep learning, faire des recherches CV/PNL ou réaliser de petits projets ?
Si vous disposez d'un budget suffisant, vous pouvez consulter les benchmarks ci-dessus et choisir le meilleur GPU pour vous.
Vous pouvez également estimer la mémoire GPU requise en exécutant votre problème dans Vast.ai ou Lambda Cloud pendant un certain temps pour comprendre s'il répond à vos besoins.
Si vous n'avez besoin d'un GPU qu'occasionnellement (pendant quelques heures tous les quelques jours) et que vous n'avez pas besoin de télécharger et de traiter de grands ensembles de données,vast.ai ou Lambda Cloud fonctionneront également bien.
Cependant, si le GPU est utilisé tous les jours pendant un mois et que la fréquence d'utilisation est élevée (12 heures par jour), le GPU cloud n'est généralement pas un bon choix.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!