Freigeben über


Leistung und Wartezeit

In diesem Artikel erfahren Sie, wie Latenz und Durchsatz mit Azure OpenAI funktionieren und wie Sie Ihre Umgebung optimieren können, um die Leistung zu verbessern.

Grundlegendes und Unterschiede von Durchsatz und Latenz

Bei der Größenanpassung einer Anwendung müssen Sie zwei Schlüsselkonzepte berücksichtigen: (1) Durchsatz auf Systemebene und (2) Antwortzeiten pro Aufruf (auch als Latenz bezeichnet).

Durchsatz auf Systemebene

Dies untersucht die Gesamtkapazität Ihrer Bereitstellung: wie viele Anforderungen pro Minute und Gesamttoken können verarbeitet werden.

Bei einer Standardbereitstellung bestimmt das Ihrer Bereitstellung zugewiesene Kontingent teilweise den Durchsatz, den Sie erreichen können. Das Kontingent bestimmt jedoch nur die Zulassungslogik für Aufrufe an die Bereitstellung und erzwingt nicht direkt den Durchsatz. Aufgrund von Latenzschwankungen pro Aufruf können Sie möglicherweise nicht den Durchsatz erreichen, der Ihrem Kontingent entspricht. Weitere Informationen zur Verwaltung von Kontingenten.

Bei einer Bereitstellung wird Ihrem Endpunkt eine bestimmte Menge an Modellverarbeitungskapazität zugewiesen. Der Durchsatz, den Sie am Endpunkt erreichen können, hängt von der Eingabegröße, der Ausgabegröße, der Aufrufrate und der Cache-Übereinstimmungsrate ab. Die Anzahl der gleichzeitigen Aufrufe und der insgesamt verarbeiteten Token kann je nach diesen Werten variieren. In den folgenden Schritten erfahren Sie, wie Sie den Durchsatz für eine bestimmte Workload in einer Bereitstellung ermitteln können:

  1. Verwenden Sie den Kapazitätsrechner für eine Größenschätzung.

  2. Führen Sie einen Benchmark-Vergleich der Last mit einer echten Datenverkehrsworkload durch. Ermitteln Sie die Metriken für die Auslastung und die verarbeiteten Token von Azure Monitor. Führen Sie dies über einen längeren Zeitraum aus. Das Azure OpenAI Benchmarking-Repository enthält Code zum Ausführen des Benchmarks. Die genaueste Vorgehensweise besteht letztendlich darin, einen Test mit Ihren eigenen Daten und Workload-Merkmalen durchzuführen.

Hier sind ein paar Beispiele für das GPT-4 0613-Modell:

Prompt-Größe (Token) Generierungsgröße (Token) Aufrufe pro Minute Eerforderliche PTUs
800 150 30 100
1000 50 300 700
5000 100 50 600

Die Anzahl der PTUs skaliert ungefähr linear mit der Aufrufrate (kann sublinear sein), wenn die Workload-Verteilung konstant bleibt.

Latenz: Die Antwortzeiten pro Aufruf

Die allgemeine Definition von Latenz in diesem Zusammenhang ist die Zeit, die benötigt wird, um eine Antwort des Modells zu erhalten. Bei Anforderungen zur Vervollständigung und Chatvervollständigung hängt die Latenzzeit weitgehend vom Modelltyp, der Anzahl der Token im Prompt und der Anzahl der generierten Token ab. Im Allgemeinen erfordert jedes Prompt-Token im Vergleich zu jedem generierten inkrementellen Token nur wenig Zeit.

Die Schätzung der erwarteten Latenzzeit pro Aufruf kann mit diesen Modellen schwierig sein. Die Latenzzeit für eine Anforderung kann von vier Hauptfaktoren abhängen: (1) dem Modell, (2) der Anzahl der Token im Prompt, (3) der Anzahl der generierten Token und (4) der Gesamtauslastung der Bereitstellung und des Systems. Die Punkte eins und drei tragen oft am meisten zur Gesamtzeit bei. Im nächsten Abschnitt erfahren Sie mehr über die Anatomie eines Rückschlussaufrufs eines großen Sprachmodells.

Verbessern der Leistung

Es gibt mehrere Faktoren, die Sie steuern können, um die Latenzzeit Ihrer Anwendung pro Aufruf zu verbessern.

Modellauswahl

Die Latenz variiert je nach verwendetem Modell. Bei einer identischen Anforderung müssen Sie damit rechnen, dass die verschiedenen Modelle unterschiedliche Latenzen für den Aufruf der Chatvervollständigung haben. Wenn Ihr Anwendungsfall die Modelle mit der geringsten Latenz und den schnellsten Reaktionszeiten erfordert, empfehlen wir das neueste GPT-4o-mini-Modell.

Generationsgröße und maximale Anzahl an Token

Wenn Sie eine Anforderung zum Abschluss an den Azure OpenAI-Endpunkt senden, wird Ihr Eingabetext in Token umgewandelt, die dann an Ihr bereitgestelltes Modell gesendet werden. Das Modell empfängt die Eingabetoken und beginnt dann mit dem Generieren einer Antwort. Es handelt sich um einen iterativen sequenziellen Prozess, jeweils ein Token. Man kann es sich auch wie eine For-Schleife mit n tokens = n iterations vorstellen. Bei den meisten Modellen ist das Generieren der Antwort der langsamste Schritt im Prozess.

Zum Zeitpunkt der Anforderung wird die angeforderte Generierungsgröße (Parameter max_tokens) als erste Schätzung der Generierungsgröße verwendet. Die Berechnungszeit für die Generierung der vollen Größe wird für das Modell reserviert, während die Anforderung bearbeitet wird. Nach Abschluss der Generierung wird das verbleibende Kontingent freigegeben. Möglichkeiten zum Verringern der Anzahl von Token:

  • Legen Sie den max_tokens-Parameter für jeden Aufruf so klein wie möglich fest.
  • Fügen Sie Stoppsequenzen ein, um zu verhindern, dass zusätzliche Inhalte generiert werden.
  • Generieren Sie weniger Antworten: Die Parameter „best_of“ und „n“ können die Latenz stark erhöhen, da sie mehrere Ausgaben erzeugen. Um die schnellste Antwort zu erhalten, geben Sie diese Werte entweder nicht an oder legen Sie sie auf 1 fest.

Zusammenfassend lässt sich sagen, dass die Reduzierung der Anzahl der pro Anforderung generierten Token die Latenzzeit jeder Anforderung verringert.

Streaming

Wenn Sie stream: true in einer Anforderung festlegen, gibt der Dienst die Token zurück, sobald sie verfügbar sind, anstatt darauf zu warten, dass die gesamte Folge von Token generiert wird. Er ändert nichts an der Zeit, die benötigt wird, um alle Token zu erhalten, aber er verkürzt die Zeit bis zur ersten Antwort. Dieser Ansatz bietet eine bessere Benutzererfahrung, da die Endbenutzer*innen die Antwort lesen können, während sie generiert wird.

Streaming ist auch bei großen Aufrufen, deren Bearbeitung viel Zeit in Anspruch nimmt, nützlich. Viele Clients und Vermittlungsschichten haben Timeouts für einzelne Aufrufe. Aufrufe mit langer Generierung können aufgrund von Zeitüberschreitungen auf der Client-Seite abgebrochen werden. Durch Zurückstreamen der Daten können Sie sicherstellen, dass Sie inkrementelle Daten erhalten.

Beispiele für den Einsatz von Streaming:

Chatbots und Konversationsoberflächen.

Streaming wirkt sich auf die wahrgenommene Latenz aus. Wenn das Streaming aktiviert ist, erhalten Sie die Token in Blöcken zurück, sobald sie verfügbar sind. Für Endbenutzer*innen fühlt sich die Verwendung dieses Ansatzes oft so an, als würde das Modell schneller reagieren, obwohl die Gesamtzeit für die Bearbeitung der Anforderung gleich bleibt.

Beispiele dafür, wann Streaming weniger wichtig ist:

Stimmungsanalyse, Sprachen und Übersetzung, Generierung von Inhalten.

Es gibt viele Anwendungsfälle, in denen Sie eine Massenverarbeitung durchführen, bei der Sie sich nur für das fertige Ergebnis interessieren und keine Reaktion in Echtzeit erwarten. Wenn Streaming deaktiviert ist, erhalten Sie keine Token, bis das Modell die gesamte Antwort abgeschlossen hat.

Inhaltsfilterung

Azure OpenAI umfasst ein Inhaltsfiltersystem, das mit Kernmodellen zusammenarbeitet. Dieses System funktioniert, indem sowohl die Eingabeaufforderung als auch die Vervollständigung durch ein Ensemble von Klassifizierungsmodellen ausgeführt wird, das darauf abzielt, die Ausgabe schädlicher Inhalte zu erkennen und zu verhindern.

Das Inhaltsfiltersystem erkennt bestimmte Kategorien potenziell schädlicher Inhalte sowohl in Eingabeeingabeaufforderungen als auch in Ausgabeabschlüssen und ergreift entsprechende Maßnahmen.

Das Hinzufügen der Inhaltsfilterung bietet erhöhte Sicherheit, aber auch höhere Latenz. Es gibt viele Anwendungen, bei denen dieser Kompromiss in Bezug auf die Leistung notwendig ist, aber es gibt auch einige Anwendungsfälle mit geringerem Risiko, bei denen es sich lohnen kann, die Inhaltsfilter zugunsten einer besseren Leistung zu deaktivieren.

Erfahren Sie mehr über das Anfordern von Änderungen an den standardmäßigen Richtlinien zur Inhaltsfilterung.

Trennung von Workloads

Das Mischen verschiedener Workloads auf demselben Endpunkt kann sich negativ auf die Latenz auswirken. Das liegt daran, dass (1) sie während der Inferenz zusammengeführt werden und kurze Aufrufe auf längere Vervollständigungen warten können und (2) die Vermischung der Aufrufe Ihre Cache-Trefferrate verringern kann, da beide um den gleichen Speicherplatz konkurrieren. Wenn möglich sollten Sie für jede Workload separate Bereitstellungen vornehmen.

Promt-Größe

Obwohl die Prompt-Größe einen geringeren Einfluss auf die Latenzzeit hat als die Generierungsgröße, wirkt sie sich auf die Gesamtzeit aus, insbesondere wenn die Größe zunimmt.

Batchverarbeitung

Wenn Sie mehrere Anforderungen an denselben Endpunkt senden, können Sie die Anforderungen in einem einzigen Aufruf zusammenfassen. Dadurch verringert sich die Anzahl der Anforderungen, die Sie stellen müssen, und je nach Szenario kann dies die Reaktionszeit insgesamt verbessern. Sie sollten diese Methode testen, um zu sehen, ob sie hilft.

Messen des Durchsatzes

Sie sollten Ihren Gesamtdurchsatz bei einer Bereitstellung mit zwei Maßnahmen messen:

  • Aufrufe pro Minute: Die Anzahl der API-Rückschluss-Aufrufe, die Sie pro Minute durchführen. Dies kann in Azure-Monitor anhand der Metrik Azure OpenAI-Anforderungen und der Aufteilung nach dem ModelDeploymentName gemessen werden.
  • Token insgesamt pro Minute: Die Gesamtzahl der Token, die pro Minute von Ihrer Bereitstellung verarbeitet werden. Dazu gehören Prompt- und generierte Token. Um die Leistung der Bereitstellung besser verstehen zu können, werden oft auch beide gemessen. Dies kann in Azure-Monitor anhand der Metrik Verarbeitete Rückschluss-Token gemessen werden.

Erfahren Sie mehr über die Überwachung des Azure OpenAI Service.

Messen der Latenz pro Aufruf

Die Zeit, die für jeden Aufruf benötigt wird, hängt davon ab, wie lange es dauert, das Modell zu lesen, die Ausgabe zu erzeugen und Inhaltsfilter anzuwenden. Die Art und Weise, wie Sie die Zeit messen, hängt davon ab, ob Sie Streaming verwenden oder nicht. Wir schlagen für jeden Fall einen anderen Maßnahmenkatalog vor.

Erfahren Sie mehr über die Überwachung des Azure OpenAI Service.

Kein Streaming:

  • End-to-End-Anfragezeit: Die vom API-Gateway gemessene Gesamtzeit für die Generierung der gesamten Antwort bei Anforderungen ohne Streaming. Diese Zahl steigt mit zunehmender Prompt- und Generationsgröße.

Streaming:

  • Zeit bis zur Antwort: Empfohlenes Maß für die Latenzzeit (Reaktionszeit) bei Streaming-Anforderungen. Gilt für PTU und PTU-verwaltete Bereitstellungen. Wird berechnet als Zeit, die benötigt wird, bis die erste Antwort erscheint, nachdem ein*e Benutzer*in einen Prompt gesendet hat, wie vom API-Gateway gemessen. Diese Zahl erhöht sich, wenn die Prompt-Größe zunimmt und/oder die Treffergröße abnimmt.
  • Durchschnittliche Token-Generierungsrate: Zeit vom ersten Token bis zum letzten Token, geteilt durch die Anzahl der generierten Token, wie vom API-Gateway gemessen. Dieser Wert misst die Geschwindigkeit der Antwortgenerierung und steigt mit zunehmender Systemlast. Empfohlenes Latenzmaß für Streaming-Anforderungen.

Zusammenfassung

  • Modelllatenz: Wenn Ihnen die Latenzzeit eines Modells wichtig ist, empfehlen wir Ihnen, das neueste GPT-4o-mini-Modell auszuprobieren.

  • Geringere maximale Tokenanzahl: OpenAI hat festgestellt, dass selbst in Fällen, in denen die Gesamtzahl der generierten Token ähnlich ist, die Anforderung mit dem höheren Wert für den maximalen Tokenparameter eine höhere Latenz aufweist.

  • Geringere Gesamtzahl an generierten Token: Je weniger Token generiert werden, desto schneller ist die Gesamtantwort. Denken Sie daran, dass dies wie eine For-Schleife mit n tokens = n iterations ist. Verringern Sie die Anzahl der generierten Token, und die Gesamtantwortzeit wird entsprechend verbessert.

  • Streaming-: Die Aktivierung von Streaming kann in bestimmten Situationen nützlich sein, um die Erwartungen der Benutzer zu steuern, da der Benutzer die Modellantwort sehen kann, während sie erzeugt wird, und nicht warten muss, bis das letzte Token fertig ist.

  • Inhaltsfilterung verbessert die Sicherheit, wirkt sich aber auch auf die Latenz aus. Prüfen Sie, ob einer Ihrer Workloads von geänderten Richtlinien zur Inhaltsfilterung profitieren würde.