Freigeben über


Skalieren von OpenAI für Python mit Azure API Management

Erfahren Sie, wie Sie Ihrer Anwendung lastenausgleich auf Unternehmensniveau hinzufügen, um die Chat-App über die Azure OpenAI-Modelle in Microsoft Foundry-Token und Modellkontingentgrenzen hinaus zu erweitern. Dieser Ansatz verwendet Azure API Management, um den Datenverkehr zwischen drei Azure OpenAI-Ressourcen intelligent zu leiten.

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

  • Chat-App:
    • Warten Sie mit der Bereitstellung der Chat-App, bis das Beispiel für das Lastenausgleichsmodul 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.
  • Lastenausgleich 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 Referenzimplementierungen, die einfach bereitzustellen sind. Sie tragen dazu bei, einen qualitativ hochwertigen Ausgangspunkt für Ihre KI-Apps zu gewährleisten.

Architektur für den Lastenausgleich von Azure OpenAI mit Azure API Management

Da die Azure OpenAI-Modelle in Microsoft Foundry bestimmte Token- und Modellkontingentbeschränkungen aufweisen, ist eine Chat-App, die eine einzelne Azure OpenAI-Ressource verwendet, anfällig für Unterhaltungsfehler aufgrund dieser Grenzwerte.

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

Um die Chat-App zu verwenden, ohne diese Grenzwerte zu erreichen, verwenden Sie eine Lastenausgleichslösung mit API-Verwaltung. Diese Lösung stellt nahtlos einen einzelnen Endpunkt von der API-Verwaltung für Ihren Chat-App-Server bereit.

Diagramm, das die Architektur von Chat-Apps mit Azure API Management vor drei Azure OpenAI-Ressourcen zeigt.

Die API-Verwaltungsressource als API-Ebene befindet sich vor einer Reihe von Azure OpenAI-Ressourcen. Die API-Ebene gilt für zwei Szenarien: normal und gedrosselt. Während eines normalen Szenarios, in dem Token- und Modellkontingente verfügbar sind, gibt die Azure OpenAI-Ressource eine 200 über die API-Ebene und den Back-End-App-Server zurück.

Diagramm, das ein normales Szenario mit drei Azure OpenAI-Endpunktgruppen zeigt. Die erste Gruppe von zwei Endpunkten erhält erfolgreichen Datenverkehr.

Wenn eine Ressource aufgrund von Kontingentbeschränkungen gedrosselt wird, kann die API-Ebene eine andere Azure OpenAI-Ressource sofort wiederholen, um die ursprüngliche Chat-App-Anforderung zu erfüllen.

Diagramm, das ein Drosselungsszenario mit einem HTTP-Statuscode 429 und einem Antwortheader zeigt, aus dem hervorgeht, wie viele Sekunden der Client warten muss, um es erneut zu versuchen.

Voraussetzungen

Öffnen der lokalen Balancer-Beispiel-App für Azure API Management

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.

In GitHub Codespaces öffnen.

Von Bedeutung

Alle GitHub-Konten können GitHub Codespaces für bis zu 60 Stunden kostenlos jeden Monat mit zwei Kerninstanzen verwenden. Weitere Informationen finden Sie unter monatlich inbegriffene Speicher- und Kernstunden für GitHub Codespaces.

Bereitstellen des Azure API Management-Lastenausgleichsmoduls

  1. Um das Lastenausgleichsmodul in Azure bereitzustellen, melden Sie sich bei der Azure Developer CLI an (AZD):

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

  3. Bereitstellen der Lastenausgleichs-App:

    azd up
    

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

  4. Warten Sie, bis die Bereitstellung abgeschlossen ist, bevor Sie fortfahren. Dieser Vorgang kann bis zu 30 Minuten dauern.

Rufen Sie den Lastenausgleichsendpunkt ab

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

Neubereitstellung der Chat-App mit dem Lastenausgleich-Endpoint

Diese Beispiele werden im Chat-App-Beispiel abgeschlossen.

  1. Öffnen Sie den Dev-Container des Chat-App-Beispiels, indem Sie eine der folgenden Optionen verwenden.

    Language GitHub 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 der Azure Developer CLI an (AZD):

    azd auth login
    

    Schließen Sie die Anmeldungsanweisungen ab.

  3. Erstellen einer AZD Umgebung mit einem Namen wie chat-app:

    azd env new <name>
    
  4. Fügen Sie die folgende Umgebungsvariable hinzu, die das Back-End der Chat-App angibt, eine benutzerdefinierte URL für die Azure OpenAI-Anforderungen zu verwenden:

    azd env set OPENAI_HOST azure_custom
    
  5. Fügen Sie diese Umgebungsvariable hinzu, um dem Back-End der Chat-App die benutzerdefinierte URL für die Azure OpenAI-Anforderung mitzuteilen:

    azd env set AZURE_OPENAI_CUSTOM_URL <APIM_GATEWAY_URL>
    
  6. Bereitstellen der Chat-App:

    azd up
    

Konfigurieren des TPM-Kontingents

Standardmäßig werden alle Azure OpenAI-Modelle in Microsoft Foundry-Instanzen im Lastenausgleich mit einer Kapazität von 30.000 Token pro Minute (TPM) bereitgestellt. Sie können die Chat-App mit der Gewissheit verwenden, dass sie viele Benutzer problemlos bedienen kann, ohne das Limit zu überschreiten. Ändern Sie diesen Wert in folgenden Fällen:

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

    azd env set OPENAI_CAPACITY 50
    
  2. Lastverteiler neu bereitstellen:

    azd up
    

Bereinigen von Ressourcen

Wenn Sie die Arbeit mit der Chat-App und dem Load Balancer abgeschlossen haben, 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 der Chat-App-Ressourcen

Kehren Sie zum Artikel über die Chat-App zurück, um die Ressourcen aufzuräumen.

Bereinige die Lastenverteilungsressourcen

Löschen Sie die Azure-Ressourcen, und entfernen Sie den Quellcode:

azd down --purge --force

Die Schalter bieten:

  • purge: Gelöschte Ressourcen werden sofort gelöscht. Sie können die Azure OpenAI-Token pro Minute wiederverwenden.
  • force: Der Löschvorgang erfolgt im Hintergrund, ohne dass die Einwilligung durch den Benutzer erforderlich ist.

Bereinigen von Ressourcen

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

Von Bedeutung

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-Dashboardan.

  2. Suchen Sie Ihre momentan laufenden Codespaces, die vom azure-samples/openai-apim-lb GitHub-Repository bereitgestellt werden.

    Screenshot, der alle laufenden Codespaces einschließlich ihres Status und ihrer Vorlagen zeigt.

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

    Screenshot des Kontextmenüs für einen einzelnen Codespace mit hervorgehobener Option

Hier erhalten Sie Hilfe

Wenn Sie Probleme beim Bereitstellen des Azure API Management-Lastenausgleichs haben, fügen Sie Ihr Problem zur Webseite " Probleme " des Repositorys hinzu.

Beispielcode

Beispiele, die in diesem Artikel verwendet werden, umfassen: