Accélérer l'inférence des Transformers avec ctransformers
Published on
Introduction
Ces dernières années, les modèles de langage basés sur les Transformers ont révolutionné le traitement du langage naturel, permettant des avancées dans des tâches telles que la génération de langage, la réponse aux questions et la classification de texte. Cependant, ces modèles sont souvent extrêmement volumineux, avec des milliards, voire des billions, de paramètres, ce qui les rend calculatoirement coûteux à exécuter, en particulier sur CPU.
ctransformers est une bibliothèque Python qui vise à rendre le déploiement de ces grands modèles de langage plus efficace et accessible. Il fournit des liaisons Python pour les modèles Transformer mis en œuvre dans un code C/C++ optimisé, en tirant parti de techniques telles que la quantification et l'utilisation d'instructions AVX pour accélérer considérablement l'inférence sur du matériel CPU.
Avec ctransformers, il est possible de charger et d'exécuter des modèles tels que GPT-2, GPT-J, GPT-NeoX, Llama, et bien d'autres, avec seulement quelques lignes de code Python. La bibliothèque offre une interface simple et unifiée pour différents modèles, une intégration avec le Hugging Face Hub et le framework LangChain, ainsi qu'un accès aux API de bas niveau pour un contrôle plus précis.
Qu'est-ce que ctransformers ?
Sous le capot, ctransformers utilise la bibliothèque GGML, qui est une bibliothèque de tenseurs axée sur l'exécution de modèles de ML sur CPU. GGML fournit des implémentations efficaces d'opérations courantes telles que la multiplication de matrices, notamment pour les types de données quantifiés. En combinant GGML avec des noyaux optimisés spécifiques au modèle, ctransformers parvient à obtenir des performances impressionnantes.
L'une des applications les plus intéressantes de ctransformers est la possibilité d'exécuter des modèles open source volumineux tels que Llama 2 sur du matériel grand public. Cela ouvre des possibilités de déploiement rentable et respectueux de l'environnement de grands modèles de langage, les rendant plus accessibles à un plus large éventail d'utilisateurs et d'applications.
Dans cet article, nous plongerons dans les détails techniques de ctransformers, explorant ses fonctionnalités, ses caractéristiques de performance et son API. Nous parcourrons des exemples de code montrant comment charger des modèles, générer du texte et intégrer LangChain. Enfin, nous discuterons des implications et du potentiel d'une inférence CPU efficace pour l'avenir du TAL et de l'IA.
Quelques fonctionnalités clés de ctransformers :
- Interface unifiée pour charger et exécuter différents modèles
- Prise en charge de l'exécution de modèles à partir du Hugging Face Hub
- Intégration avec le framework LangChain
- Accès à l'API C de bas niveau pour un meilleur contrôle
- Inférence CPU optimisée utilisant les instructions AVX
Installation de ctransformers
Pour installer ctransformers, utilisez simplement pip :
pip install ctransformers
Pour prendre en charge GPU, installez avec la variable d'environnement CT_CUBLAS
définie :
CT_CUBLAS=1 pip install ctransformers --no-binary ctransformers
Utilisation de base de ctransformers
La classe principale pour charger et exécuter des modèles est AutoModelForCausalLM
. Voici comment charger un modèle :
from ctransformers import AutoModelForCausalLM
# Chargement à partir d'un fichier local
llm = AutoModelForCausalLM.from_pretrained('path/to/ggml-model.bin', model_type='gpt2')
# Chargement à partir du Hugging Face Hub
llm = AutoModelForCausalLM.from_pretrained('marella/gpt-2-ggml')
L'argument model_type
spécifie le type de modèle chargé. Les options incluent gpt2
, gptj
, gpt_neox
, dolly-v2
, starcoder
, etc.
Pour générer du texte, il suffit d'appeler le modèle :
output = llm("L'IA va")
print(output)
Pour plus de contrôle, il existe une interface de génération :
tokens = llm.tokenize("L'IA va")
for token in llm.generate(tokens):
print(llm.detokenize(token))
Intégration de LangChain avec ctransformers
ctransformers fournit un wrapper pour utiliser des modèles avec le framework LangChain :
from ctransformers.langchain import CTransformers
llm = CTransformers(model='marella/gpt-2-ggml')
# Utilisation avec les primitives LangChain
from langchain import PromptTemplate, LLMChain
template = """Question : {question}
Réponse :"""
prompt = PromptTemplate(template=template, input_variables=['question'])
llm_chain = LLMChain(prompt=prompt, llm=llm)
question = "Qu'est-ce que l'IA ?"
print(llm_chain.run(question))
Exécution de modèles Llama
ctransformers peut exécuter les modèles Llama open source au format GGML. Voici un exemple utilisant le modèle Llama 2 :
from ctransformers import AutoModelForCausalLM
model_id = "TheBloke/Llama-2-7B-GGML"
config = {
'max_new_tokens': 256,
'repetition_penalty': 1.1,
'temperature': 0.1
}
llm = AutoModelForCausalLM.from_pretrained(
model_id,
model_type="llama",
config=config
)
prompt = "Écris un poème pour m'aider à retenir les 10 premiers éléments du tableau périodique"
output = llm(prompt)
print(output)
Cela charge le modèle Llama 2 de 7 milliards de paramètres converti au format GGML et génère un poème à partir du prompt donné.
Le dictionnaire config
permet de spécifier divers paramètres de génération comme le nombre maximal de jetons, la pénalité de répétition, la température, etc.
Conclusion
ctransformers offre un moyen facile et efficace d'exécuter de grands modèles de langage sur CPU en utilisant des implémentations optimisées en C/C++. Avec une API simple en Python, une intégration avec le Hugging Face Hub et LangChain, et une prise en charge de divers modèles, c'est un outil puissant pour construire des applications alimentées par les Transformers.
title: "La possibilité d'exécuter des modèles comme Llama 2 sur CPU avec des performances raisonnables ouvre de nouvelles perspectives pour le déploiement rentable et respectueux de l'environnement de grands modèles de langage. Alors que l'écosystème des modèles de transformation open-source continue de croître, des bibliothèques comme ctransformers joueront un rôle important pour les rendre accessibles et pratiques à utiliser." language: "fr"
La possibilité d'exécuter des modèles comme Llama 2 sur CPU avec des performances raisonnables ouvre de nouvelles perspectives pour le déploiement rentable et respectueux de l'environnement de grands modèles de langage. Alors que l'écosystème des modèles de transformation open-source continue de croître, des bibliothèques comme ctransformers joueront un rôle important pour les rendre accessibles et pratiques à utiliser.