Share via


Introduzione all'uso delle distribuzioni con provisioning nel servizio OpenAI di Azure

La guida seguente illustra come configurare una distribuzione con provisioning con la risorsa del servizio OpenAI di Azure.

Prerequisiti

  • Una sottoscrizione di Azure: creare un account gratuitamente
  • Accesso concesso ad Azure OpenAI nella sottoscrizione di Azure desiderata. Attualmente, l'accesso a questo servizio è per applicazione. È possibile richiedere l'accesso al servizio OpenAI di Azure completando il modulo all'indirizzo https://aka.ms/oai/access.
  • Ottenuta quota per una distribuzione con provisioning e acquistato un impegno.

Nota

Le unità elaborate con provisioning (PTU) sono diverse dalla quota standard in Azure OpenAI e non sono disponibili per impostazione predefinita. Per altre informazioni su questa offerta, contattare il team dell'account Microsoft.

Creare la distribuzione con provisioning

Dopo aver acquistato un impegno per la quota, è possibile creare una distribuzione. Per creare una distribuzione con provisioning, è possibile seguire questa procedura; le scelte descritte riflettono le voci visualizzate nello screenshot.

Screenshot of the Azure OpenAI Studio deployment page for a provisioned deployment.

  1. Accedere ad Azure OpenAI Studio
  2. Scegliere la sottoscrizione abilitata per le distribuzioni con provisioning e selezionare la risorsa desiderata in un'area in cui si dispone della quota.
  3. In Gestione nel riquadro di spostamento a sinistra selezionare Distribuzioni.
  4. Selezionare Crea nuova distribuzione e configurare i campi seguenti. Espandere l'elenco a discesa "Opzioni avanzate".
  5. Compilare i valori in ogni campo. Ecco un esempio:
Campo Description Esempio
Seleziona un modello Scegliere il modello specifico da distribuire. GPT-4
Versione del modello Scegliere la versione del modello da distribuire. 0613
Nome distribuzione Il nome della distribuzione viene usato nel codice per chiamare il modello usando le librerie client e le API REST. gpt-4
Filtro contenuto Specificare i criteri di filtro da applicare alla distribuzione. Per altre informazioni, vedere le procedure relative al filtro dei contenuti. Valori predefiniti
Tipo di distribuzione Ciò influisce sulla velocità effettiva e sulle prestazioni. Scegliere Provisioned-Managed per la distribuzione con provisioning Provisioning gestito
Unità elaborate con provisioning Scegliere la quantità di velocità effettiva da includere nella distribuzione. 100

Se si vuole creare la distribuzione a livello di codice, è possibile farlo con il comando seguente dell'interfaccia della riga di comando di Azure. sku-capacity Aggiornare con il numero desiderato di unità elaborate di cui è stato effettuato il provisioning.

az cognitiveservices account deployment create \
--name <myResourceName> \
--resource-group <myResourceGroupName> \
--deployment-name MyModel \
--model-name GPT-4 \
--model-version 0613  \
--model-format OpenAI \
--sku-capacity 100 \
--sku-name ProvisionedManaged

È anche possibile usare REST, modello ARM, Bicep e Terraform per creare distribuzioni. Vedere la sezione relativa all'automazione delle distribuzioni nella guida alle procedure per la gestione delle quote e sostituire con sku.name "ProvisionedManaged" anziché "Standard".

Effettuare le prime chiamate

Il codice di inferenza per le distribuzioni con provisioning è lo stesso tipo di distribuzione standard. Il frammento di codice seguente mostra una chiamata di completamento della chat a un modello GPT-4. Per la prima volta che si usano questi modelli a livello di codice, è consigliabile iniziare con la guida introduttiva. È consigliabile usare la libreria OpenAI con la versione 1.0 o successiva perché include la logica di ripetizione dei tentativi all'interno della libreria.

    #Note: The openai-python library support for Azure OpenAI is in preview. 
    import os
    from openai import AzureOpenAI

    client = AzureOpenAI(
        azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
        api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
        api_version="2024-02-01"
    )

    response = client.chat.completions.create(
        model="gpt-4", # model = "deployment_name".
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
            {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
            {"role": "user", "content": "Do other Azure AI services support this too?"}
        ]
    )

    print(response.choices[0].message.content)

Importante

Per l'ambiente di produzione, usare un modo sicuro per archiviare e accedere alle credenziali, ad esempio Azure Key Vault. Per altre informazioni sulla sicurezza delle credenziali, vedere l'articolo sicurezza dei servizi di intelligenza artificiale di Azure.

Informazioni sulla velocità effettiva prevista

La quantità di velocità effettiva che è possibile ottenere nell'endpoint è un fattore del numero di PTU distribuiti, dimensioni di input, dimensioni di output e frequenza di chiamata. Il numero di chiamate simultanee e i token totali elaborati possono variare in base a questi valori. Il modo consigliato per determinare la velocità effettiva per la distribuzione è il seguente:

  1. Usare il calcolatore capacità per una stima delle dimensioni. È possibile trovare il calcolatore della capacità in Azure OpenAI Studio nella pagina quote e nella scheda Provisioning.
  2. Eseguire il benchmark del carico usando il carico di lavoro del traffico reale. Per altre informazioni sul benchmarking, vedere la sezione relativa al benchmarking .

Misurazione dell'utilizzo della distribuzione

Quando si distribuisce un numero specificato di unità elaborate di cui è stato effettuato il provisioning, viene resa disponibile una quantità di velocità effettiva di inferenza impostata per tale endpoint. L'utilizzo di questa velocità effettiva è una formula complessa basata sul modello, sulla frequenza delle chiamate della versione del modello, sulle dimensioni della richiesta, sulle dimensioni della generazione. Per semplificare questo calcolo, è possibile fornire una metrica di utilizzo in Monitoraggio di Azure. La distribuzione restituisce un valore 429 per tutte le nuove chiamate dopo l'aumento dell'utilizzo superiore al 100%. L'utilizzo con provisioning è definito come segue:

Utilizzo della distribuzione PTU = (PTU utilizzate nel periodo di tempo) / (PTU distribuite nel periodo di tempo)

È possibile trovare la misura di utilizzo nella sezione Monitoraggio di Azure per la risorsa. Per accedere ai dashboard di monitoraggio accedere a https://portal.azure.com, passare alla risorsa OpenAI di Azure e selezionare la pagina Metriche nel riquadro di spostamento a sinistra. Nella pagina delle metriche selezionare la misura "Provisioned-managed utilization". Se nella risorsa sono presenti più distribuzioni, è necessario dividere anche i valori in base a ogni distribuzione facendo clic sul pulsante "Applica suddivisione".

Screenshot of the provisioned managed utilization on the resource's metrics blade in the Azure portal.

Per altre informazioni sul monitoraggio delle distribuzioni, vedere la pagina Monitoraggio del servizio Azure OpenAI.

Gestione dell'utilizzo elevato

Le distribuzioni con provisioning forniscono una quantità allocata di capacità di calcolo per eseguire un determinato modello. La metrica "Provisioned-Managed Utilization" in Monitoraggio di Azure misura l'utilizzo della distribuzione in incrementi di un minuto. Le distribuzioni gestite con provisioning sono ottimizzate anche in modo che le chiamate accettate vengano elaborate con una latenza massima coerente per chiamata. Quando il carico di lavoro supera la capacità allocata, il servizio restituisce un codice di stato HTTP 429 fino a quando l'utilizzo non scende al di sotto del 100%. Il tempo prima della ripetizione dei tentativi viene fornito nelle retry-after intestazioni di risposta e retry-after-ms che forniscono rispettivamente il tempo in secondi e millisecondi. Questo approccio gestisce le destinazioni di latenza per chiamata offrendo allo sviluppatore il controllo su come gestire situazioni di carico elevato, ad esempio ripetere o deviare a un'altra esperienza/endpoint.

Cosa devo fare quando ricevo una risposta 429?

Una risposta 429 indica che i PTU allocati vengono utilizzati completamente al momento della chiamata. La risposta include le retry-after-ms intestazioni e retry-after che indicano il tempo di attesa prima che venga accettata la chiamata successiva. La modalità di gestione di una risposta 429 dipende dai requisiti dell'applicazione. Ecco alcune considerazioni:

  • Se si dispone di latenze per chiamata più lunghe, implementare la logica di ripetizione dei tentativi sul lato client per attendere il retry-after-ms tempo e riprovare. Questo approccio consente di ottimizzare la velocità effettiva nella distribuzione. Gli SDK client forniti da Microsoft lo gestiscono già con impostazioni predefinite ragionevoli. Potrebbe essere comunque necessaria un'ulteriore ottimizzazione in base ai casi d'uso.
  • Valutare la possibilità di reindirizzare il traffico ad altri modelli, distribuzioni o esperienze. Questo approccio è la soluzione a latenza più bassa perché questa azione può essere eseguita non appena si riceve il segnale 429. Il segnale 429 non è una risposta di errore imprevista durante il push a un utilizzo elevato, ma invece parte della progettazione per la gestione dell'accodamento e del carico elevato per le distribuzioni di cui è stato effettuato il provisioning.

Modifica della logica di ripetizione dei tentativi all'interno delle librerie client

Gli SDK OpenAI di Azure riprovano a 429 risposte per impostazione predefinita e dietro le quinte nel client (fino al massimo tentativi). Le librerie rispettano il retry-after tempo. È anche possibile modificare il comportamento di ripetizione dei tentativi per adattarsi meglio all'esperienza. Ecco un esempio con la libreria Python.

È possibile usare l'opzione max_retries per configurare o disabilitare le impostazioni di ripetizione dei tentativi:

from openai import AzureOpenAI

# Configure the default for all requests:
client = AzureOpenAI(
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    api_version="2024-02-01",
    max_retries=5,# default is 2
)

# Or, configure per-request:
client.with_options(max_retries=5).chat.completions.create(
    model="gpt-4", # model = "deployment_name".
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
        {"role": "user", "content": "Do other Azure AI services support this too?"}
    ]
)

Eseguire un benchmark

Le funzionalità esatte di prestazioni e velocità effettiva dell'istanza dipendono dal tipo di richieste eseguite e dal carico di lavoro esatto. Il modo migliore per determinare la velocità effettiva per il carico di lavoro consiste nell'eseguire un benchmark sui propri dati.

Per facilitare questo lavoro, lo strumento di benchmarking consente di eseguire facilmente benchmark nella distribuzione. Lo strumento include diverse forme di carico di lavoro preconfigurate e restituisce le metriche delle prestazioni chiave. Altre informazioni sugli strumenti e sulle impostazioni di configurazione nel repository GitHub: https://aka.ms/aoai/benchmarking.

È consigliabile il flusso di lavoro seguente:

  1. Stimare i PTU della velocità effettiva usando il calcolatore della capacità.
  2. Eseguire un benchmark con questa forma di traffico per un lungo periodo di tempo (10+ min) per osservare i risultati in uno stato stabile.
  3. Osservare l'utilizzo, i token elaborati e i valori della frequenza delle chiamate dallo strumento di benchmark e da Monitoraggio di Azure.
  4. Eseguire un benchmark con le proprie forme di traffico e carichi di lavoro usando l'implementazione client. Assicurarsi di implementare la logica di ripetizione dei tentativi usando una libreria client Openai di Azure o una logica personalizzata.

Passaggi successivi