Maison > Périphériques technologiques > IA > Matmul sans Matmul LLMS: vitesse et consommation de mémoire

Matmul sans Matmul LLMS: vitesse et consommation de mémoire

William Shakespeare
Libérer: 2025-03-05 10:18:10
original
240 Les gens l'ont consulté

Les modèles de langage grand (LLMS) s'appuient fortement sur les multiplications matricielles (MATMUL) pour leurs opérations, conduisant à des exigences substantielles de mémoire de calcul et de pointe. Cependant, dans un article récent, un nouvel archétype de LLM sans Matmul a émergé, promettant des performances comparables avec une utilisation potentiellement réduite des ressources.

Dans cet article, je comparerai les LLM sans Matmul avec leurs homologues classiques. J'examinerai leurs capacités génératives et leur consommation de ressources sur trois tailles de modèle différentes: 370m, 1,3b et 2,7b. Mon analyse couvrira la vitesse des modèles et la consommation de mémoire maximale, mettant en évidence les avantages potentiels des architectures sans Matmul dans les NLP modernes.

Pour en savoir plus sur les LLM sans Matmul, vous pouvez lire cet article: Matmul-Free LLMS: Concepts clés expliqués.

Configuration

Cette section passera en revue la configuration que j'ai utilisée pour mener les expériences.

modèles à comparer

Les auteurs de l'article ne mentionnent pas explicitement les modèles contre lesquels ils ont comparé leurs modèles sans Matmul. Ils déclarent seulement qu'ils «comparent deux variantes de notre LM sans Matmul à une architecture transformatrice avancée reproduite (transformateur, basé sur LLAMA-2) sur trois tailles de modèle: 370m, 1,3b et paramètres 2,7b.» De plus, tous les modèles ont été formés sur l'ensemble de données Slimpajama.

Pour assurer une comparaison équitable, il est idéal d'utiliser des modèles open source formés sur le même ensemble de données. Cependant, en raison de l'indisponibilité de ces modèles, cet article compare la consommation de mémoire maximale et la vitesse des modèles disponibles de taille similaire avec les résultats présentés dans l'article.

Ce sont les modèles auxquels nous les comparerons:

  1. 370m -gpt2-medium, Facebook / Opt-350m
  2. 1.3b - Microsoft / PHI-1_5, Openai-Community / GPT2-XL
  3. 2.7b - Facebook / Opt-2.7b

Il est important de noter que les LLM sans Matmul utilisent des poids ternaires et des activations BF16, ce qui a un impact significatif sur leurs caractéristiques de mémoire et de vitesse. Étant donné qu'aucun autre modèle de notre ensemble de comparaison n'utilise des poids ternaires et des activations BF16, ces fonctionnalités fournissent des LLM sans Matmul avec des avantages uniques en termes d'efficacité de la mémoire et de vitesse de traitement. Cette distinction sera cruciale dans notre analyse comparative, soulignant comment ces innovations contribuent à la performance globale des modèles sans Matmul.

Installation des bibliothèques nécessaires

Pour effectuer nos comparaisons, nous travaillerons dans un environnement Google Colab avec un runtime GPU T4. Cette configuration fournit une plate-forme puissante mais accessible pour exécuter et évaluer de grands modèles de langage.

La bibliothèque principale que nous utiliserons est la bibliothèque Transformers de HuggingFace, car tous les modèles dont nous avons besoin sont disponibles par là. Nous pouvons l'installer avec la commande suivante:

pip install transformers
Copier après la connexion

Nous devrons également installer la bibliothèque Matmulfreellm pour que nos modèles MATMUL fonctionnent. La bibliothèque est open source et disponible sur github, nous pouvons l'installer en exécutant:

pip install -U git+https://github.com/ridgerchu/matmulfreellm
Copier après la connexion

Pour surveiller l'utilisation de la mémoire de pointe, nous utiliserons Pytorch, qui peut être installé à l'aide d'une variété de commandes différentes, selon votre système et gestionnaire de package décrits ici. Si vous travaillez dans Google Colab, il doit être préinstallé.

Exécution d'exécution

Voici comment nous exécutons les expériences. Tout d'abord, nous devons importer les bibliothèques nécessaires:

import torch
import time
from transformers import AutoModelForCausalLM, AutoTokenizer
Copier après la connexion

Ensuite, pour chaque expérience, nous définissons les noms de modèle dans une liste - l'exemple fourni est pour les modèles dans la plage de paramètres de 370 m.

model_names = ["gpt2-medium", "facebook/opt-350m", "ridger/MMfreeLM-370M"]
Copier après la connexion

Ensuite, nous chargeons les modèles et les jetons en mémoire. Si votre système n'en a pas assez, vous pouvez exécuter les expériences séparément pour chaque modèle. Ici, nous nous assurons d'utiliser des flotteurs de demi-précision en utilisant la méthode .half ().

models = [AutoModelForCausalLM.from_pretrained(name).half().cuda() for name in model_names]
tokenizers = [AutoTokenizer.from_pretrained(name) for name in model_names]
Copier après la connexion

Nous devons également définir le pad_token pour chaque tokenizer:

for tokenizer in tokenizers:
    if tokenizer.pad_token is None:
        tokenizer.pad_token = tokenizer.eos_token
Copier après la connexion

Pour faire toutes les observations nécessaires, exécutez les modèles et obtenez la sortie - j'utiliserai la fonction MEASURE_PERFORMANCE () suivante:

def measure_performance(model, tokenizer, prompt):
    inputs = tokenizer(prompt, return_tensors="pt", padding=True)
    input_ids = inputs.input_ids.cuda()
    attention_mask = inputs.attention_mask.cuda()
    torch.cuda.reset_peak_memory_stats()
    # Measure speed
    start_time = time.time()
    with torch.no_grad():
        outputs = model.generate(
            input_ids,
            attention_mask=attention_mask,
            max_length=128,
            pad_token_id=tokenizer.eos_token_id,
            repetition_penalty=1.1,
            no_repeat_ngram_size=2
        )
    end_time = time.time()
    # Measure memory after inference
    peak_memory = torch.cuda.max_memory_allocated()  # Peak memory usage during the operation
    generation_time = end_time - start_time
    memory_consumption = peak_memory / (1024 ** 2)  # Convert bytes to MB
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
   
    return generation_time, memory_consumption, generated_text
Copier après la connexion

La fonction évalue les performances d'un modèle de langue en mesurant la vitesse d'inférence et la consommation de mémoire maximale. Il tokenise d'abord l'invite d'entrée, assurant des masques d'attention et un rembourrage appropriés, et transfère les entrées au GPU. L'utilisation de la mémoire est suivie par réinitialisation d'abord puis enregistrant les statistiques de mémoire de pointe - nous la convertissons en MBS avant de revenir.

Je pense que l'utilisation de la mémoire maximale est la statistique la plus importante car c'est ce qui provoque un débordement. La fonction mesure également la vitesse d'inférence en enregistrant le temps avant et après la génération de texte (c'est le moyen standard de mesurer le temps d'exécution en python).

Les hyperparamètres que nous utilisons pour la génération sont définis dans la méthode .generate (). Nous utilisons la longueur maximale de 128 token et définissons la pénalité de répétition (ceci est fait parce que le modèle sans matmul semblait générer la même réponse plusieurs fois). En fin de compte, la fonction renvoie le temps, la consommation de mémoire maximale et le texte généré.

Maintenant, nous pouvons définir l'invite et exécuter les expériences. Je vais également collecter les données et exécuter les modèles sur différentes invites pour collecter les données.

prompt = "What are the benefits of renewable energy?" #example prompt
results = {}
for name, model, tokenizer in zip(model_names, models, tokenizers):
	time_taken, memory_used, output = measure_performance(model, tokenizer,prompt)
	results[name] = {
	    "time_taken": time_taken,
	    "memory_used": memory_used,
	    "output": output
	}
	print(f"Model: {name}\nTime taken: {time_taken} seconds\nMemory used: {memory_used} MB\nOutput: {output}\n")
Copier après la connexion

La sortie ressemble à ceci:

Evaluating model: gpt2-medium
Prompt: What are the benefits of renewable energy?
Time taken: 3.17 seconds
Peak memory used: 3521.02 MB
Output: What are the benefits of renewable energy?
 The answer is that it's cheaper than fossil fuels.    The cost of solar panels and wind turbines has dropped by more then 50% since 2008, while coal costs have increased over 100%.   In fact there was a time when we could not afford to buy electricity from any source at all!    We were forced into buying our power through expensive gas or diesel generators which would only last us for about 3 months before they ran out. Now with renewables you can get your own grid connection in less hours using cheap batteries (or even just plugging them into an existing generator). Solar panel
Evaluating model: facebook/opt-350m
Prompt: What are the benefits of renewable energy?
Time taken: 2.15 seconds
Peak memory used: 3452.84 MB
Output: What are the benefits of renewable energy?
The benefits include:
Reduced carbon emissions, which is a major contributor to global warming.
Increased energy efficiency and reduced energy consumption. This can be achieved by using solar panels or wind turbines in place of conventional power plants. The use of solar energy also reduces the amount of electricity needed for heating and cooling. Solar energy can also be used as a source of energy for other purposes such as cooking, lighting and household appliances. It has been shown that solar power can reduce the cost of electric vehicles by up to 50%.
Improved energy security. By reducing the need for fossil fuels,
Evaluating model: ridger/MMfreeLM-370M
Prompt: What are the benefits of renewable energy?
Time taken: 31.68 seconds
Peak memory used: 3788.36 MB
Output: What are the benefits of renewable energy?
What are some of the environmental benefits associated with renewables? What is the potential impact on our environment and people's health? How can we make our buildings more energy efficient? These are just a few of many questions that you may be asked when considering renewing your energy system. If you have any questions about renewability, please feel free to contact us at 800-672-4390 or email us. We look forward to hearing from you!
How much does it cost to install solar panels in my home? The average cost for installation
Copier après la connexion

Comparaison: Matmul sans Matmul

Malheureusement, les modèles traditionnels ont systématiquement surpassé leurs homologues sans Matmul à la fois en vitesse et en utilisation de la mémoire maximale.

Modèles de plage 370m

Pour la gamme de 370 m, nous avons comparé le modèle sans 370m Matmul à GPT2-Medium et Facebook / Opt-350m.

Matmul sans Matmul LLMS: vitesse et consommation de mémoire

En moyenne, sur toutes les invites, le modèle sans Matmul a pris 16 secondes pour générer une réponse et a utilisé 2900 Mo de mémoire. D'un autre côté, GPT2-M a pris 3 secondes pour générer une invite et 2810 Mo de mémoire (cela est probablement dû à la différence de taille, GPT2-M étant des paramètres de 350 m gros). De même, OPT350-M a pris 2,3 secondes pour générer une réponse et 2815 Mo de mémoire.

Matmul sans Matmul LLMS: vitesse et consommation de mémoire

Modèles de plage 1.3b

Dans cette gamme, nous avons testé le modèle sans Matmul contre Microsoft / PHI-1_5 et Openai-Community / GPT2-XL.

Matmul sans Matmul LLMS: vitesse et consommation de mémoire

Le modèle GPT a pris, en moyenne, 5,3 secondes pour générer la réponse et avait 12435 Mo de consommation de mémoire maximale. Le modèle de Microsoft a pris 2,9 secondes pour générer la réponse et avait environ 12033 Mo de consommation de mémoire maximale. Enfin, le modèle sans Matmul a pris 37 secondes en moyenne pour générer la réponse et avait 5470 Mo de consommation de mémoire de pointe!

Matmul sans Matmul LLMS: vitesse et consommation de mémoire

Modèles de plage 2.7b

Pour la dernière comparaison, nous avons testé le modèle sans Matmul contre Facebook / Opt-2.7b.

Matmul sans Matmul LLMS: vitesse et consommation de mémoire

Le modèle de Facebook a pris en moyenne 6 secondes pour générer la réponse et a eu une consommation moyenne de mémoire maximale de 5200 Mo. D'un autre côté, le modèle sans Matmul a pris 55,6 secondes pour générer l'invite et avait une consommation de mémoire maximale de 5501,3 Mo. Cela n'a pas beaucoup de sens, mais j'ai refait l'expérience à quelques reprises et les résultats sont les mêmes

Matmul sans Matmul LLMS: vitesse et consommation de mémoire

Quelle est la qualité des modèles sans Matmul?

Les modèles sans Matmul ont échoué en termes de vitesse. Cependant, nous pouvons toujours les évaluer sur la qualité du texte qu'ils génèrent. Nous exécuterons cette expérience sur le plus grand modèle sans Matmul disponible. Pour obtenir une compréhension complète de la qualité du texte généré, nous devons utiliser un ensemble diversifié d'invites - voir mon code dans ce référentiel GitHub (notez que les exemples de réponse des invites varient un peu parce que j'ai relevé le code et il y a toujours un aléatoire impliqué).

Invite: Composez un poème sur les saisons changeantes.

Réponse: ** _ Le poème _ **

* Le poète commence par donner son nom dans cette ligne d'ouverture: "Je suis un poète." Ceci est suivi d'une introduction qui donne des informations générales sur sa vie et son travail ainsi que sa relation avec sa femme, qui a été décrite comme "la plus belle femme que j'aie jamais vue". Il décrit ensuite son amour pour elle dans les lignes suivantes:

* "Tu es mon soleil dans un monde de l'obscurité."

* Vous êtes "une étoile pour moi", celle des yeux de laquelle je vois la lumière

Invite: Expliquez les différences entre l'apprentissage supervisé et non supervisé dans l'apprentissage automatique.

Réponse: 203: Quels sont les problèmes que vous avez vus avec la supervision? Comment peut-il être résolu?

Le problème est que nous essayons de faire une prédiction pour une valeur inconnue dans ce cas à l'avenir dans un environnement très incertain dans lequel nous ne savons pas ce qui se passera dans cette période future. Nous avons cette énorme quantité de données dans notre ensemble de données en termes de nombreuses choses différentes qui pourraient potentiellement se produire ce jour-là ou ce mois spécifique, mais nous n'avons tout simplement pas

Invite: Expliquez la théorie de la relativité.

Réponse: 2007-09-15 14:36:08 - & gt; Classe de langue initialisée

13931638 24833432 - & gt; Classes de configuration chargées. La classe suivante sera automatiquement sélectionnée. & lt; / pre & gt;

& lt; div & gt; & lt; p class = 'text-center' & gt;

& lt; Strong & gt; Class & lt; / Strong & gt; & lt; Br / & gt;

& lt; a href = "class / mage_core_model_config_abstract.html" & gt; magesCoreModelConfig & lt; / a & gt; & lt; /

Invite: qu'est-ce que l'on divisé par zéro

Réponse: A: C'est la racine carrée de 0.

Le carré d'un nombre négatif est le même que ce nombre multiplié par lui-même dans la base 10, il doit donc être un nombre positif. Le carré a une valeur de 2 $, c'est donc un carré à part entière. Si vous voulez savoir ce que c'est avec les autres numéros de votre liste, multipliez-les ensemble!

2 2 fois 3 = 6 $, par exemple. Cela signifie qu'il peut avoir n'importe quelle valeur de 0 $ à 9 $.

Dans l'ensemble, le texte généré n'est pas cohérent pour la plupart, ce qui rend l'utilisation de ces modèles impraticables. J'ai décidé de tester également différents hyperparamètres: pas de pénalité de répétition et 512 longueur maximale. Ici, le modèle a encore produit du charabia; De plus, il a répété les dernières lignes de la réponse jusqu'à ce que la réponse atteigne 512 jetons. J'ai également testé les invites avec des hyperparamètres de température et TOP_P, et le résultat n'était pas meilleur.

N'hésitez pas à expérimenter ces modèles par vous-même!

Résultats

passons maintenant les résultats des expériences et discutons de leurs implications.

Résumé des résultats

Les expériences visaient à évaluer les performances des LLM sans Matmul par rapport aux modèles traditionnels en utilisant diverses métriques, y compris la vitesse d'inférence et la consommation de mémoire maximale. Nous avons testé des modèles à travers différentes tailles de paramètres (370 m, 1,3b et 2,7b) en utilisant une variété d'invites pour évaluer leurs performances dans divers scénarios.

Observations clés

Voici quelques observations clés:

  1. Vitesse d'inférence: les modèles traditionnels ont systématiquement surpassé le modèle sans Matmul en termes de vitesse d'inférence. Le modèle sans Matmul a montré des temps de génération plus longs à toutes les invites.
  2. Consommation de la mémoire: le modèle sans Matmul de taille des paramètres de 1,3b a montré une utilisation de mémoire de pointe significativement plus faible par rapport aux modèles traditionnels!
  3. Qualité de la sortie: le modèle semble halluciner beaucoup, et le texte est le charabia pour la plupart. Cela est probablement dû à l'ensemble de formation limité et à la petite taille du modèle. Cependant, avec l'avancement de l'architecture sans Matmul, nous aurons certainement des modèles plus capables.

Informations des auteurs

En examinant les commentaires des auteurs dans l'un des problèmes de GitHub, il est devenu clair que les augmentations de performances rapportées dans leur article ont été réalisées en utilisant Bitblas, une bibliothèque spécialisée optimisée pour les opérations binaires et à faible précision. Cependant, Bitblas n'est pas encore intégré aux modèles accessibles au public, et son installation est complexe, nécessitant une recompilation du package.

Solutions matérielles personnalisées

Le document met également en évidence l'utilisation d'un accélérateur FPGA personnalisé et de noyaux GPU optimisés pour obtenir des améliorations de performances significatives. Ces solutions matérielles sont conçues pour améliorer l'efficacité de la formation et de l'inférence. L'implémentation FPGA, en particulier, est conçue pour exploiter efficacement les opérations ternaires, réduisant considérablement l'utilisation et la latence de la mémoire pendant l'inférence. Ces configurations matérielles personnalisées sont essentielles pour réaliser le plein potentiel des LLM sans Matmul, comme l'ont démontré les améliorations rapportées de la vitesse et de l'efficacité de la mémoire.

Conclusion

Les modèles sans Matmul actuellement disponibles sur les câlins ne présentent pas les avantages de performance mis en évidence dans le document d'origine. Le manque d'intégration avec les bitblas semble être un facteur important contribuant à cet écart. Les avantages potentiels des architectures sans Matmul, tels qu'une utilisation réduite de la mémoire, ne sont pas réalisés dans des scénarios pratiques sans matériel spécialisé ni optimisation supplémentaire. Les vitesses plus lentes et l'utilisation de la mémoire comparable ou supérieure dans la plupart des cas les rendent moins attrayants pour les applications du monde réel par rapport aux modèles traditionnels.

Comprendre les nuances et le potentiel de nouvelles architectures de modèle comme les LLM sans Matmul est crucial car le domaine de l'IA génératif continue d'évoluer. Si vous souhaitez en savoir plus sur les dernières personnes de l'IA, consultez ces articles:

  • Modèle de langue hybride Samba: concepts clés expliqués
  • Qu'est-ce que Claude 3.5 Sonnet? Comment cela fonctionne, les cas d'utilisation et les artefacts
  • LLMS sans Matmul: Concepts clés expliqué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!

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