
Bild von Editor | Chatgpt# Einführung
Umarmtes Gesicht ist für viele AI -Entwickler und Datenwissenschaftler zum Commonplace geworden, da es die Barriere für die Arbeit mit fortgeschrittener KI drastisch senkt. Anstatt mit KI -Modellen von Grund auf zu arbeiten, können Entwickler auf eine breite Palette von vorbereiteten Modellen ohne Probleme zugreifen. Benutzer können diese Modelle auch mit benutzerdefinierten Datensätzen anpassen und schnell bereitstellen.
Einer der umarmenden Gesichtsgerüst -API -Wrapper ist die Transformatoren -PipelinesEine Reihe von Paketen, die aus dem vorbereiteten Modell, seinem Tokenizer, seiner Vor- und Nachbearbeitung und zugehörigen Komponenten bestehen, um einen KI-Anwendungsfall zu erstellen. Diese Pipelines abstrakten komplexen Code und bieten eine einfache, nahtlose API.
Die Arbeit mit Transformatoren -Pipelines kann jedoch chaotisch werden und kann möglicherweise keine optimale Pipeline ergeben. Aus diesem Grund werden wir fünf verschiedene Möglichkeiten untersuchen, wie Sie Ihre Transformers -Pipelines optimieren können.
Lassen Sie uns darauf eingehen.
# 1. Batch -Inferenzanfragen
Bei Verwendung von Transformatoren -Pipelines verwenden wir häufig die Grafikverarbeitungseinheit (GPU) nicht vollständig. Die Batch -Verarbeitung mehrerer Eingänge kann die GPU -Nutzung erheblich verbessern und die Inferenzeffizienz verbessern.
Anstatt jeweils eine Probe zu verarbeiten, können Sie die Pipeline verwenden batch_size Parameter oder eine Liste von Eingängen übergeben, damit das Modell mehrere Eingänge in einem Vorwärtspass verarbeitet. Hier ist ein Codebeispiel:
from transformers import pipeline
pipe = pipeline(
job="text-classification",
mannequin="distilbert-base-uncased-finetuned-sst-2-english",
device_map="auto"
)
texts = (
"Nice product and quick supply!",
"The UI is complicated and gradual.",
"Assist resolved my subject shortly.",
"Not well worth the worth."
)
outcomes = pipe(texts, batch_size=16, truncation=True, padding=True)
for r in outcomes:
print(r)
Durch Batching -Anfragen können Sie einen höheren Durchsatz mit nur minimalen Auswirkungen auf die Latenz erzielen.
# 2. Verwenden Sie eine geringere Präzision und Quantisierung
Viele vorbereitete Modelle versagen inferenz, da Entwicklungs- und Produktionsumgebungen nicht genügend Speicher haben. Eine niedrigere numerische Präzision hilft bei der Verringerung des Speicherverbrauchs und beschleunigt die Schlussfolgerung, ohne viel Genauigkeit zu beeinträchtigen.
Hier finden Sie beispielsweise, wie Sie die halbe Präzision der GPU in einer Transformatoren -Pipeline verwenden:
import torch
from transformers import AutoModelForSequenceClassification
mannequin = AutoModelForSequenceClassification.from_pretrained(
model_id,
torch_dtype=torch.float16
)
In ähnlicher Weise können Quantisierungstechniken Modellgewichte komprimieren, ohne die Leistung merklich zu verschlechtern:
# Requires bitsandbytes for 8-bit quantization
from transformers import AutoModelForCausalLM
mannequin = AutoModelForCausalLM.from_pretrained(
model_id,
load_in_8bit=True,
device_map="auto"
)
Durch die Verwendung niedrigerer Präzision und Quantisierung der Produktion wird normalerweise die Pipelines beschleunigt und die Speicherverwendung verringert, ohne die Modellgenauigkeit erheblich zu beeinflussen.
# 3. Wählen Sie effiziente Modellarchitekturen
In vielen Anwendungen benötigen Sie nicht das größte Modell, um die Aufgabe zu lösen. Die Auswahl einer leichteren Transformatorarchitektur, wie z. B. ein destilliertes Modell, ergibt häufig eine bessere Latenz und Durchsatz mit einem akzeptablen Kompromiss der Genauigkeit.
Kompaktmodelle oder destillierte Versionen, wie z. Distilbertbehalten Sie den größten Teil der Genauigkeit des ursprünglichen Modells, jedoch mit weitaus weniger Parametern, was zu einer schnelleren Folgerung führt.
Wählen Sie ein Modell, dessen Architektur für Inferenz optimiert ist und entspricht den Genauigkeitsanforderungen Ihrer Aufgabe.
# 4. Nutzen Sie das Caching
Viele Systemverschwendung berechnen sich, indem sie teure Arbeiten wiederholen. Das Caching kann die Leistung erheblich verbessern, indem die Ergebnisse kostspieliger Berechnungen wiederverwendet werden.
with torch.inference_mode():
output_ids = mannequin.generate(
**inputs,
max_new_tokens=120,
do_sample=False,
use_cache=True
)
Effizientes Caching verkürzt die Rechenzeit und verbessert die Reaktionszeiten und senkt die Latenz in Produktionssystemen.
# 5. Verwenden Sie eine beschleunigte Laufzeit über Optimum (ONNX -Laufzeit)
Viele Pipelines laufen in einem Pytorch Nicht so optimaler Modus, der Python-Overhead- und zusätzliche Speicherkopien hinzufügt. Verwendung Optimum mit Open Neural Community Alternate (ONNX) Laufzeit – über Onnx -Laufzeit – Konvertiert das Modell in einen statischen Graphen- und verschützt, sodass die Laufzeit schnellere Kerne auf einer zentralen Verarbeitungseinheit (CPU) oder einer GPU mit weniger Overhead verwenden kann. Das Ergebnis ist normalerweise eine schnellere Inferenz, insbesondere bei CPU oder gemischter {Hardware}, ohne wie Sie die Pipeline aufrufen.
Installieren Sie die erforderlichen Pakete mit:
pip set up -U transformers optimum(onnxruntime) onnxruntime
Konvertieren Sie dann das Modell mit solchen Code:
from optimum.onnxruntime import ORTModelForSequenceClassification
ort_model = ORTModelForSequenceClassification.from_pretrained(
model_id,
from_transformers=True
)
Indem Sie die Pipeline in ONNX -Laufzeit über optimum konvertieren, können Sie Ihren vorhandenen Pipeline -Code beibehalten und gleichzeitig eine geringere Latenz und eine effizientere Schlussfolgerung erhalten.
# Einpacken
Transformers Pipelines ist ein API -Wrapper im umarmenden Gesichtsgerüst, der die Entwicklung der AI -Anwendung erleichtert, indem komplexe Code in einfachere Schnittstellen kondensiert. In diesem Artikel haben wir fünf Tipps untersucht, um die Pipelines der Umarmung von Gesichtstransformatoren zu optimieren, von Batch -Inferenzanfragen über die Auswahl effizienter Modellarchitekturen bis hin zur Nutzung von Caching und darüber hinaus.
Ich hoffe das hat geholfen!
Cornellius Yudha Wijaya ist ein Information Science Assistant Supervisor und Datenautor. Während er in Vollzeit bei Allianz Indonesien arbeitet, liebt er es, Python- und Datentipps über soziale Medien und das Schreiben von Medien zu teilen. Cornellius schreibt über eine Vielzahl von KI- und maschinellen Lernthemen.
