Das Sprachmodell (LLM) ist nicht unbedingt der letzte Schritt zur Herstellung Ihrer generativen KI -Anwendung. Ein oft vergessener und dennoch entscheidender Teil des Mlops -Lebenszyklus ist richtig Lastprüfung Ihr LLM und sicherstellen, dass es bereit ist, Ihrem erwarteten Produktionsverkehr standzuhalten. Lasttests auf hohem Niveau sind die Praxis, Ihre Anwendung zu testen, oder in diesem Fall Ihr Modell mit dem Verkehr, den es in einer Produktionsumgebung erwarten würde, um sicherzustellen, dass es sich um eine Leistung handelt.

In der Vergangenheit haben wir besprochen Lastprüfung herkömmliche ML -Modelle Verwenden von Open -Supply -Python -Instruments wie z. Heuschrecke. Locust hilft bei der Erfassung allgemeiner Leistungsmetriken wie Anfragen professional Sekunde (RPS) und Latenzprozentile professional Anforderungsbasis. Dies ist zwar mit traditionelleren API- und ML -Modellen effektiv, erfasst zwar nicht die ganze Geschichte für LLMs.

LLMs haben traditionell eine viel niedrigere RPS und eine höhere Latenz als herkömmliche ML -Modelle aufgrund ihrer Größe und größeren Berechnung. Im Allgemeinen liefert die RPS -Metrik nicht wirklich das genaueste Bild, da die Anforderungen je nach Eingabe in die LLM stark variieren können. Zum Beispiel könnten Sie eine Frage haben, in der Sie bitten, einen großen Textback und eine andere Abfrage zusammenzufassen, die möglicherweise eine Ein-Wort-Antwort erfordern.

Deshalb Token werden als eine viel genauere Darstellung der Leistung eines LLM angesehen. Auf einem Token mit hohem Niveau ist ein Textanteil, wenn ein LLM Ihre Eingabe verarbeitet, die Eingabe „tokenisiert“. Ein Token unterscheidet sich je nach LLM, die Sie verwenden, aber Sie können es sich zum Beispiel als Wort, eine Abfolge von Wörtern oder Zeichen im Wesentlichen vorstellen.

Bild des Autors

In diesem Artikel werden wir erforschen, wie wir Token -basierte Metriken generieren können, damit wir verstehen können, wie sich Ihre LLM aus Sicht der Servier-/Bereitstellungsperspektive erbringt. Nach diesem Artikel haben Sie eine Vorstellung davon, wie Sie ein Lasttest-Instrument speziell einrichten können, um verschiedene LLMs zu reduzieren, wenn Sie viele Modelle oder verschiedene Bereitstellungskonfigurationen oder eine Kombination aus beiden bewerten.

Lass uns die Hände bekommen! Wenn Sie eher ein Video -basierter Lernender sind, können Sie mein entsprechendes YouTube -Video unten folgen:

https://www.youtube.com/watch?v=abirlc9Glue

NOTIZ: Dieser Artikel setzt ein grundlegendes Verständnis von Python, LLMs und Amazon Berbrock/Sagemaker aus. Wenn Sie neu im Amazon -Grundgestein sind Hier. Wenn Sie mehr über Sagemaker Jumpstart LLM -Bereitstellungen erfahren möchten Hier.

HAFTUNGSAUSSCHLUSS: Ich bin ein maschinelles Lernarchitekt bei AWS und meine Meinungen sind meine eigenen.

Inhaltsverzeichnis

  1. LLM spezifische Metriken
  2. LLMperf Intro
  3. LLMPERF auf Amazon -Grundgestein auftragen
  4. Zusätzliche Ressourcen und Schlussfolgerung

LLM-spezifische Metriken

Wie wir in der Einführung in Bezug auf LLM -Internet hosting kurz erörtert haben, bieten Token -basierte Metriken im Allgemeinen eine viel bessere Darstellung, wie Ihr LLM auf verschiedene Nutzlastgrößen oder Arten von Abfragen reagiert (Summarization vs qna).

Traditionell haben wir immer noch RPS und Latenz verfolgt, die wir hier noch sehen werden, aber mehr auf einem Token -Niveau. Hier sind einige der Metriken, die Sie sich bewusst sind, bevor wir mit Lasttests beginnen:

  1. Zeit zum ersten Token: Dies ist die Dauer, die das erste Token zum Erzeugen benötigt. Dies ist besonders praktisch beim Streamen. Wenn Sie beispielsweise ChatGPT verwenden, beginnen wir mit der Verarbeitung von Informationen, wenn der erste Textstück (Token) erscheint.
  2. Gesamtausgangs -Token professional Sekunde: Dies ist die Gesamtzahl der professional Sekunde generierten Token.

Dies sind die wichtigsten Metriken, auf die wir uns konzentrieren werden, und es gibt einige andere, wie z. Beachten Sie die Parameter, die diese Metriken auch beeinflussen, die erwartete Eingabe- und Ausgangs -Token -Größe. Wir spielen speziell mit diesen Parametern, um ein genaues Verständnis dafür zu erhalten, wie unser LLM als Reaktion auf verschiedene Aufgaben der Technology ausgeführt wird.

Schauen wir uns nun ein Instrument an, mit dem wir diese Parameter umschalten und die relevanten Metriken anzeigen können, die wir benötigen.

LLMperf Intro

Llmperf ist oben aufgebaut Strahlein beliebtes verteiltes Computing -Python -Framework. LLMPERF nutzt den Strahl speziell, um verteilte Lasttests zu erstellen, bei denen wir den Verkehr in Echtzeit-Produktionsniveau simulieren können.

Beachten Sie, dass ein Instrument für Lasttests auch nur in der Lage sein wird, Ihre erwartete Datenmenge zu generieren, wenn der Consumer-Pc, auf dem sie sich befindet, über genügend Rechenleistung verfügt, um Ihre erwartete Final zu entsprechen. Wenn Sie beispielsweise die für Ihr Modell erwartete Parallelitäts- oder Durchsatz skalieren, möchten Sie auch die Consumer -Maschine (en), in der Sie Ihren Lasttest ausführen.

Jetzt speziell im Inneren Llmperf Es gibt einige Parameter, die aufgedeckt werden, die auf LLM -Lasttests zugeschnitten sind, wie wir besprochen haben:

  • Modell: Dies ist der Modellanbieter und Ihr gehostetes Modell, mit dem Sie zusammenarbeiten. Für unseren Anwendungsfall wird es sein Amazonas Grundgestein Und Claude 3 Sonett speziell.
  • LLM API: Dies ist das API -Format, in dem die Nutzlast strukturiert werden sollte. Wir verwenden Litellm Dies bietet eine standardisierte Nutzlaststruktur für verschiedene Modellanbieter und vereinfacht so den Setup -Prozess für uns, insbesondere wenn wir verschiedene Modelle testen möchten, die auf verschiedenen Plattformen gehostet werden.
  • Eingangs -Token: Durch die mittlere Eingangs -Token -Länge können Sie auch eine Standardabweichung für diese Zahl angeben.
  • Ausgangstoken: Die mittlere Ausgangs -Token -Länge können Sie auch eine Standardabweichung für diese Zahl angeben.
  • Gleichzeitige Anfragen: Die Anzahl der gleichzeitigen Anforderungen für den Simulieren des Lasttests.
  • Testdauer: Sie können die Dauer des Exams steuern, dieser Parameter ist in Sekunden aktiviert.

LLMperf enthält speziell alle diese Parameter durch ihre token_benchmark_ray.py Skript, das wir mit unseren spezifischen Werten konfigurieren. Schauen wir uns nun an, wie wir dies speziell für Amazon -Grundgestein konfigurieren können.

LLMPERF auf Amazon -Grundgestein auftragen

Aufstellen

In diesem Beispiel werden wir in einem arbeiten Sagemaker Basic Pocket book -Instanz mit a conda_python3 kernel Und ml.g5.12xlarge Beispiel. Beachten Sie, dass Sie eine Instanz auswählen möchten, die genügend Berechnung enthält, um die Verkehrslast zu generieren, die Sie simulieren möchten. Stellen Sie sicher, dass Sie auch Ihre haben AWS -Anmeldeinformationen Damit LLMPERF auf das gehostete Modell zugreifen kann, sei es auf Grundgestein oder Sagemaker.

Litellm -Konfiguration

Wir konfigurieren zunächst unsere LLM -API -Struktur der Wahl, die in diesem Fall LitellM ist. Mit LitellM gibt es Unterstützung bei verschiedenen Modellanbietern, in diesem Fall konfigurieren wir die Fertigstellung API Mit Amazon -Grundgestein arbeiten:

import os
from litellm import completion

os.environ("AWS_ACCESS_KEY_ID") = "Enter your entry key ID"
os.environ("AWS_SECRET_ACCESS_KEY") = "Enter your secret entry key"
os.environ("AWS_REGION_NAME") = "us-east-1"

response = completion(
    mannequin="anthropic.claude-3-sonnet-20240229-v1:0",
    messages=({ "content material": "Who's Roger Federer?","function": "consumer"})
)
output = response.decisions(0).message.content material
print(output)

Um mit dem Grundgestein zu arbeiten, konfigurieren wir die Modell -ID so, dass wir auf Claude 3 Sonett hinweisen und unsere Eingabeaufforderung übergeben. Der nette Teil mit Litellm ist, dass der Nachrichtenschlüssel ein konsistentes Format über Modellanbieter hinweg hat.

Nach der Ausnahme können wir uns auf die Konfiguration von LLMperf für Grundgestein konzentrieren.

LLMperf Grundgesteinintegration

Um einen Lasttest mit LLMperf auszuführen token_benchmark_ray.py Skript und Übergeben in den folgenden Parametern, von denen wir früher gesprochen haben:

  • Eingangs -Token Mittel- und Standardabweichung
  • Ausgangs -Token Mittel- und Standardabweichung
  • Maximale Anzahl von Testanfragen
  • Testdauer
  • Gleichzeitige Anfragen

In diesem Fall geben wir auch unser API -Format an, um LitellM zu sein, und können den Lasttest mit einem einfachen Shell -Skript wie folgt ausführen:

%%sh
python llmperf/token_benchmark_ray.py 
    --model bedrock/anthropic.claude-3-sonnet-20240229-v1:0 
    --mean-input-tokens 1024 
    --stddev-input-tokens 200 
    --mean-output-tokens 1024 
    --stddev-output-tokens 200 
    --max-num-completed-requests 30 
    --num-concurrent-requests 1 
    --timeout 300 
    --llm-api litellm 
    --results-dir bedrock-outputs

In diesem Fall halten wir die Parallelität niedrig. Sie können diese Zahl jedoch nicht umschalten, je nachdem, was Sie in der Produktion erwarten. Unser Take a look at wird für 300 Sekunden ausgeführt. Nach der Dauer sollten Sie ein Ausgabeverzeichnis mit zwei Dateien sehen, die Statistiken für jede Inferenz und auch die mittleren Metriken über alle Anforderungen in der Dauer des Exams hinweg darstellen.

Wir können diesen Look zu einem kleinen Kerner machen, indem wir die Zusammenfassungsdatei mit Pandas analysieren:

import json
from pathlib import Path
import pandas as pd

# Load JSON information
individual_path = Path("bedrock-outputs/bedrock-anthropic-claude-3-sonnet-20240229-v1-0_1024_1024_individual_responses.json")
summary_path = Path("bedrock-outputs/bedrock-anthropic-claude-3-sonnet-20240229-v1-0_1024_1024_summary.json")

with open(individual_path, "r") as f:
    individual_data = json.load(f)

with open(summary_path, "r") as f:
    summary_data = json.load(f)

# Print abstract metrics
df = pd.DataFrame(individual_data)
summary_metrics = {
    "Mannequin": summary_data.get("mannequin"),
    "Imply Enter Tokens": summary_data.get("mean_input_tokens"),
    "Stddev Enter Tokens": summary_data.get("stddev_input_tokens"),
    "Imply Output Tokens": summary_data.get("mean_output_tokens"),
    "Stddev Output Tokens": summary_data.get("stddev_output_tokens"),
    "Imply TTFT (s)": summary_data.get("results_ttft_s_mean"),
    "Imply Inter-token Latency (s)": summary_data.get("results_inter_token_latency_s_mean"),
    "Imply Output Throughput (tokens/s)": summary_data.get("results_mean_output_throughput_token_per_s"),
    "Accomplished Requests": summary_data.get("results_num_completed_requests"),
    "Error Charge": summary_data.get("results_error_rate")
}
print("Claude 3 Sonnet - Efficiency Abstract:n")
for okay, v in summary_metrics.objects():
    print(f"{okay}: {v}")

Die endgültigen Lastentestsergebnisse sehen in etwa dem folgenden aus:

Screenshot vom Autor

Wie wir sehen können, sehen wir die von uns konfigurierten Eingabeparameter und dann die entsprechenden Ergebnisse mit der Zeit bis zum ersten Token (en) und durch den Durchsatz in Bezug auf die Ausgangs -Token professional Sekunde.

In einem realen Anwendungsfall können Sie LLMPERF für viele verschiedene Modellanbieter verwenden und Exams auf diesen Plattformen durchführen. Mit diesem Instrument können Sie es ganzheitlich verwenden, um das richtige Modell und den Bereitstellungsstapel für Ihren Anwendungsfall zu identifizieren, wenn Sie in der Skala verwendet werden.

Zusätzliche Ressourcen und Schlussfolgerung

Der gesamte Code für das Beispiel kann bei diesem zugeordneten zu finden sind Github -Repository. Wenn Sie auch mit Sagemaker -Endpunkten arbeiten möchten Hier.

Insgesamt sind beide Lasttests und -bewertungen von entscheidender Bedeutung, um sicherzustellen, dass Ihr LLM vor der Produktion gegen Ihren erwarteten Verkehr spielt. In zukünftigen Artikeln werden wir nicht nur den Bewertungsabschnitt abdecken, sondern wie wir mit beiden Komponenten einen ganzheitlichen Take a look at erstellen können.

Wie immer danke für das Lesen und das Gefühl, Suggestions zu hinterlassen und mich mit mir zu verbinden Linkedln Und X.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert