Condividi tramite


Ridimensionare OpenAI per Python con Gestione API di Azure

Informazioni su come aggiungere il bilanciamento del carico di livello aziendale all'applicazione per estendere l'app di chat oltre i modelli OpenAI di Azure nel token e nei limiti di quota del modello di Microsoft Foundry. Questo approccio usa Azure Gestione API per indirizzare in modo intelligente il traffico tra tre risorse OpenAI di Azure.

Questo articolo richiede la distribuzione di due esempi distinti:

  • App di chat
    • Attendere di distribuire l'app di chat fino a quando non viene distribuito l'esempio di bilanciamento del carico.
    • Se l'app chat è già stata distribuita una sola volta, modificare la variabile di ambiente per supportare un endpoint personalizzato per il servizio di bilanciamento del carico e ridistribuirlo nuovamente.
  • Bilanciamento del carico con Gestione API di Azure.

Annotazioni

Questo articolo utilizza uno o più modelli di app di intelligenza artificiale come base per gli esempi e le linee guida presenti nell’articolo. I modelli di app di intelligenza artificiale offrono implementazioni di riferimento ben gestite che sono facili da distribuire. Consentono di garantire un punto di partenza di alta qualità per le app di intelligenza artificiale.

Architettura per il bilanciamento del carico di Azure OpenAI con Azure Gestione API

Poiché i modelli OpenAI di Azure in Microsoft Foundry hanno limiti di quota di token e modelli specifici, un'app di chat che usa una singola risorsa OpenAI di Azure è soggetta a errori di conversazione a causa di tali limiti.

Diagramma che mostra l'architettura dell'app di chat con una risorsa OpenAI di Azure evidenziata.

Per usare l'app di chat senza raggiungere tali limiti, usare una soluzione con carico bilanciato con Gestione API. Questa soluzione espone facilmente un singolo endpoint da Gestione API al server delle app di chat.

Diagramma che mostra l'architettura delle app di chat con Gestione API di Azure davanti a tre risorse OpenAI di Azure.

La risorsa Gestione API, come livello API, si trova davanti a un set di risorse OpenAI di Azure. Il livello API si applica a due scenari: normale e regolato. Durante uno scenario normale in cui è disponibile la quota di token e modelli, la risorsa OpenAI di Azure restituisce una risposta 200 tramite il livello API e il server app back-end.

Diagramma che mostra uno scenario normale con tre gruppi di endpoint OpenAI di Azure. Il primo gruppo di due endpoint ottiene il traffico riuscito.

Quando una risorsa viene limitata a causa dei limiti di quota, il livello API può provare immediatamente una diversa risorsa OpenAI di Azure per soddisfare la richiesta originale dell'app di chat.

Diagramma che mostra uno scenario di throttling con codice di errore 429 e un'intestazione di risposta che indica quanti secondi il client deve attendere prima di riprovare.

Prerequisiti

Aprire l'app di esempio del bilanciatore locale di Gestione API di Azure

GitHub Codespaces esegue un contenitore di sviluppo gestito da GitHub, utilizzando Visual Studio Code per il Web come interfaccia utente. Per l'ambiente di sviluppo più semplice, usare GitHub Codespaces per avere gli strumenti di sviluppo e le dipendenze corretti preinstallati per completare questo articolo.

Apri con GitHub Codespaces.

Importante

Tutti gli account GitHub possono usare GitHub Codespaces per un massimo di 60 ore gratuite ogni mese con due istanze principali. Per ulteriori informazioni, consultare Spazio di archiviazione e ore core mensili incluse in GitHub Codespaces.

Distribuire il servizio di bilanciamento del carico di Gestione API di Azure

  1. Per distribuire il servizio di bilanciamento del carico in Azure, accedere all'interfaccia della riga di comando per sviluppatori di Azure (AZD):

    azd auth login
    
  2. Completare le istruzioni di accesso.

  3. Distribuire l'applicazione per il bilanciamento del carico:

    azd up
    

    Selezionare una sottoscrizione e un'area per la distribuzione. Non devono appartenere alla stessa sottoscrizione e alla stessa area dell'app di chat.

  4. Attendere il completamento della distribuzione prima di continuare. Questo processo potrebbe richiedere fino a 30 minuti.

Ottenere l'endpoint del bilanciamento del carico

Eseguire il comando Bash seguente per visualizzare le variabili di ambiente dalla distribuzione. Queste informazioni saranno necessarie più avanti.

azd env get-values | grep APIM_GATEWAY_URL

Ridistribuire l'app di chat con l'endpoint del bilanciatore di carico

Questi esempi vengono completati nell'esempio di app di chat.

  1. Aprire il contenitore di sviluppo dell'esempio di app di chat usando una delle opzioni seguenti.

    Lingua GitHub Codespaces Visual Studio Code
    .NET Aprire in GitHub Codespaces Apri nei contenitori di sviluppo
    JavaScript Aprire in GitHub Codespaces Apri nei contenitori di sviluppo
    Pitone Aprire in GitHub Codespaces Apri nei contenitori di sviluppo
  2. Accedi alla CLI per sviluppatori di Azure (AZD):

    azd auth login
    

    Completare le istruzioni di accesso.

  3. Creare un ambiente AZD con un nome, ad esempio chat-app:

    azd env new <name>
    
  4. Aggiungere la variabile di ambiente seguente, che indica al back-end dell'app di chat di usare un URL personalizzato per le richieste OpenAI di Azure:

    azd env set OPENAI_HOST azure_custom
    
  5. Aggiungere questa variabile di ambiente per indicare al back-end dell'app di chat l'URL personalizzato per la richiesta OpenAI di Azure:

    azd env set AZURE_OPENAI_CUSTOM_URL <APIM_GATEWAY_URL>
    
  6. Distribuire l'app chat:

    azd up
    

Configurare la quota TPM

Per impostazione predefinita, ognuno dei modelli OpenAI di Azure nelle istanze di Microsoft Foundry nel servizio di bilanciamento del carico viene distribuito con una capacità di 30.000 token al minuto (TPM). È possibile usare l'app di chat sapendo che è scalabile per molti utenti senza consumare la quota. Modificare questo valore quando:

  • Ottieni errori di capacità di distribuzione: abbassa il valore.
  • È necessaria una capacità superiore: aumentare il valore.
  1. Usare il comando seguente per modificare il valore:

    azd env set OPENAI_CAPACITY 50
    
  2. Riassegnare il bilanciatore di carico:

    azd up
    

Pulire le risorse

Quando hai finito di utilizzare l'app chat e il bilanciatore di carico, ripulisci le risorse. Le risorse di Azure create e discusse in questo articolo vengono fatturate al tuo abbonamento di Azure. Se non si prevede che queste risorse siano necessarie in futuro, eliminarle per evitare di incorrere in costi aggiuntivi.

Pulire le risorse dell'app chat

Torna all'articolo sull'app di chat per pulire quelle risorse.

Pulire le risorse del bilanciatore del carico

Eliminare le risorse di Azure e rimuovere il codice sorgente:

azd down --purge --force

Gli interruttori forniscono:

  • purge: le risorse eliminate vengono rimosse immediatamente. È possibile riutilizzare i token OpenAI di Azure al minuto.
  • force: L'eliminazione avviene in modo silenzioso, senza richiedere il consenso dell'utente.

Pulire le risorse

L'eliminazione dell'ambiente GitHub Codespaces garantisce che sia possibile massimizzare l'ammontare delle ore gratuite per core assegnato al tuo account.

Importante

Per ulteriori informazioni sui diritti dell'account GitHub, consultare Archiviazione mensile inclusa e ore principali di GitHub Codespaces.

  1. Accedere al dashboard GitHub Codespaces.

  2. Individua i codespaces attualmente in esecuzione originati dal repository GitHub azure-samples/openai-apim-lb.

    Screenshot che mostra tutti gli spazi di codice in esecuzione, inclusi lo stato e i modelli.

  3. Aprire il menu di scelta rapida per l'elemento GitHub Codespaces e quindi selezionare Elimina.

    Screenshot che mostra il menu contestuale per un singolo codespace con l'opzione Elimina evidenziata.

Ottenere assistenza

Se hai problemi durante la distribuzione del servizio di bilanciamento del carico di Gestione API di Azure, aggiungi il tuo problema alla sezione Issues della pagina del repository.

Esempio di codice

Gli esempi usati in questo articolo includono: