Maison > Périphériques technologiques > IA > le corps du texte

En modifiant quelques lignes de code, PyTorch accélère l'alchimie et le temps d'optimisation du modèle est considérablement réduit.

WBOY
Libérer: 2023-04-11 12:16:03
avant
1109 Les gens l'ont consulté

Comment améliorer la vitesse de « l'alchimie » dans PyTorch ?

Récemment, Sebastian Raschka, chercheur bien connu en apprentissage automatique et en IA, nous a montré son astuce. Selon lui, sa méthode a réduit le temps d'optimisation du BERT de 22,63 minutes à 3,15 minutes en modifiant seulement quelques lignes de code sans affecter la précision du modèle, et la vitesse d'entraînement a été multipliée par 7.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

L'auteur a même déclaré que si vous disposez de 8 GPU, l'ensemble du processus de formation ne prend que 2 minutes, ce qui permet d'obtenir une accélération des performances 11,5 fois supérieure.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Voyons comment il y est parvenu.

Rendre la formation du modèle PyTorch plus rapide

Tout d'abord, l'auteur utilise le modèle DistilBERT pour la recherche, qui est une version simplifiée de BERT. Par rapport à BERT, l'échelle est réduite de 40 %, mais il y en a. presque aucune perte de performances. Le second est l'ensemble de données. L'ensemble de données de formation est l'IMDB Large Movie Review, un grand ensemble de données de critiques de films, qui contient un total de 50 000 critiques de films. L'auteur utilisera la méthode c dans la figure ci-dessous pour prédire le sentiment des critiques de films dans l'ensemble de données.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Une fois les tâches de base expliquées clairement, voici le processus de formation de PyTorch. Afin de permettre à chacun de mieux comprendre cette tâche, l'auteur présente également en détail un exercice d'échauffement, c'est-à-dire comment entraîner le modèle DistilBERT sur l'ensemble de données de critiques de films IMDB. Si vous souhaitez exécuter le code vous-même, vous pouvez configurer un environnement virtuel à l'aide des bibliothèques Python appropriées, comme indiqué ci-dessous :

Les versions du logiciel concerné sont les suivantes :

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Maintenant, évitez les plus ennuyeux. Pour une introduction au chargement de données, il vous suffit de savoir que cet article divise l'ensemble de données en 35 000 exemples de formation, 5 000 exemples de validation et 10 000 exemples de test. Le code requis est le suivant :

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Capture d'écran de la partie code

Adresse complète du code : /rapide er-pytorch -blog/blob/main/1_pytorch-distilbert.py​

Ensuite, exécutez le code sur le GPU A100 et obtenez les résultats suivants :

Capture d'écran de quelques résultatsEn modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Comme mentionné ci-dessus Comme le montre le code, le modèle est un peu surajusté du deuxième au troisième tour, et la précision de la vérification passe de 92,89 % à 92,09 %. Après avoir affiné le modèle pendant 22,63 minutes, la précision finale du test était de 91,43 %.

Utilisation de la classe Trainer

La prochaine étape consiste à améliorer le code ci-dessus. La partie amélioration consiste principalement à envelopper le modèle PyTorch dans LightningModule afin que la classe Trainer de Lightning puisse être utilisée. Certaines captures d'écran de code sont les suivantes :

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Adresse complète du code : https://github.com/rasbt/faster-pytorch-blog/blob/main/2_pytorch-with-trainer.py

Le code ci-dessus crée un LightningModule, qui définit comment effectuer la formation, la validation et les tests. Par rapport au code donné précédemment, le principal changement se situe dans la partie 5 (c'est-à-dire ### 5 Finetuning), qui consiste à affiner le modèle. Contrairement à avant, la partie de réglage fin enveloppe le modèle PyTorch dans la classe LightningModel et utilise la classe Trainer pour s'adapter au modèle.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Le code précédent montrait que la précision de validation avait chuté du tour 2 au tour 3, mais le code amélioré utilise ModelCheckpoint pour charger le meilleur modèle. Sur la même machine, le modèle a atteint une précision de test de 92 % en 23,09 minutes.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Notez que si vous désactivez les points de contrôle et autorisez PyTorch à s'exécuter en mode non déterministe, cette exécution finira par obtenir la même durée d'exécution que PyTorch standard (durée 22,63 minutes au lieu de 23,09 minutes).

Entraînement automatique de précision mixte

De plus, si le GPU prend en charge l'entraînement de précision mixte, vous pouvez activer le GPU pour améliorer l'efficacité informatique. Les auteurs utilisent un entraînement automatique à précision mixte, basculant entre 32 bits et 16 bits à virgule flottante sans sacrifier la précision.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Dans le cadre de cette optimisation, en utilisant la classe Trainer, un entraînement automatique de précision mixte peut être réalisé avec une seule ligne de code :

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Les opérations ci-dessus peuvent réduire le temps d'entraînement de 23,09 minutes à 8,75 minutes, soit presque 3 fois plus rapide. La précision sur l'ensemble de test est de 92,2 %, ce qui est même légèrement amélioré par rapport aux 92,0 % précédents.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Utilisation de Torch.Compile static graph

L'annonce récente de PyTorch 2.0 montre que l'équipe PyTorch a introduit une nouvelle fonction toch.compile. Cette fonction peut accélérer l'exécution du code PyTorch en générant des graphiques statiques optimisés au lieu d'utiliser des graphiques dynamiques pour exécuter le code PyTorch.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Étant donné que PyTorch 2.0 n'est pas encore officiellement publié, vous devez d'abord installer torchtriton et mettre à jour vers la dernière version de PyTorch pour utiliser cette fonctionnalité.一 Modifiez ensuite le code en ajoutant cette ligne :

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.


Lady data sur 4 GPU

Ce qui précède présente la formation de précision mixte du code accéléré sur un seul GPU. Ensuite, nous introduisons la stratégie de formation multi-GPU. La figure ci-dessous résume plusieurs techniques de formation multi-GPU différentes.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Si vous souhaitez obtenir un parallélisme de données distribué, vous pouvez y parvenir via DistributedDataParallel. Il vous suffit de modifier une ligne de code pour utiliser Trainer.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Après cette étape d'optimisation, sur 4 GPU A100, ce code a fonctionné pendant 3,52 minutes et a atteint une précision de test de 93,1%.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

DeepSpeed

Enfin, l'auteur explore l'utilisation de la bibliothèque d'optimisation du deep learning DeepSpeed ​​​​dans Trainer et Results of stratégie multi-GPU. Tout d'abord, vous devez installer la bibliothèque DeepSpeed :

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Ensuite, il vous suffit de modifier une seule ligne de code pour activer la bibliothèque :

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Après cette vague, il a fallu 3,15 minutes pour atteindre 92,6 % de précision du test. Cependant, PyTorch propose également une alternative à DeepSpeed : DataParallel entièrement fragmenté, appelé avec stratégie="fsdp", qui a finalement pris 3,62 minutes.

En modifiant quelques lignes de code, PyTorch accélère lalchimie et le temps doptimisation du modèle est considérablement réduit.

Ce qui précède est la méthode de l'auteur pour améliorer la vitesse de formation du modèle PyTorch. Les amis intéressés peuvent suivre le blog original et l'essayer, je pense que vous obtiendrez les résultats souhaités.

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!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal