Beschleunigung der Transformer-Inferenz mit ctransformers
Published on
Einführung
In den letzten Jahren haben Transformer-basierte Sprachmodelle die natürliche Sprachverarbeitung revolutioniert und Durchbrüche bei Aufgaben wie Spracherzeugung, Fragebeantwortung und Textklassifikation ermöglicht. Diese Modelle sind jedoch oft extrem groß, mit Milliarden oder sogar Billionen von Parametern, was sie rechenintensiv macht, insbesondere auf der CPU.
ctransformers ist eine Python-Bibliothek, die zum Ziel hat, das Bereitstellen dieser großen Sprachmodelle effizienter und zugänglicher zu machen. Sie bietet Python-Bindungen für Transformer-Modelle, die in optimiertem C/C++-Code implementiert sind, und nutzt Techniken wie Quantisierung und die Verwendung von AVX-Anweisungen, um die Inferenz auf CPU-Hardware erheblich zu beschleunigen.
Mit ctransformers ist es möglich, Modelle wie GPT-2, GPT-J, GPT-NeoX, Llama und mehr mit nur wenigen Zeilen Python-Code zu laden und auszuführen. Die Bibliothek bietet eine einfache, einheitliche Schnittstelle für verschiedene Modelle, Integration mit dem Hugging Face Hub und dem LangChain-Framework sowie Zugriff auf Low-Level-APIs für eine genauere Steuerung.
Was ist ctransformers?
Im Hintergrund nutzt ctransformers die GGML-Bibliothek, eine Tensorbibliothek, die sich auf das Ausführen von ML-Modellen auf der CPU konzentriert. GGML bietet effiziente Implementierungen von gängigen Operationen wie Matrixmultiplikation, insbesondere für quantisierte Datentypen. Durch die Kombination von GGML mit modellspezifischen optimierten Kernels kann ctransformers beeindruckende Leistungen erzielen.
Eine der spannendsten Anwendungen von ctransformers ist die Möglichkeit, große Open-Source-Modelle wie Llama 2 auf handelsüblicher Hardware auszuführen. Dies eröffnet Möglichkeiten für kostengünstige und umweltfreundliche Bereitstellung großer Sprachmodelle und macht sie einer breiteren Palette von Benutzern und Anwendungen zugänglich.
In diesem Artikel werden wir uns mit den technischen Details von ctransformers befassen und seine Funktionen, Leistungsmerkmale und API erkunden. Wir werden Codebeispiele durchgehen, die zeigen, wie man Modelle lädt, Text generiert und mit LangChain integriert. Schließlich werden wir die Auswirkungen und Möglichkeiten effizienter CPU-Inferenz für die Zukunft von NLP und KI diskutieren.
Einige Hauptmerkmale von ctransformers:
- Einheitliche Schnittstelle zum Laden und Ausführen verschiedener Modelle
- Unterstützung beim Ausführen von Modellen aus dem Hugging Face Hub
- Integration mit dem LangChain-Framework
- Zugriff auf Low-Level-C-APIs für genauere Steuerung
- Optimierte CPU-Inferenz mithilfe von AVX-Anweisungen
Installation von ctransformers
Um ctransformers zu installieren, verwenden Sie einfach pip:
pip install ctransformers
Für GPU-Unterstützung installieren Sie mit der Umgebungsvariable CT_CUBLAS
:
CT_CUBLAS=1 pip install ctransformers --no-binary ctransformers
Grundlegende Verwendung von ctransformers
Die Hauptklasse zum Laden und Ausführen von Modellen ist AutoModelForCausalLM
. So laden Sie ein Modell:
from ctransformers import AutoModelForCausalLM
# Laden aus lokaler Datei
llm = AutoModelForCausalLM.from_pretrained('Pfad/zu/ggml-model.bin', model_type='gpt2')
# Laden aus dem Hugging Face Hub
llm = AutoModelForCausalLM.from_pretrained('marella/gpt-2-ggml')
Das Argument model_type
gibt den Typ des geladenen Modells an. Mögliche Optionen sind gpt2
, gptj
, gpt_neox
, dolly-v2
, starcoder
usw.
Um Text zu generieren, rufen Sie einfach das Modell auf:
output = llm("AI wird")
print(output)
Für mehr Kontrolle gibt es eine Generator-Schnittstelle:
tokens = llm.tokenize("AI wird")
for token in llm.generate(tokens):
print(llm.detokenize(token))
LangChain-Integration mit ctransformers
ctransformers bietet eine Wrapper-Funktion, um Modelle mit dem LangChain-Framework zu verwenden:
from ctransformers.langchain import CTransformers
llm = CTransformers(model='marella/gpt-2-ggml')
# Verwenden Sie LangChain-Primitives
from langchain import PromptTemplate, LLMChain
template = """Frage: {question}
Antwort: """
prompt = PromptTemplate(template=template, input_variables=['question'])
llm_chain = LLMChain(prompt=prompt, llm=llm)
question = "Was ist KI?"
print(llm_chain.run(question))
Ausführen von Llama-Modellen
ctransformers kann die Open-Source-Llama-Modelle im GGML-Format ausführen. Hier ist ein Beispiel für das Llama 2-Modell:
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 = "Schreibe ein Gedicht, um mir die ersten 10 Elemente im Periodensystem zu merken"
output = llm(prompt)
print(output)
Dies lädt das Llama 2-Modell mit 7B-Parametern im GGML-Format und generiert ein Gedicht basierend auf dem angegebenen Prompt.
Das config
-Wörterbuch ermöglicht das Festlegen verschiedener Generierungsparameter wie maximale Tokens, Wiederholungsstrafe, Temperatur usw.
Fazit
ctransformers bietet eine einfache und effiziente Möglichkeit, große Sprachmodelle auf der CPU mithilfe von optimierten C/C++-Implementierungen auszuführen. Mit einer einfachen Python-API, Integration mit dem Hugging Face Hub und LangChain sowie Unterstützung für verschiedene Modelle ist es ein leistungsstarkes Werkzeug zum Erstellen von Anwendungen auf Basis von Transformers. Die Möglichkeit, Modelle wie Llama 2 auf der CPU mit vernünftiger Leistung auszuführen, eröffnet neue Möglichkeiten für kostengünstige und umweltfreundliche Bereitstellung großer Sprachmodelle. Da das Ökosystem rund um Open-Source-Transformer-Modelle weiter wächst, werden Bibliotheken wie ctransformers eine wichtige Rolle dabei spielen, sie zugänglich und praktisch nutzbar zu machen.