Teilen über


Skalieren von Azure OpenAI für JavaScript mit Azure API Management

Erfahren Sie, wie Sie Ihrer Anwendung Load Balancing auf Enterprise-Niveau hinzufügen können, um die Chat-App über die Grenzwerte für Azure OpenAI-Token und -Modell-Kontingente hinaus zu erweitern. Dieses Konzept verwendet Azure API Management, um den Datenverkehr zwischen drei Azure OpenAI-Ressourcen in intelligenter Weise zu leiten.

In diesem Artikel müssen Sie zwei separate Beispiele bereitstellen:

  • Chat-App

    • Wenn Sie die Chat-App noch nicht bereitgestellt haben, warten Sie, bis das Beispiel zum Lastenausgleich bereitgestellt wurde.
    • Wenn Sie die Chat-App bereits einmal bereitgestellt haben, ändern Sie die Umgebungsvariable so, dass ein benutzerdefinierter Endpunkt für das Lastenausgleichsmodul unterstützt und erneut bereitgestellt wird.
  • Load Balancer mit Azure API Management

Hinweis

In diesem Artikel wird mindestens eine KI-App-Vorlage als Grundlage für die Beispiele und Anleitungen im Artikel verwendet. KI-App-Vorlagen bieten Ihnen gut gepflegte, einfach bereitzustellende Referenzimplementierungen, die helfen, einen qualitativ hochwertigen Ausgangspunkt für Ihre KI-Apps zu gewährleisten.

Architektur für Load Balancing von Azure OpenAI mit Azure API Management

Da die Azure OpenAI-Ressource bestimmte Token- und Modellkontingentbeschränkungen aufweist, ist eine Chat-App mit einer einzelnen Azure OpenAI-Ressource anfällig für Unterhaltungsfehler aufgrund dieser Grenzwerte.

Diagramm, das die Architektur der Chat-App mit hervorgehobener Azure OpenAI-Ressource zeigt.

Wenn Sie die Chat-App verwenden möchten, ohne diese Grenzwerte zu erreichen, verwenden Sie eine Lösung mit Load Balancing mit Azure API Management. Diese Lösung macht einen einzelnen Endpunkt von Azure API Management nahtlos für Ihren Chat-App-Server verfügbar.

Diagramm der Chat-App-Architektur mit Azure API Management vor drei Azure OpenAI-Ressourcen.

Die Azure API Management-Ressource befindet sich als API-Ebene vor einer Reihe von Azure OpenAI-Ressourcen. Die API-Ebene gilt für zwei Szenarien: normal und gedrosselt. In einem normalen Szenario, bei dem ein Token- und Modell-Kontingent verfügbar ist, gibt die Azure OpenAI-Ressource über die API-Ebene und den Back-End-App-Server einen Wert von 200 zurück.

Diagramm, das ein normales Szenario anzeigt. Das normale Szenario zeigt drei Azure OpenAI-Endpunktgruppen mit der ersten Gruppe von zwei Endpunkten, die erfolgreichen Datenverkehr erhalten.

Wenn eine Ressource aufgrund von Kontingentgrenzen gedrosselt wird, kann die API-Ebene sofort eine andere Azure OpenAI-Ressource erneut verwenden, um der ursprünglichen Chat-App-Anforderung gerecht zu werden.

Diagramm mit einem Drosselungsszenario mit einem 429-Fehlerantwortcode und einem Antwortheader, der angibt, wie viele Sekunden der Client warten muss, um den Vorgang erneut auszuführen.

Voraussetzungen

Öffnen der Azure API Management Local Balancer-Beispiel-App

GitHub Codespaces führt einen von GitHub verwalteten Entwicklungscontainer mit Visual Studio Code für Web als Benutzeroberfläche aus. Verwenden Sie für die einfachste Entwicklungsumgebung GitHub Codespaces, damit Sie die richtigen Entwicklertools und Abhängigkeiten vorinstalliert haben, um diesen Artikel abzuschließen.

Dieses Projekt in GitHub Codespaces öffnen

Wichtig

Alle GitHub-Konten können Codespaces für bis zu 60 Stunden pro Monat mit zwei Kerninstanzen kostenlos verwenden. Weitere Informationen finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.

Bereitstellen des Azure API Management-Load Balancers

  1. Um das Lastenausgleichsmodul für Azure bereitzustellen, melden Sie sich bei Azure Developer CLI (AZD) an.

    azd auth login
    
  2. Schließen Sie die Anmeldeanweisungen ab.

  3. Stellen Sie die Lastenausgleichs-App bereit.

    azd up
    

    Sie müssen ein Abonnement und eine Region für die Bereitstellung auswählen. Diese müssen nicht dasselbe Abonnement und dieselbe Region wie die Chat-App sein.

  4. Warten Sie auf den Abschluss der Bereitstellung, bevor Sie fortfahren. Dieser Vorgang kann bis zu 30 Minuten dauern.

Abrufen des Load Balancer-Endpunkts

Führen Sie den folgenden Bash-Befehl aus, um die Umgebungsvariablen aus der Bereitstellung anzuzeigen. Sie benötigen diese Informationen später.

azd env get-values | grep APIM_GATEWAY_URL

Erneutes Bereitstellen einer Chat-App mit Lastenausgleichsendpunkt

Dies wird im Beispiel der Chat-App abgeschlossen.

  1. Öffnen Sie den Dev-Container des Chat-App-Beispiels mit einer der folgenden Optionen.

    Sprache Codespaces Visual Studio Code
    .NET In GitHub Codespaces öffnen In Dev-Containern öffnen
    JavaScript In GitHub Codespaces öffnen In Dev-Containern öffnen
    Python In GitHub Codespaces öffnen In Dev-Containern öffnen
  2. Melden Sie sich bei Azure Developer CLI (AZD) an.

    azd auth login
    

    Schließen Sie die Anmeldeanweisungen ab.

  3. Erstellen Sie eine AZD-Umgebung mit einem Namen wie z. B. chat-app.

    azd env new <name>
    
  4. Fügen Sie die folgende Umgebungsvariable hinzu, die das Backend der Chat-App anweist, eine benutzerdefinierte URL für die OpenAI-Anfragen zu verwenden.

    azd env set OPENAI_HOST azure_custom
    
  5. Fügen Sie die folgende Umgebungsvariable hinzu, die das Backend der Chat-App anweist, eine benutzerdefinierte URL für die OpenAI-Anfragen zu verwenden.

    azd env set AZURE_OPENAI_CUSTOM_URL <APIM_GATEWAY_URL>
    
  6. Stellen Sie die Chat-App bereit.

    azd up
    

Konfigurieren der Token pro Minute-Kontingent (TPM)

Standardmäßig werden alle OpenAI-Instanzen im Lastenausgleich mit einer Kapazität von 30.000 TPM (Token pro Minute) bereitgestellt. Sie können die Chat-App mit dem Vertrauen verwenden, dass sie für viele Benutzer entwickelt wurde, ohne dass das Kontingent überschritten wird. Ändern Sie diesen Wert in folgenden Fällen:

  • Sie erhalten Fehler bei der Bereitstellungskapazität: Verringern Sie diesen Wert.
  • Wenn Sie eine höhere Kapazität planen, erhöhen Sie den Wert.
  1. Verwenden Sie den folgenden Befehl, um den Wert zu ändern.

    azd env set OPENAI_CAPACITY 50
    
  2. Stellen Sie den Lastenausgleich erneut bereit.

    azd up
    

Bereinigen von Ressourcen

Wenn Sie mit der Chat-App und dem Lastenausgleich fertig sind, bereinigen Sie die Ressourcen. Die in diesem Artikel erstellten Azure-Ressourcen werden Ihrem Azure-Abonnement in Rechnung gestellt. Wenn Sie nicht erwarten, dass diese Ressourcen in Zukunft benötigt werden, löschen Sie sie, um weitere Gebühren zu vermeiden.

Bereinigen Sie die Chat-App-Ressourcen

Kehren Sie zum Artikel zur Chat-App zurück, um diese Ressourcen zu bereinigen.

Bereinigen von Load Balancer-Ressourcen

Führen Sie den folgenden Azure Developer CLI-Befehl aus, um die Azure-Ressourcen zu löschen und den Quellcode zu entfernen:

azd down --purge --force

Die Schalter bieten:

  • purge: Gelöschte Ressourcen werden sofort endgültig gelöscht. Auf diese Weise können Sie das Azure OpenAI-TPM wiederverwenden.
  • force: Der Löschvorgang erfolgt im Hintergrund, ohne dass die Zustimmung des Benutzers erforderlich ist.

Bereinigen von GitHub-Codespaces

Durch das Löschen der GitHub Codespaces-Umgebung wird sichergestellt, dass Sie die Anzahl der kostenlosen Berechtigungsstunden pro Kern maximieren können, die Sie für Ihr Konto erhalten.

Wichtig

Weitere Informationen zu den Berechtigungen Ihres GitHub-Kontos finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.

  1. Melden Sie sich beim GitHub Codespaces-Dashboard (https://github.com/codespaces) an.

  2. Suchen Sie Ihre derzeit ausgeführten Codespaces, die aus dem GitHub-Repository azure-samples/openai-apim-lb stammen.

    Screenshot aller ausgeführten Codespaces einschließlich status und Vorlagen.

  3. Öffnen Sie das Kontextmenü für das Codespace-Element, und wählen Sie dann Löschen aus.

    Screenshot: Kontextmenü für einen Codespace mit hervorgehobener Löschoption.

Hilfe erhalten

Wenn Sie Probleme beim Bereitstellen des Azure API Management-Lastenausgleichs haben, protokollieren Sie Ihr Problem mit den Problemen des Repositorys.

Beispielcode

Beispiele, die in diesem Artikel verwendet werden, umfassen:

Nächster Schritt