Maison > Périphériques technologiques > IA > Quantification du poids du réseau neuronal

Quantification du poids du réseau neuronal

Joseph Gordon-Levitt
Libérer: 2025-03-08 10:40:10
original
694 Les gens l'ont consulté

À l'ère des modèles de langage de plus en plus grands et des réseaux de neurones complexes, l'optimisation de l'efficacité du modèle est devenue primordiale. La quantification du poids se distingue comme une technique cruciale pour réduire la taille du modèle et améliorer la vitesse d'inférence sans dégradation significative des performances. Ce guide fournit une approche pratique de la mise en œuvre et de la compréhension de la quantification du poids, en utilisant GPT-2 comme exemple pratique.

Objectifs d'apprentissage

  • Comprendre les principes fondamentaux de la quantification du poids et son importance dans l'optimisation du modèle.
  • Apprenez les différences entre ABSMAX et les techniques de quantification du point zéro.
  • Mettez en œuvre des méthodes de quantification de poids sur GPT-2 en utilisant pytorch.
  • Analyser l'impact de la quantification sur l'efficacité de la mémoire, la vitesse d'inférence et la précision.
  • Visualiser les distributions de poids quantifiées en utilisant des histogrammes pour les informations.
  • Évaluer les performances du modèle post-quantification par la génération de texte et les métriques de perplexité.
  • Explorez les avantages de la quantification pour le déploiement de modèles sur les appareils liés aux ressources.

Cet article a été publié dans le cadre du Data Science Blogathon.

Table des matières

  • compréhension des principes de quantification du poids
  • Implémentation pratique
  • Processus de quantification: poids et modèle
  • Visualiser les distributions de poids quantifiées
  • Évaluation des performances
  • Avantages de la quantification de poids
  • Avantages de poids
  • CONCLUSE
Avantages de poids

CONCLUSE

Avantages de poids

CONCLUSE

Avantages de poids
  • CONCLUSE Avantages de poids
  • CONCLUSE
  • AVANTACTÉS DE POIDS DE POID Questions
  • Comprendre les principes fondamentaux de la quantification du poids
  • La quantification du poids convertit les poids à virgule flottante à haute précision (généralement 32 bits) en représentations de précision inférieure (entièrement 8 bits). Ce processus réduit considérablement la taille du modèle et l'utilisation de la mémoire tout en essayant de préserver les performances du modèle. Le défi clé réside dans le maintien de la précision du modèle tout en réduisant la précision numérique.
  • Pourquoi quantifier?
  • Efficacité de la mémoire:
La réduction de la précision de 32 bits à 8 bits peut théoriquement réduire la taille du modèle de 75%

Inférence plus rapide:

Les opérations entières sont généralement plus rapides que les opérations à virgule flottante

Consommation d'énergie inférieure:

La bande passante de mémoire réduite et les calculs plus simples conduisent à des économies d'énergie
import seaborn as sns
import torch
import numpy as np
from transformers import AutoModelForCausalLM, AutoTokenizer
from copy import deepcopy
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn as sns
Copier après la connexion
Copier après la connexion
Copier après la connexion

Flexibilité de déploiement: Les modèles plus petits peuvent être déployés sur des appareils liés aux ressources Implémentation pratique Plongeons-nous dans la mise en œuvre de deux méthodes de quantification populaire: la quantification ABSMAX et la quantification du point zéro. Configuration de l'environnement Tout d'abord, nous allons mettre en place notre environnement de développement avec les dépendances nécessaires: Ci-dessous, nous chercherons à mettre en œuvre des méthodes de quantification:

ABSMAX Quantification

La méthode de quantification ABSMAX évolue les poids en fonction de la valeur absolue maximale dans le tenseur:

import seaborn as sns
import torch
import numpy as np
from transformers import AutoModelForCausalLM, AutoTokenizer
from copy import deepcopy
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn as sns
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cette méthode fonctionne par:

  • Trouver la valeur absolue maximale dans le tenseur de poids
  • calcul d'un facteur de mise à l'échelle pour ajuster les valeurs dans la plage INT8
  • Mise à l'échelle et à l'arrondi les valeurs
  • Fournir des versions quantifiées et déquanatisées

Avantages clés:

  • Implémentation simple
  • bonne préservation de grandes valeurs
  • quantification symétrique autour de zéro

Quantification du point zéro

La quantification du point zéro ajoute un décalage pour mieux gérer les distributions asymétriques:

# Define quantization functions
def absmax_quantize(X):
    scale = 100 / torch.max(torch.abs(X))  # Adjusted scale
    X_quant = (scale * X).round()
    X_dequant = X_quant / scale
    return X_quant.to(torch.int8), X_dequant
Copier après la connexion
Copier après la connexion

Sortie:

def zeropoint_quantize(X):
    x_range = torch.max(X) - torch.min(X)
    x_range = 1 if x_range == 0 else x_range
    scale = 200 / x_range
    zeropoint = (-scale * torch.min(X) - 128).round()
    X_quant = torch.clip((X * scale + zeropoint).round(), -128, 127)
    X_dequant = (X_quant - zeropoint) / scale
    return X_quant.to(torch.int8), X_dequant
Copier après la connexion

Cette méthode:

  • calcule la plage complète des valeurs
  • détermine les paramètres de l'échelle et du point zéro
  • applique la mise à l'échelle et le décalage
  • Clift les valeurs pour assurer les limites INT8

Avantages:

  • Une meilleure manipulation des distributions asymétriques
  • Amélioration de la représentation des valeurs proches de zéro
  • entraîne souvent une meilleure précision globale

Chargement et préparation du modèle

Appliquons ces méthodes de quantification à un vrai modèle. Nous utiliserons GPT-2 comme exemple:

Using device: cuda
Copier après la connexion

Sortie:

Quantification du poids du réseau neuronal

Processus de quantification: poids et modèle

Plongez dans l'application de techniques de quantification aux poids individuels et à l'ensemble du modèle. Cette étape garantit une utilisation réduite de la mémoire et une efficacité de calcul tout en maintenant les performances.

# Load model and tokenizer
model_id = 'gpt2'
model = AutoModelForCausalLM.from_pretrained(model_id).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_id)

# Print model size
print(f"Model size: {model.get_memory_footprint():,} bytes")
Copier après la connexion

Visualiser les distributions de poids quantifiées

Visualisez et comparez les distributions de poids des modèles d'origine, ABSMAX quantifiés et quantifiés à point zéro. Ces histogrammes donnent un aperçu de l'impact de la quantification des valeurs de poids et de leur distribution globale.

# Quantize and visualize weights
weights_abs_quant, _ = absmax_quantize(weights)
weights_zp_quant, _ = zeropoint_quantize(weights)


# Quantize the entire model
model_abs = deepcopy(model)
model_zp = deepcopy(model)

for param in model_abs.parameters():
    _, dequantized = absmax_quantize(param.data)
    param.data = dequantized

for param in model_zp.parameters():
    _, dequantized = zeropoint_quantize(param.data)
    param.data = dequantized
Copier après la connexion

Le code comprend une fonction de visualisation complète:

  • Graphique affichant des poids d'origine vs poids ABSMAX
  • graphique affichant des poids d'origine vs poids de point zéro

Sortie:

Quantification du poids du réseau neuronal

Quantification du poids du réseau neuronal

Évaluation des performances

L'évaluation de l'impact de la quantification sur les performances du modèle est essentielle pour garantir l'efficacité et la précision. Mesurer dans la façon dont les modèles quantifiés fonctionnent par rapport à l'original.

Génération de texte

Explorez comment les modèles quantifiés génèrent du texte et comparent la qualité des sorties aux prédictions du modèle d'origine.

import seaborn as sns
import torch
import numpy as np
from transformers import AutoModelForCausalLM, AutoTokenizer
from copy import deepcopy
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn as sns
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ce code compare les sorties de génération de texte à partir de trois modèles: le modèle quantifié «Absmax» original, et un modèle quantifié «Zeropoint». Il utilise une fonction Generate_Text pour générer du texte basé sur une invite d'entrée, en appliquant un échantillonnage avec une valeur supérieure de 30. Enfin, il imprime les résultats des trois modèles.

Sortie:

Quantification du poids du réseau neuronal

# Define quantization functions
def absmax_quantize(X):
    scale = 100 / torch.max(torch.abs(X))  # Adjusted scale
    X_quant = (scale * X).round()
    X_dequant = X_quant / scale
    return X_quant.to(torch.int8), X_dequant
Copier après la connexion
Copier après la connexion

Le code calcule la perplexité (une mesure de la façon dont un modèle prédit le texte) pour une entrée donnée à l'aide de trois modèles: les modèles quantifiés «Absmax» originaux, «Absmax» et «Zeropoint». La perplexité plus faible indique de meilleures performances. Il imprime les scores de perplexité pour la comparaison.

Sortie:

Quantification du poids du réseau neuronal

Vous pouvez accéder au lien Colab ici.

Avantages de la quantification du poids

Ci-dessous, nous examinerons les avantages de la quantification du poids:

  • Efficacité de la mémoire: La quantification réduit la taille du modèle jusqu'à 75%, permettant une charge et une inférence plus rapides.
  • Inférence plus rapide: Les opérations entières sont plus rapides que les opérations à virgule flottante, conduisant à une exécution du modèle plus rapide.
  • Consommation d'énergie inférieure: La bande passante de mémoire réduite et le calcul simplifié conduisent à des économies d'énergie, essentiels pour les périphériques de bord et le déploiement mobile.
  • Flexibilité du déploiement: Les modèles plus petits sont plus faciles à déployer sur le matériel avec des ressources limitées (par exemple, les téléphones mobiles, les appareils intégrés).
  • Dégradation minimale des performances: Avec la bonne stratégie de quantification, les modèles peuvent conserver la majeure partie de leur précision malgré la précision réduite.

Conclusion

La quantification du poids joue un rôle crucial dans l'amélioration de l'efficacité des grands modèles de langage, en particulier lorsqu'il s'agit de les déployer sur des appareils liés aux ressources. En convertissant des poids de haute précision en représentations entières à faible précision, nous pouvons réduire considérablement l'utilisation de la mémoire, améliorer la vitesse d'inférence et la consommation d'énergie inférieure, le tout sans affecter gravement les performances du modèle.

Dans ce guide, nous avons exploré deux techniques de quantification populaires: la quantification ABSMAX et la quantification du point zéro - en utilisant GPT-2 comme exemple pratique. Les deux techniques ont démontré la capacité de réduire l'empreinte de la mémoire du modèle et les exigences de calcul tout en maintenant un niveau élevé de précision dans les tâches de génération de texte. Cependant, la méthode de quantification du point zéro, avec son approche asymétrique, a généralement entraîné une meilleure préservation de la précision du modèle, en particulier pour les distributions de poids non symétriques.

Les plats clés

  • La quantification ABSMAX est plus simple et fonctionne bien pour les distributions de poids symétriques, bien qu'elle puisse ne pas capturer des distributions asymétriques aussi efficacement que la quantification du point zéro.
  • La quantification du point zéro offre une approche plus flexible en introduisant un décalage pour gérer les distributions asymétriques, conduisant souvent à une meilleure précision et à une représentation plus efficace des poids.
  • La quantification est essentielle pour le déploiement de grands modèles dans des applications en temps réel où les ressources de calcul sont limitées.
  • Malgré la précision du processus de quantification, il est possible de maintenir les performances du modèle près de l'original avec des stratégies de réglage et de quantification appropriées.
  • Les techniques de visualisation comme les histogrammes peuvent fournir un aperçu de la façon dont la quantification affecte les poids du modèle et la distribution des valeurs dans les tenseurs.

Les questions fréquemment posées

Q1. Qu'est-ce que la quantification du poids?

a. La quantification du poids réduit la précision des poids d'un modèle, généralement des valeurs à virgule flottante 32 bits à des entiers de précision inférieure (par exemple, des entiers 8 bits), pour enregistrer la mémoire et le calcul tout en maintenant les performances.

Q2. Comment la quantification du poids affecte-t-elle les performances du modèle?

a. Bien que la quantification réduit l'empreinte mémoire du modèle et le temps d'inférence, il peut entraîner une légère dégradation de la précision. Cependant, s'il est fait correctement, la perte de précision est minime.

Q3. La quantification peut-elle être appliquée à n'importe quel modèle?

a. Oui, la quantification peut être appliquée à n'importe quel modèle de réseau neuronal, y compris des modèles de langue, des modèles de vision et d'autres architectures d'apprentissage en profondeur.

Q4. Comment mettre en œuvre la quantification du poids dans mon modèle?

a. Vous pouvez implémenter la quantification en créant des fonctions pour mettre à l'échelle et arrondi les poids du modèle, puis les appliquer sur tous les paramètres. Des bibliothèques comme Pytorch fournissent une prise en charge native pour certaines techniques de quantification, bien que les implémentations personnalisées, comme indiqué dans le guide, offrent une flexibilité.

Q5. La quantification fonctionne-t-elle pour tous les types de modèles?

a. La quantification du poids est la plus efficace pour les grands modèles où la réduction de l'empreinte de la mémoire et du calcul sont essentielles. Cependant, de très petits modèles peuvent ne pas bénéficier autant de la quantification.

Le média présenté dans cet article ne appartient pas à l'analyse vidhya et est utilisé à la discrétion de l'auteur.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal