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

La guida seguente illustra i passaggi principali per la creazione di una distribuzione con provisioning con la risorsa Servizio OpenAI di Azure. Per altri dettagli sui concetti illustrati qui, vedere:

Prerequisiti

  • Una sottoscrizione di Azure: creare un account gratuitamente
  • Ruolo Collaboratore di Azure o Collaboratore di Servizi cognitivi
  • Accedere ad Azure OpenAI Studio

Ottenere/verificare la disponibilità della quota di unità elaborate con provisioning.

Le distribuzioni di velocità effettiva con provisioning sono dimensionate in unità denominate unità elaborate con provisioning. La quota di unità elaborate con provisioning viene concessa a una sottoscrizione a livello di area e limita il numero totale di unità elaborate con provisioning che possono essere distribuite in tale area in tutti i modelli e versioni.

La creazione di una nuova distribuzione richiede una quota disponibile (inutilizzata) per coprire le dimensioni desiderate della distribuzione. Ad esempio: se una sottoscrizione include quanto segue nell'area Stati Uniti centro-meridionali:

  • Quota unità elaborate con provisioning totale = 500
  • Distribuzioni:
    • 100 unità elaborate con provisioning: GPT-4o, 2024-05-13
    • 100 unità elaborate con provisioning: GPT-4, 0613

200 unità elaborate con provisioning vengono considerate come usate, quindi sono disponibili 300 unità elaborate con provisioning per creare nuove distribuzioni.

Una quota predefinita di unità elaborate con provisioning e con provisioning globale viene assegnata a tutte le sottoscrizioni in numerose aree. È possibile visualizzare la quota disponibile in un'area visitando il pannello Quote in Azure OpenAI Studio e selezionando la sottoscrizione e l'area desiderate. Ad esempio, lo screenshot seguente mostra un limite di quota di 500 unità elaborate con provisioning nell'area Stati Uniti occidentali per la sottoscrizione selezionata. Si noti che potrebbero essere visualizzati valori inferiori delle quote predefinite disponibili.

Screenshot della quota disponibile in Azure OpenAI Studio.

È possibile richiedere un aumento della quota facendo clic sul collegamento Richiedi quota a destra della colonna "Utilizzo/Limite". Questa parte non è inclusa nello screenshot precedente.

Creare una risorsa OpenAI di Azure

Le distribuzioni con provisioning e con provisioning globale vengono create tramite gli oggetti risorsa di Azure OpenAI all'interno di Azure. È necessario avere una risorsa Servizio OpenAI di Azure in ogni area in cui si intende creare una distribuzione. Usare il portale di Azure per creare una risorsa in un'area con quota disponibile, se necessario.

Nota

Le risorse Servizio OpenAI di Azure possono supportare più tipi di distribuzioni del servizio OpenAI di Azure contemporaneamente. Non è necessario dedicare nuove risorse per le distribuzioni con provisioning o con provisioning globale.

Creare la distribuzione con provisioning o con provisioning globale: la capacità è disponibile

dopo aver verificato la quota, è possibile creare una distribuzione. Per creare una distribuzione con provisioning, è possibile seguire questi passaggi; le scelte descritte riflettono le voci visualizzate nello screenshot.

Screenshot della pagina di distribuzione di Azure OpenAI Studio per una distribuzione con provisioning.

  1. Accedere a Azure OpenAI Studio

  2. Scegliere la sottoscrizione abilitata per le distribuzioni con provisioning e con provisioning globale, 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 il menu 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 di distribuzione viene usato nel codice per chiamare il modello tramite 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 per il filtro contenuto. Default
Tipo di distribuzione Ciò influisce sulla velocità effettiva e sulle prestazioni. Scegliere Gestito con provisioning o Gestito con provisioning globale per la distribuzione Gestito con provisioning
Unità elaborate con provisioning Scegliere la quantità di velocità effettiva da includere nella distribuzione. 100

Aspetti importanti da notare:

  • La finestra di dialogo Distribuzione mostra un promemoria che indica che è possibile acquistare una prenotazione di Azure per il servizio OpenAI di Azure con provisioning per ottenere uno sconto significativo a fronte di un impegno per un periodo specifico.

Dopo aver immesso le impostazioni di distribuzione, fare clic su Conferma prezzi per continuare. Verrà visualizzata una finestra di dialogo di conferma dei prezzi che visualizzerà il prezzo di listino per la distribuzione, se si sceglie di pagarla su base oraria, senza prenotazione di Azure per fornire uno sconto basato sulla durata.

Se non si è certi dei costi, annullare la distribuzione e procedere dopo aver compreso il modello di pagamento e i costi sottostanti per la distribuzione con provisioning. Questo passaggio potrebbe consentire di evitare addebiti imprevisti ed elevati nella fattura di pagamento. Le risorse per la formazione personale includono:

L'immagine seguente mostra la conferma dei prezzi visualizzata. Il prezzo mostrato è solo un esempio.

Screenshot che mostra la schermata di conferma dei prezzi.

Se si vuole creare la distribuzione a livello di codice, è possibile farlo con il comando dell'interfaccia della riga di comando di Azure seguente. Per specificare il tipo di distribuzione, modificare sku-name in ProvisionedManaged o GlobalProvisionedManaged in base al tipo di distribuzione previsto. Aggiornare sku-capacity 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

Per creare le distribuzioni è anche possibile usare REST, un modello di ARM, Bicep e Terraform. Vedere la sezione sull'automazione delle distribuzioni nella guida pratica Gestione delle quote e sostituire sku.name con "ProvisionedManaged" o “GlobalProvisionedManaged” anziché "Standard".

Creare la distribuzione con provisioning o con provisioning globale: la capacità non è disponibile

A causa della natura dinamica della disponibilità della capacità, è possibile che l'area della risorsa selezionata non disponga della capacità del servizio di creare la distribuzione del modello, della versione e del numero di unità elaborate con provisioning specificati.

In questo caso, Azure OpenAI Studio indirizza l'utente ad altre aree con la quota e la capacità disponibili per creare una distribuzione del modello desiderato. In uno scenario di questo tipo, la finestra di dialogo Distribuzione sarà simile alla seguente:

Screenshot della pagina della distribuzione di Azure OpenAI Studio per una distribuzione con provisioning senza capacità disponibile.

Aspetti da considerare:

  • Viene visualizzato un messaggio che mostra il numero di unità elaborate con provisioning presenti nella quota disponibile e il numero di unità che possono essere distribuite in questo momento.
  • Se si seleziona un numero di unità elaborate con provisioning maggiore della capacità del servizio, verrà visualizzato un messaggio che fornisce altre opzioni per ottenere una maggiore capacità e un pulsante per consentire di selezionare un'area alternativa. Facendo clic sul pulsante "Visualizza altre aree" verrà visualizzata una finestra di dialogo che mostra un elenco di risorse Servizio OpenAI di Azure in cui è possibile creare una distribuzione, insieme alla distribuzione di dimensioni massime che è possibile creare in base alla capacità del servizio e della quota disponibile in ogni area.

Screenshot della pagina Distribuzione di Azure OpenAI Studio per la scelta di una risorsa e un'area diverse.

Se si seleziona una risorsa e si fa clic su Cambia risorsa verrà visualizzata nuovamente la finestra di dialogo Distribuzione usando la risorsa selezionata. È quindi possibile procedere alla creazione della distribuzione nella nuova area.

Acquistare facoltativamente una prenotazione

Dopo la creazione della distribuzione, è possibile acquistare una prenotazione di Azure per usufruire di uno sconto a fronte di un impegno per un periodo specifico. Una prenotazione di Azure può offrire uno sconto sostanziale sulla tariffa oraria per gli utenti che intendono usare la distribuzione oltre alcuni giorni.

Per altre informazioni sul modello di acquisto e sulle prenotazioni, vedere:

Importante

La disponibilità della capacità per le distribuzioni di modelli è dinamica e cambia frequentemente tra aree e modelli. Per evitare di acquistare una prenotazione per un numero di unità elaborate con provisioning (PTU) superiore a quanto sia possibile usare, creare prima le distribuzioni e quindi acquistare la prenotazione di Azure per coprire le PTU distribuite. Questa procedura consigliata garantisce che sia possibile sfruttare appieno lo sconto sulla prenotazione ed evitare l'acquisto di un impegno a termine che non è possibile usare.

Effettuare le prime chiamate di inferenza

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. Se è la prima volta che si usano questi modelli a livello di codice, è consigliabile iniziare con la guida di avvio rapido. È consigliabile usare la libreria OpenAI con la versione 1.0 o successiva perché include la logica di retry 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 la produzione, usare un metodo sicuro per l'archiviazione e l'accesso alle proprie credenziali, ad esempio Azure Key Vault. Per altre informazioni sulla sicurezza delle credenziali, vedere l'articolo sulla sicurezza dei servizi di Azure AI.

Informazioni sulla velocità effettiva prevista

La quantità di velocità effettiva che è possibile ottenere nell'endpoint varia in base al numero di unità elaborate con provisioning distribuite, alle dimensioni di input, alle dimensioni di output e alla frequenza delle chiamate. 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 calcolo della capacità per una stima del dimensionamento. È possibile trovare il calcolo 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 benchmarking.

Misurare l'utilizzo della distribuzione

Quando si distribuisce un numero specificato di unità elaborate con provisioning (PTU), una quantità impostata di velocità effettiva di inferenza viene resa disponibile. 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 quando l'utilizzo supera il 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 alle 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 Metriche selezionare la metrica "Utilizzo gestito con provisioning V2". Se nella risorsa sono presenti più distribuzioni, è anche necessario dividere i valori in base a ogni distribuzione facendo clic sul pulsante "Applica suddivisione".

Screenshot dell'utilizzo gestito con provisioning nel pannello delle metriche della risorsa nel portale di Azure.

Per altre informazioni sul monitoraggio delle distribuzioni, vedere la pagina del servizioMonitoraggio del Servizio OpenAI di Azure.

Gestione dell'utilizzo elevato

Le distribuzioni con provisioning forniscono una quantità allocata di capacità di calcolo per eseguire un determinato modello. La metrica ‘Utilizzo gestito con provisioning’ in Monitoraggio di Azure misura l'utilizzo della distribuzione con incrementi di un minuto. Anche le distribuzioni gestite con provisioning sono ottimizzate in modo che le chiamate accettate vengano elaborate con una latenza massima costante 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 intestazioni di risposta retry-after e retry-after-ms che forniscono il tempo rispettivamente in secondi e millisecondi. Questo approccio mantiene le destinazioni di latenza per chiamata, offrendo allo sviluppatore il controllo su come gestire situazioni di carico elevato, ad esempio riprovare o deviare verso un'altra esperienza/endpoint.

Cosa bisogna fare quando si riceve una risposta 429?

Una risposta 429 indica che le PTU allocate vengono usate completamente al momento della chiamata. La risposta include le intestazioni retry-after-ms e retry-after che indicano il tempo di attesa prima che la chiamata successiva venga accettata. 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 tempo di retry-after-ms 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 verso un utilizzo elevato, ma 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 429 risposte per impostazione predefinita e dietro le quinte nel client (fino al massimo dei tentativi). Le librerie rispettano il tempo di retry-after. È 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 prestazioni esatte e le funzionalità di 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 i benchmark nella distribuzione. Lo strumento viene fornito con diverse possibili forme di carico di lavoro preconfigurate e restituisce le metriche delle prestazioni chiave. Altre informazioni sullo strumento e sulle impostazioni di configurazione nel repository GitHub: https://aka.ms/aoai/benchmarking.

È consigliabile il flusso di lavoro seguente:

  1. Stimare le PTU di velocità effettiva usando il calcolo della capacità.
  2. Eseguire un benchmark con questa forma di traffico per un lungo periodo di tempo (più di 10 min) per osservare i risultati in uno stato stabile.
  3. Osservare l'utilizzo, i token elaborati e i valori della frequenza di chiamata 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 del servizio OpenAI di Azure o una logica personalizzata.

Passaggi successivi