Wie Amazon Search die ML-Inferenzkosten mit AWS Inferentia um 85 % senkte

Die Produktsuchmaschine von Amazon indiziert Milliarden von Produkten, bedient Hunderte Millionen Kunden weltweit und ist einer der am häufigsten genutzten Dienste der Welt. Das Team von Amazon Search entwickelt Technologie für maschinelles Lernen (ML), die die Amazon.com Suchmaschine und hilft Kunden mühelos bei der Suche. Um ein großartiges Kundenerlebnis zu bieten und in dem massiven Umfang zu operieren, der von der gefordert wird Amazon.com Suchmaschine ist dieses Team immer auf der Suche nach Möglichkeiten, kostengünstigere Systeme mit Latenz- und Durchsatzanforderungen in Echtzeit zu erstellen. Das Team untersucht ständig Hardware und Compiler, die für Deep Learning optimiert sind, um Modelltraining und Inferenz zu beschleunigen und gleichzeitig die Betriebskosten auf ganzer Linie zu senken.

In diesem Beitrag beschreiben wir, wie Amazon Search verwendet AWS-Inferenz, ein Hochleistungsbeschleuniger, der von AWS entwickelt wurde, um Deep-Learning-Inferenz-Workloads zu beschleunigen. Das Team führt ML-Inferenz mit niedriger Latenz mit Transformer-basierten NLP-Modellen auf AWS Inferentia-basiert aus Amazon Elastic Compute-Cloud (Amazon EC2) Inf1-Instanzen und spart bis zu 85 % der Infrastrukturkosten ein, während gleichzeitig ein starker Durchsatz und eine hohe Latenzleistung aufrechterhalten werden.

Deep Learning für die Vorhersage von Duplikaten und Abfrageabsichten

Das Durchsuchen des Amazon Marketplace ist ein multimodales Multitasking-Problem, bei dem mehrere Eingaben wie ASINs (Amazon Standard Identification Number, eine 10-stellige alphanumerische Nummer, die Produkte eindeutig identifiziert), Produktbilder, Textbeschreibungen und Abfragen verarbeitet werden. Um eine maßgeschneiderte Benutzererfahrung zu schaffen, werden Vorhersagen aus vielen Modellen für verschiedene Aspekte der Suche verwendet. Dies ist eine Herausforderung, da das Suchsystem Tausende von Modellen mit Zehntausenden von Transaktionen pro Sekunde (TPS) bei Spitzenlast hat. Wir konzentrieren uns auf zwei Komponenten dieser Erfahrung:

  • Vom Kunden wahrgenommene doppelte Vorhersagen – Um die relevanteste Liste von Produkten anzuzeigen, die der Suchanfrage eines Benutzers entsprechen, ist es wichtig, Produkte zu identifizieren, zwischen denen Kunden nur schwer unterscheiden können
  • Vorhersage der Abfrageabsicht – Um die Suchseite und das Produktlayout besser an das anzupassen, wonach der Kunde sucht, ist es wichtig, die Absicht und Art der Suchanfrage des Benutzers vorherzusagen (z. B. eine medienbezogene Suchanfrage, eine Hilfeanfrage und andere Suchanfragen).

Beide Vorhersagen werden unter Verwendung von Transformer-Modellarchitekturen gemacht, nämlich BERT-basierten Modellen. Tatsächlich teilen sich beide dasselbe BERT-basierte Modell als Grundlage, und jedes stapelt einen Klassifikations-/Regressionskopf auf dieses Rückgrat.

Die Duplikatvorhersage berücksichtigt verschiedene Textmerkmale für ein Paar bewerteter Produkte als Eingaben (z. B. Produkttyp, Titel, Beschreibung usw.) und wird für große Datensätze regelmäßig berechnet. Dieses Modell wird durchgängig in einer Multitasking-Manier trainiert. Amazon SageMaker Processing-Jobs werden verwendet, um diese Batch-Workloads regelmäßig auszuführen, um ihren Start zu automatisieren und nur für die verwendete Verarbeitungszeit zu bezahlen. Für diesen Batch-Workload-Anwendungsfall betrug die Anforderung für den Inferenzdurchsatz insgesamt 8,800 TPS.

Die Absichtsvorhersage nimmt die Textabfrage des Benutzers als Eingabe und wird in Echtzeit benötigt, um den täglichen Datenverkehr dynamisch zu bedienen und die Benutzererfahrung auf dem Amazon Marketplace zu verbessern. Das Modell wird auf ein Klassifikationsziel mit mehreren Klassen trainiert. Dieses Modell wird dann eingesetzt Amazon Elastic Container-Service (Amazon ECS), das eine schnelle automatische Skalierung ermöglicht und einfache Bereitstellungsdefinition und -verwaltung. Da es sich um einen Echtzeit-Anwendungsfall handelt, musste die P99-Latenz unter 10 Millisekunden liegen, um ein angenehmes Benutzererlebnis zu gewährleisten.

AWS Inferentia und das AWS Neuron SDK

EC2 Inf1-Instances werden von AWS Inferentia unterstützt, dem ersten ML-Beschleuniger, der speziell von AWS entwickelt wurde, um Deep-Learning-Inferenz-Workloads zu beschleunigen. Inf1-Instances liefern einen bis zu 2.3-mal höheren Durchsatz und bis zu 70 % niedrigere Kosten pro Inferenz als vergleichbare GPU-basierte EC2-Instances. Sie können Ihre Modelle weiterhin mit dem Framework Ihrer Wahl (PyTorch, TensorFlow, MXNet) trainieren und sie dann einfach auf AWS Inferentia bereitstellen, um von den integrierten Leistungsoptimierungen zu profitieren. Sie können mithilfe von Inf1-Instanzen eine Vielzahl von Modelltypen bereitstellen, von Bilderkennung, Objekterkennung, Verarbeitung natürlicher Sprache (NLP) bis hin zu modernen Empfehlungsmodellen.

AWS-Neuron ist ein Software Development Kit (SDK), das aus einem Compiler, einer Laufzeit und Profilierungstools besteht, die die ML-Inferenzleistung der EC2 Inf1-Instances optimieren. Neuron ist nativ in beliebte ML-Frameworks wie TensorFlow und PyTorch integriert. Daher können Sie Deep-Learning-Modelle auf AWS Inferentia mit den gleichen vertrauten APIs bereitstellen, die von Ihrem Framework Ihrer Wahl bereitgestellt werden, und von der Leistungssteigerung und den niedrigsten Kosten pro Inferenz in der Cloud profitieren.

Seit seiner Markteinführung hat das Neuron SDK die Breite der unterstützten Modelle kontinuierlich erweitert und gleichzeitig die Leistung verbessert und die Inferenzkosten gesenkt. Dazu gehören NLP-Modelle (BERTs), Bildklassifizierungsmodelle (ResNet, VGG) und Objekterkennungsmodelle (OpenPose und SSD).

Bereitstellung auf Inf1-Instances für geringe Latenz, hohen Durchsatz und Kosteneinsparungen

Das Amazon Search-Team wollte Kosten sparen und gleichzeitig die Anforderungen an den hohen Durchsatz bei der Vorhersage von Duplikaten und die Anforderungen an die niedrige Latenz bei der Vorhersage der Abfrageabsicht erfüllen. Sie entschieden sich für die Bereitstellung auf AWS Inferentia-basierten Inf1-Instances und erfüllten nicht nur die hohen Leistungsanforderungen, sondern sparten auch bis zu 85 % an Inferenzkosten.

Vom Kunden wahrgenommene doppelte Vorhersagen

Vor der Verwendung von Inf1 wird eine dedizierte Amazon EMR Cluster wurde mit CPU-basierten Instanzen ausgeführt. Ohne auf Hardwarebeschleunigung angewiesen zu sein, war eine große Anzahl von Instanzen erforderlich, um die hohe Durchsatzanforderung von insgesamt 8,800 Transaktionen pro Sekunde zu erfüllen. Das Team wechselte zu inf1.6xlarge-Instances mit jeweils 4 AWS Inferentia-Beschleunigern und 16 NeuronCores (4 Kerne pro AWS Inferentia-Chip). Sie verfolgten das Transformer-basierte Modell für einen einzelnen NeuronCore und luden einen Modus pro NeuronCore, um den Durchsatz zu maximieren. Durch die Nutzung der 16 verfügbaren NeuronCores konnten die Inferenzkosten um 85 % gesenkt werden (basierend auf den aktuellen öffentlichen Amazon EC2-On-Demand-Preisen).

Vorhersage der Abfrageabsicht

Angesichts der P99-Latenzanforderung von 10 Millisekunden oder weniger lud das Team das Modell auf jeden verfügbaren NeuronCore auf inf1.6xlarge-Instanzen. Sie können dies ganz einfach mit PyTorch Neuron tun, indem Sie die verwenden Torch.neuron.DataParallel API. Bei der Inf1-Bereitstellung betrug die Modelllatenz 3 Millisekunden, die End-to-End-Latenz etwa 10 Millisekunden und der maximale Durchsatz bei Spitzenlast erreichte 16,000 TPS.

Beginnen Sie mit Beispielkompilierung und Bereitstellungscode

Im Folgenden finden Sie einige Beispielcodes, die Ihnen den Einstieg in Inf1-Instances erleichtern und die Leistungs- und Kostenvorteile wie das Amazon Search-Team realisieren sollen. Wir zeigen, wie man Inferenzen mit einem PyTorch-Modell kompiliert und durchführt PyTorch-Neuron.

Zunächst wird das Modell mit kompiliert torch.neuron.trace():

m = torch.jit.load(f="./cpu_model.pt", map_location=torch.device('cpu'))
m.eval()
model_neuron = torch.neuron.trace(
    m,
    inputs,
    compiler_workdir="work_" + str(cores) + "_" + str(batch_size),
    compiler_args=[
        '--fp32-cast=all', '--neuroncore-pipeline-cores=' + str(cores)
    ])
model_neuron.save("m5_batch" + str(batch_size) + "_cores" + str(cores) +
                  "_with_extra_op_and_fp32cast.pt")

Für die vollständige Liste möglicher Argumente für die trace Methode siehe PyTorch-Neuron-Trace-Python-API. Wie du siehst, Compiler-Argumente kann an die übergeben werden torch.neuron API direkt. Alle FP32-Operatoren werden gecastet BF16 with --fp32-cast=all, das die höchste Leistung bietet und gleichzeitig den Dynamikbereich beibehält. Es stehen weitere Casting-Optionen zur Verfügung, mit denen Sie die Leistung steuern können, um einen Kompromiss zwischen der Modellpräzision zu erzielen. Die für beide Anwendungsfälle verwendeten Modelle wurden für einen einzelnen NeuronCore (Nr Pipelining).

Anschließend laden wir das Modell auf Inferentia mit torch.jit.load, und verwenden Sie es für die Vorhersage. Das Laufzeit des Neurons lädt das Modell automatisch in NeuronCores.

cm_cpd_preprocessing_jit = torch.jit.load(f=CM_CPD_PROC,
                                          map_location=torch.device('cpu'))
cm_cpd_preprocessing_jit.eval()
m5_model = torch.jit.load(f=CM_CPD_M5)
m5_model.eval()

input = get_input()
with torch.no_grad():
    batch_cm_cpd = cm_cpd_preprocessing_jit(input)
    input_ids, attention_mask, position_ids, valid_length, token_type_ids = (
        batch_cm_cpd['input_ids'].type(torch.IntTensor),
        batch_cm_cpd['attention_mask'].type(torch.HalfTensor),
        batch_cm_cpd['position_ids'].type(torch.IntTensor),
        batch_cm_cpd['valid_length'].type(torch.IntTensor),
        batch_cm_cpd['token_type_ids'].type(torch.IntTensor))
    model_res = m5_model(input_ids, attention_mask, position_ids, valid_length,
                         token_type_ids)

Zusammenfassung

Das Amazon Search-Team konnte seine Inferenzkosten um 85 % reduzieren, indem es AWS Inferentia-basierte Inf1-Instances bei starkem Datenverkehr und anspruchsvollen Leistungsanforderungen verwendete. AWS Inferentia und das Neuron SDK gaben dem Team die Flexibilität, den Bereitstellungsprozess getrennt von der Schulung zu optimieren, und stellten eine flache Lernkurve durch abgerundete Tools und vertraute Framework-APIs dar.

Sie können Leistungs- und Kostenvorteile erschließen, indem Sie mit dem in diesem Beitrag bereitgestellten Beispielcode beginnen. Schauen Sie sich auch das End-to-End an Tutorials um ML-Modelle auf Inferentia auszuführen PyTorch und TensorFlow.


Über die Autoren

Wie Amazon Search die ML-Inferenzkosten mit AWS Inferentia PlatoBlockchain Data Intelligence um 85 % reduzierte. Vertikale Suche. Ai.Joao Moura ist AI/ML Specialist Solutions Architect bei Amazon Web Services. Er konzentriert sich hauptsächlich auf NLP-Anwendungsfälle und hilft Kunden, das Training und die Bereitstellung von Deep-Learning-Modellen zu optimieren. Er ist auch ein aktiver Befürworter von auf ML spezialisierter Hardware und Low-Code-ML-Lösungen.

Wie Amazon Search die ML-Inferenzkosten mit AWS Inferentia PlatoBlockchain Data Intelligence um 85 % reduzierte. Vertikale Suche. Ai.Weiqi Zhang ist Software Engineering Manager bei Search M5, wo er an der Produktion umfangreicher Modelle für maschinelle Lernanwendungen von Amazon arbeitet. Seine Interessen umfassen Information Retrieval und Infrastruktur für maschinelles Lernen.

Wie Amazon Search die ML-Inferenzkosten mit AWS Inferentia PlatoBlockchain Data Intelligence um 85 % reduzierte. Vertikale Suche. Ai.Jason Carlson ist ein Softwareingenieur für die Entwicklung von Pipelines für maschinelles Lernen, um die Anzahl gestohlener Suchimpressionen aufgrund von Kunden wahrgenommener Duplikate zu reduzieren. Er arbeitet hauptsächlich mit Apache Spark, AWS und PyTorch, um bei der Bereitstellung und Eingabe/Verarbeitung von Daten für ML-Modelle zu helfen. In seiner Freizeit liest er gerne und geht joggen.

Wie Amazon Search die ML-Inferenzkosten mit AWS Inferentia PlatoBlockchain Data Intelligence um 85 % reduzierte. Vertikale Suche. Ai.Shaohui Xi ist SDE im Search Query Understanding Infra-Team. Er leitet die Bemühungen zum Aufbau groß angelegter Deep-Learning-Online-Inferenzdienste mit geringer Latenz und hoher Verfügbarkeit. Außerhalb der Arbeit fährt er gerne Ski und erkundet gutes Essen.

Wie Amazon Search die ML-Inferenzkosten mit AWS Inferentia PlatoBlockchain Data Intelligence um 85 % reduzierte. Vertikale Suche. Ai.Zhuoqi Zhang ist Software Development Engineer im Team Search Query Understanding Infra. Er arbeitet an der Erstellung von Model-Serving-Frameworks zur Verbesserung von Latenz und Durchsatz für Deep-Learning-Online-Inferenzdienste. Außerhalb der Arbeit spielt er gerne Basketball, fährt Snowboard und fährt Auto.

Wie Amazon Search die ML-Inferenzkosten mit AWS Inferentia PlatoBlockchain Data Intelligence um 85 % reduzierte. Vertikale Suche. Ai.Haowei Sonne ist Softwareentwickler im Search Query Understanding Infra-Team. Sie arbeitet an der Entwicklung von APIs und Infrastrukturen zur Unterstützung von Deep-Learning-Online-Inferenzdiensten. Ihre Interessen umfassen Service-API-Design, Infrastruktureinrichtung und Wartung. Außerhalb der Arbeit läuft, wandert und reist sie gerne.

Wie Amazon Search die ML-Inferenzkosten mit AWS Inferentia PlatoBlockchain Data Intelligence um 85 % reduzierte. Vertikale Suche. Ai.Jaspreet Singh ist ein angewandter Wissenschaftler im M5-Team, wo er an groß angelegten Grundlagenmodellen arbeitet, um das Einkaufserlebnis der Kunden zu verbessern. Seine Forschungsinteressen umfassen Multitasking-Lernen, Information Retrieval und Repräsentationslernen.

Wie Amazon Search die ML-Inferenzkosten mit AWS Inferentia PlatoBlockchain Data Intelligence um 85 % reduzierte. Vertikale Suche. Ai.Shruti Koparkar ist Senior Product Marketing Manager bei AWS. Sie hilft Kunden bei der Erkundung, Bewertung und Einführung der beschleunigten EC2-Computing-Infrastruktur für ihre Anforderungen an maschinelles Lernen.

Zeitstempel:

Mehr von AWS Maschinelles Lernen