Fortgeschrittene Deep-Learning-Modelle für NLP auf der Grundlage von Transformers liefern beeindruckende Ergebnisse, aber es ist schwierig, hohe Geschwindigkeit zu erreichen, ist schwierig. In diesem Artikel fassen wir die besten Optionen zusammen, die Sie haben, wenn Sie die Latenzzeit Ihrer Vorhersagen in der Produktion verringern möchten.
Wenn man die Geschwindigkeit von NLP-Modellen auf Transformer-Basis verbessern will, besteht der "naive" Ansatz darin, mehr fortschrittlichere Hardware.
n den meisten Fällen ist dies eine unvermeidliche Lösung, da rein softwarebasierte Lösungen alle ihre Grenzen haben. Stellen Sie sich vor, Sie führen Inferenzen auf einer CPU durch. Sie können wochenlang an der Low-Level-Optimierung für Ihr bevorzugtes Transformer-basiertes Modell arbeiten, ist es sehr wahrscheinlich, dass Sie trotzdem eine bessere Geschwindigkeitsverbesserung erzielen, wenn Sie Ihr Modell einfach auf eine NVIDIA A100-GPU WECHSELN.
Heutzutage sind die NVIDIA Tesla T4 und V100 die am weitesten verbreiteten GPUs für Inferenzen in der Produktion.
Was aber, wenn Sie Ihre Hardware bereits aufgerüstet haben? Oder was ist, wenn Ihr Budget begrenzt ist und Sie sich keine leisten können die letzten teuren GPUs zu nutzen? Lesen Sie das Folgende!
Bei der Batch-Inferenz geht es darum, mehrere Anfragen gleichzeitig an Ihr Modell zu senden, so dass es Ihre Anfragen alle auf einmal.
Die Batch-Inferenz ist sehr leistungsfähig, da Ihr Modell für die Bearbeitung mehrerer Anfragen fast die gleiche Zeit benötigt mehrere Anfragen zu bearbeiten, als für eine Anfrage. Unter der Haube werden einige Operationen faktorisiert, so dass so dass das Modell alles nur einmal machen muss, anstatt n-mal.
Technisch gesehen wird die Latenzzeit Ihrer Anfragen nicht verringert, da Ihre Anfragen nicht schneller bearbeitet werden. werden, aber der Durchsatz Ihrer Anwendung wird drastisch verbessert (Ihre Anwendung kann mehr kann mehr Anfragen mit der gleichen Hardware bearbeiten).
Die Batch-Inferenz ist jedoch nicht perfekt.
Erstens ist es nicht immer für Online-Inferenzen geeignet (d. h. für kundenorientierte Anwendungen), denn um Ihre Batches zu erstellen, müssen Sie einige Benutzeranfragen puffern, so dass einige Benutzer länger als üblich warten müssen.
2. Herausforderung: Batch-Inferenz funktioniert besser bei ähnlichen Anfragen. Wenn Sie zum Beispiel ein Textgenerierungs-NLP-Modell einsetzen, ist die Stapelverarbeitung effizienter, wenn Sie Stapel von Anfragen mit die die gleiche Länge haben.
Und schließlich wird die Batch-Inferenz nicht von Ihrem Deep-Learning-Modell selbst durchgeführt, sondern von einer höheren Schicht, etwa einem speziellen Inferenzserver. Es ist nicht immer einfach, eine solche Schicht zu implementieren. Für NVIDIAs Triton Inference Server (siehe unten) ist zum Beispiel sehr gut bei der Durchführung von Batch-Inferenz, aber Sie müssen jedoch zunächst einen Weg finden, Ihr Modell mit Triton kompatibel zu machen.
Sobald Sie Ihr Modell in Triton exportiert haben, ist die Batch-Inferenz denkbar einfach. Hier ist zum Beispiel wie Sie Stapel von bis zu 128 Anfragen erstellen und maximal 5 Sekunden warten, bevor Sie den Stapel (dies sollte in der Datei "config.pbtxt" festgelegt werden).
max_batch_size: 128
dynamic_batching {
max_queue_delay_microseconds: 5000000
}
Viele Leute und Firmen arbeiten hart an Optimierungen auf niedriger Ebene für einige Transformer-basierte NLP Modelle. Es kann eine gute Idee für Sie sein, diese benutzerdefinierten Implementierungen Ihres Modells zu nutzen.
Meistens sind diese benutzerdefinierten Implementierungen einfach zu verwenden und erfordern fast keine zusätzliche Arbeit von Ihnen. von Ihnen. Lassen Sie mich hier einige von ihnen erwähnen:
Hier ist ein Beispiel dafür, wie Sie dank DeepSpeed eine Inferenz für Ihr GPT Neo 2.7B Modell durchführen können. Das ist doch nicht allzu schwer, oder?
# Filename: gpt-neo-2.7b-generation.py
import os
import deepspeed
import torch
from transformers import pipeline
local_rank = int(os.getenv('LOCAL_RANK', '0'))
world_size = int(os.getenv('WORLD_SIZE', '1'))
generator = pipeline('text-generation', model='EleutherAI/gpt-neo-2.7B',
device=local_rank)
generator.model = deepspeed.init_inference(generator.model,
mp_size=world_size,
dtype=torch.float,
replace_method='auto')
string = generator("DeepSpeed is", do_sample=True, min_length=50)
if not torch.distributed.is_initialized() or torch.distributed.get_rank() == 0:
print(string)
Wenn Sie eine dieser benutzerdefinierten Implementierungen verwenden, vergessen Sie nicht, die Qualität Ihres neuen Modells gründlich zu testen. Modells zu testen, denn Sie können nie zu 100 % sicher sein, dass diese neuen Implementierungen keine Fehler enthalten.
Microsoft und NVIDIA haben beide an fortschrittlichen Inferenzmaschinen gearbeitet, um die Inferenzleistung Leistung zu verbessern.
ONNX Runtime (aka "ORT"), von Microsoft, ist ein plattformübergreifender Inferenz- und Trainingsbeschleuniger für maschinelles Lernen Beschleuniger. TensorRT (aka "TRT"), von NVIDIA, ist ein SDK für hochleistungsfähige Deep Learning Inferenz. Es umfasst einen Deep-Learning-Inferenzoptimierer und eine Laufzeitumgebung, die niedrige Latenzzeiten und hohen Durchsatz für Deep-Learning-Inferenzanwendungen.
Darüber hinaus ist der NVIDIA Triton Inference Server eine Inferenzsoftware, die die KI-Inferenz vereinfacht, indem sie die Bereitstellung von KI-Modellen aus verschiedenen Frameworks ermöglicht. Dank Triton können Sie zum Beispiel können Sie zum Beispiel problemlos Batch-Inferenzen durchführen, mehrere Deep-Learning-Modelle gleichzeitig auf demselben Grafikprozessor laufen lassen, Modelle auf mehreren GPUs einsetzen und vieles mehr.
Das klingt aufregend, aber so einfach ist es natürlich nicht... Damit Ihr Modell diese speziellen zu nutzen, müssen Sie zunächst Ihr vorhandenes Modell in ein geeignetes Format konvertieren.
Sie haben mehrere Möglichkeiten:
Wenn Sie mit den oben genannten Methoden spielen, sollten Sie sehr vorsichtig mit der Qualität Ihrer exportierten Modelle sein. Sie Sie denken vielleicht, dass Sie Ihr Modell erfolgreich exportiert haben, aber es ist möglich, dass Sie dabei etwas an Genauigkeit verloren haben. Sie sollten also sehr genau darauf achten, wie Sie Ihr neues exportiertes Modell testen.
Moderne transformatorbasierte NLP-Modelle liefern beeindruckende Ergebnisse, so dass immer mehr Unternehmen sie in der Produktion einsetzen wollen. Aber sehr oft scheint es, dass die Leistungen enttäuschend sind...
Es ist wichtig, die Geschwindigkeit Ihrer Vorhersagen zu verbessern, aber wie Sie oben sehen konnten, gibt es keine eine Einheitslösung.
Wenn Sie Fragen dazu haben, wie Sie Ihre Inferenz beschleunigen können, zögern Sie bitte nicht, uns zu kontaktieren!
Julien Salinas
CTO bei NLP Cloud