Personalizzare un modello con l'ottimizzazione

Il servizio Azure OpenAI consente di personalizzare i modelli in base ai set di dati personali usando un processo noto come ottimizzazione. Questa personalizzazione consente di ottenere di più dal servizio, fornendo:

  • Risultati di qualità più elevati rispetto a ciò che è possibile ottenere solo dalla progettazione prompt
  • La possibilità di eseguire il training su più esempi di quanto possa rientrare nel limite massimo di contesto di richiesta di un modello.
  • Risparmio di token dovuto a richieste più brevi
  • Richieste di bassa latenza, in particolare quando si usano modelli più piccoli.

A differenza dell'apprendimento con pochi scatti, l'ottimizzazione migliora il modello eseguendo il training su molti più esempi rispetto a quanto possibile in un prompt, consentendo di ottenere risultati migliori su un numero elevato di attività. Poiché l'ottimizzazione regola i pesi del modello di base per migliorare le prestazioni per l'attività specifica, non sarà necessario includere tutti gli esempi o le istruzioni nel prompt. Ciò significa meno testo inviato e meno token elaborati in ogni chiamata API, con un potenziale risparmio sui costi e miglioramento della latenza delle richieste.

Usiamo LoRA, o approssimazione con classificazione bassa, per ottimizzare i modelli in modo da ridurre la complessità senza influire significativamente sulle prestazioni. Questo metodo funziona approssimando la matrice originale di rango elevato con un rango inferiore, ottimizzando così solo un subset più piccolo di parametri "importanti" durante la fase di training supervisionata, rendendo il modello più gestibile ed efficiente. Per gli utenti, questo rende il training più veloce e più conveniente rispetto ad altre tecniche.

Prerequisiti

Nota

Attualmente, è necessario inviare un'applicazione per accedere al servizio Azure OpenAI. Per richiedere l'accesso, completare il modulo.

Modelli

I modelli seguenti supportano l'ottimizzazione:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)

Consultare la pagina dei modelli per verificare quali aree supportano attualmente l'ottimizzazione.

Esaminare il flusso di lavoro per Azure OpenAI Studio

Esaminare il flusso di lavoro di ottimizzazione per l'uso di Azure OpenAI Studio:

  1. Preparare i dati di training e convalida.
  2. Usare la procedura guidata Crea modello personalizzato in Azure OpenAI Studio per eseguire il training del modello personalizzato.
    1. Selezionare un modello di base.
    2. Scegliere i dati di training.
    3. Facoltativamente, scegliere i dati di convalida.
    4. Facoltativamente, configurare le opzioni avanzate per il processo di ottimizzazione.
    5. Esaminare le scelte ed eseguire il training del nuovo modello personalizzato.
  3. Controllare lo stato del modello personalizzato ottimizzato.
  4. Distribuire il modello personalizzato da usare.
  5. Usare il modello personalizzato.
  6. Facoltativamente, analizzare il modello personalizzato per ottenere prestazioni e adattabilità.

Preparare i dati di training e convalida

I dati di training e i set di dati di convalida sono costituiti da esempi di input e output per il modo in cui si vuole eseguire il modello.

Diversi tipi di modello richiedono un formato diverso dei dati di training.

I dati di training e convalida usati devono essere formattati come documento JSON Lines (JSONL). Per gpt-35-turbo-0613 il set di dati di ottimizzazione fine deve essere formattato nel formato di conversazione usato dall'API completamento chat .

Per una procedura dettagliata sull'ottimizzazione di un gpt-35-turbo-0613 modello, vedere l'esercitazione sull'ottimizzazione guidata di Azure OpenAI

Formato di file di esempio

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Formato di file chat a più turni

Sono supportati anche più turni di una conversazione in una singola riga del file di training jsonl. Per ignorare l'ottimizzazione su messaggi di assistente specifici, aggiungere la coppia di valori di chiave facoltativa weight . Attualmente weight può essere impostato su 0 o 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Oltre al formato JSONL, i file di dati di training e convalida devono essere codificati in UTF-8 e includere un indicatore di ordine byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Creare set di dati di training e convalida

Più esempi di training sono disponibili, meglio è. L'ottimizzazione dei processi non procederà senza almeno 10 esempi di training, ma un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. È consigliabile fornire centinaia, se non migliaia, di esempi di formazione per avere successo.

In generale, il raddoppio delle dimensioni del set di dati può comportare un aumento lineare della qualità del modello. Tenere tuttavia presente che gli esempi di bassa qualità possono influire negativamente sulle prestazioni. Se si esegue il training del modello su una grande quantità di dati interni, senza prima eliminare il set di dati solo per gli esempi di qualità più elevati, è possibile ottenere un modello che comporta prestazioni molto peggiori del previsto.

Usare la creazione guidata modello personalizzato

Azure OpenAI Studio offre la procedura guidata Crea modello personalizzato, in modo da poter creare ed eseguire il training interattivo di un modello ottimizzato per la risorsa di Azure.

  1. Aprire Azure OpenAI Studio all'indirizzo https://oai.azure.com/ e accedere con le credenziali che hanno accesso alla risorsa OpenAI di Azure. Durante il flusso di lavoro di accesso selezionare la directory appropriata, la sottoscrizione di Azure e la risorsa Azure OpenAI.

  2. In Azure OpenAI Studio passare al riquadro Modelli di gestione > e selezionare Crea un modello personalizzato.

    Screenshot che mostra come accedere alla procedura guidata Crea modello personalizzato in Azure OpenAI Studio.

Verrà visualizzata la procedura guidata Crea modello personalizzato.

Selezionare il modello di base

Il primo passaggio per la creazione di un modello personalizzato consiste nel scegliere un modello di base. Il riquadro Modello di base consente di scegliere un modello di base da usare per il modello personalizzato. La scelta influisce sia sulle prestazioni che sul costo del modello.

Selezionare il modello di base dall'elenco a discesa Tipo di modello di base e quindi selezionare Avanti per continuare.

È possibile creare un modello personalizzato da uno dei modelli di base disponibili seguenti:

  • babbage-002

  • davinci-002

  • gpt-35-turbo (0613)

  • gpt-35-turbo (1106)

  • In alternativa, è possibile ottimizzare un modello ottimizzato in precedenza, formattato come base-model.ft-{jobid}.

Screenshot delle opzioni del modello con un modello personalizzato ottimizzato.

Per altre informazioni sui modelli di base che possono essere ottimizzati, vedere Modelli.

Scegliere i dati del training

Il passaggio successivo consiste nella scelta dei dati di training preparati esistenti o nel caricamento di nuovi dati di training preparati da usare durante la personalizzazione del modello. Il riquadro Dati di training visualizza tutti i set di dati caricati in precedenza esistenti e offre anche opzioni per caricare nuovi dati di training.

Screenshot del riquadro Dati di training per la procedura guidata Crea modello personalizzato in Azure OpenAI Studio.

Per i file di dati di grandi dimensioni, è consigliabile importare da un archivio BLOB di Azure. I file di grandi dimensioni possono diventare instabili quando vengono caricati tramite moduli in più parti, perché le richieste sono atomiche e non possono essere ritentate o riprese. Per altre informazioni sulle Archiviazione BLOB di Azure, vedere Che cos'è Archiviazione BLOB di Azure?

Nota

I file di dati di training devono essere formattati come file JSONL, codificati in UTF-8 con un indicatore di ordine dei byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Caricare i dati di training dal file locale

È possibile caricare un nuovo set di dati di training nel servizio da un file locale usando uno dei metodi seguenti:

  • Trascinare e rilasciare il file nell'area client del riquadro Dati di training e quindi selezionare Carica file.

  • Selezionare Sfoglia file nell'area client del riquadro Dati di training, scegliere il file da caricare nella finestra di dialogo Apri e quindi selezionare Carica file.

Dopo aver selezionato e caricato il set di dati di training, selezionare Avanti per continuare.

Screenshot del riquadro Dati di training per la creazione guidata modello personalizzato con le opzioni del file locale.

Importare dati di training dall'archivio BLOB di Azure

È possibile importare un set di dati di training da BLOB di Azure o da un altro percorso Web condiviso specificando il nome e il percorso del file.

  1. Immettere il nome file per il file.

  2. Per il percorso File specificare l'URL del BLOB di Azure, l'Archiviazione di Azure firma di accesso condiviso (SAS) o un altro collegamento a un percorso Web condiviso accessibile.

  3. Selezionare Carica file per importare il set di dati di training nel servizio.

Dopo aver selezionato e caricato il set di dati di training, selezionare Avanti per continuare.

Screenshot del riquadro Dati di training per la creazione guidata modello personalizzato, con le opzioni BLOB di Azure e percorso Web condiviso.

Scegliere i dati di convalida

Il passaggio successivo offre opzioni per configurare il modello in modo da usare i dati di convalida nel processo di training. Se non si vogliono usare i dati di convalida, è possibile scegliere Avanti per continuare con le opzioni avanzate per il modello. In caso contrario, se si dispone di un set di dati di convalida, è possibile scegliere i dati di convalida preparati esistenti o caricare nuovi dati di convalida preparati da usare durante la personalizzazione del modello.

Il riquadro Dati di convalida visualizza tutti i set di dati di training e convalida caricati in precedenza esistenti e offre opzioni in base alle quali è possibile caricare nuovi dati di convalida.

Screenshot del riquadro Dati di convalida per la creazione guidata modello personalizzato in Azure OpenAI Studio.

Per i file di dati di grandi dimensioni, è consigliabile importare da un archivio BLOB di Azure. I file di grandi dimensioni possono diventare instabili quando vengono caricati tramite moduli in più parti, perché le richieste sono atomiche e non possono essere ritentate o riprese.

Nota

Analogamente ai file di dati di training, i file di dati di convalida devono essere formattati come file JSONL, codificati in UTF-8 con un indicatore di ordine byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Caricare i dati di convalida dal file locale

È possibile caricare un nuovo set di dati di convalida nel servizio da un file locale usando uno dei metodi seguenti:

  • Trascinare e rilasciare il file nell'area client del riquadro Dati di convalida e quindi selezionare Carica file.

  • Selezionare Sfoglia file nell'area client del riquadro Dati di convalida, scegliere il file da caricare nella finestra di dialogo Apri e quindi selezionare Carica file.

Dopo aver selezionato e caricato il set di dati di convalida, selezionare Avanti per continuare.

Screenshot del riquadro Dati di convalida per la creazione guidata modello personalizzato con le opzioni del file locale.

Importare dati di convalida dall'archivio BLOB di Azure

È possibile importare un set di dati di convalida da BLOB di Azure o da un altro percorso Web condiviso specificando il nome e il percorso del file.

  1. Immettere il nome file per il file.

  2. Per il percorso File specificare l'URL del BLOB di Azure, l'Archiviazione di Azure firma di accesso condiviso (SAS) o un altro collegamento a un percorso Web condiviso accessibile.

  3. Selezionare Carica file per importare il set di dati di training nel servizio.

Dopo aver selezionato e caricato il set di dati di convalida, selezionare Avanti per continuare.

Screenshot del riquadro Dati di convalida per la creazione guidata modello personalizzato, con le opzioni BLOB di Azure e percorso Web condiviso.

Configurare le opzioni avanzate

La procedura guidata Crea modello personalizzato mostra gli iperparametri per il training del modello ottimizzato nel riquadro Opzioni avanzate . Sono disponibili gli iperparametri seguenti:

Nome Tipo Descrizione
batch_size integer Dimensioni del batch da usare per il training. Le dimensioni del batch sono il numero di esempi di training usati per eseguire il training di un singolo passaggio avanti e indietro. In generale, è stato rilevato che le dimensioni dei batch più grandi tendono a funzionare meglio per set di dati di dimensioni maggiori. Il valore predefinito e il valore massimo per questa proprietà sono specifici di un modello di base. Una dimensione batch maggiore indica che i parametri del modello vengono aggiornati meno frequentemente, ma con varianza inferiore.
learning_rate_multiplier number Il moltiplicatore della frequenza di apprendimento da usare per il training. La frequenza di apprendimento di ottimizzazione è la velocità di apprendimento originale usata per il pre-training moltiplicato per questo valore. I tassi di apprendimento più elevati tendono a ottenere prestazioni migliori con dimensioni batch maggiori. È consigliabile provare con i valori compresi nell'intervallo da 0,02 a 0,2 per vedere quali risultati producono i risultati migliori. Una frequenza di apprendimento più piccola può essere utile per evitare l'overfitting.
n_epochs integer Numero di periodi per cui eseguire il training del modello. Un periodo fa riferimento a un ciclo completo attraverso il set di dati di training.

Screenshot del riquadro Opzioni avanzate per la creazione guidata modello personalizzato, con le opzioni predefinite selezionate.

Selezionare Predefinito per usare i valori predefiniti per il processo di ottimizzazione fine oppure selezionare Avanzate per visualizzare e modificare i valori degli iperparametri. Quando vengono selezionate le impostazioni predefinite, viene determinato il valore corretto in modo algoritmico in base ai dati di training.

Dopo aver configurato le opzioni avanzate, selezionare Avanti per esaminare le scelte ed eseguire il training del modello ottimizzato.

Esaminare le scelte ed eseguire il training del modello

Nel riquadro Verifica della procedura guidata vengono visualizzate informazioni sulle scelte di configurazione.

Screenshot del riquadro Revisione per la procedura guidata Crea modello personalizzato in Azure OpenAI Studio.

Se si è pronti per eseguire il training del modello, selezionare Avvia processo di training per avviare il processo di ottimizzazione e tornare al riquadro Modelli .

Controllare lo stato del modello personalizzato

Nel riquadro Modelli vengono visualizzate informazioni sul modello personalizzato nella scheda Modelli personalizzati. La scheda include informazioni sullo stato e sull'ID processo del processo di ottimizzazione per il modello personalizzato. Al termine del processo, nella scheda viene visualizzato l'ID file del file di risultato. Potrebbe essere necessario selezionare Aggiorna per visualizzare lo stato aggiornato per il processo di training del modello.

Screenshot del riquadro Modelli di Azure OpenAI Studio con un modello personalizzato visualizzato.

Dopo aver avviato un processo di ottimizzazione, il completamento può richiedere del tempo. Il processo potrebbe essere in coda dietro altri processi nel sistema. Il training del modello può richiedere minuti o ore a seconda delle dimensioni del modello e del set di dati.

Ecco alcune delle attività che è possibile eseguire nel riquadro Modelli :

  • Controllare lo stato del processo di ottimizzazione per il modello personalizzato nella colonna Stato della scheda Modelli personalizzati.

  • Nella colonna Nome modello selezionare il nome del modello per visualizzare altre informazioni sul modello personalizzato. È possibile visualizzare lo stato del processo di ottimizzazione, dei risultati del training, degli eventi di training e degli iperparametri usati nel processo.

  • Selezionare Scarica file di training per scaricare i dati di training usati per il modello.

  • Selezionare Scarica risultati per scaricare il file dei risultati allegato al processo di ottimizzazione per il modello e analizzare il modello personalizzato per ottenere prestazioni di training e convalida.

  • Selezionare Aggiorna per aggiornare le informazioni sulla pagina.

Screenshot del riquadro Modelli in Azure OpenAI Studio con un modello personalizzato visualizzato.

Distribuire un modello personalizzato

Quando il processo di ottimizzazione ha esito positivo, è possibile distribuire il modello personalizzato dal riquadro Modelli . È necessario distribuire il modello personalizzato per renderlo disponibile per l'uso con le chiamate di completamento.

Importante

Dopo aver distribuito un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione viene eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni fa e non sono stati effettuati completamenti o chiamate di completamento della chat durante un periodo di 15 giorni continuo.

L'eliminazione di una distribuzione inattiva non elimina o influisce sul modello personalizzato sottostante e il modello personalizzato può essere ridistribuito in qualsiasi momento. Come descritto in Prezzi del servizio OpenAI di Azure, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario indipendentemente dal fatto che vengano effettuate chiamate di completamento o completamento della chat al modello. Per altre informazioni sulla pianificazione e la gestione dei costi con Azure OpenAI, vedere le linee guida in Pianificare la gestione dei costi per il servizio Azure OpenAI.

Nota

Per un modello personalizzato è consentita una sola distribuzione. Se si seleziona un modello personalizzato già distribuito, viene visualizzato un messaggio di errore.

Per distribuire il modello personalizzato, selezionare il modello personalizzato da distribuire e quindi selezionare Distribuisci modello.

Screenshot che mostra come distribuire un modello personalizzato in Azure OpenAI Studio.

Verrà visualizzata la finestra di dialogo Distribuisci modello . Nella finestra di dialogo immettere il nome della distribuzione e quindi selezionare Crea per avviare la distribuzione del modello personalizzato.

Screenshot della finestra di dialogo Distribuisci modello in Azure OpenAI Studio.

È possibile monitorare lo stato di avanzamento della distribuzione nel riquadro Distribuzioni in Azure OpenAI Studio.

Distribuzione tra aree

L'ottimizzazione consente di distribuire un modello ottimizzato in un'area diversa da quella in cui il modello è stato originariamente ottimizzato. È anche possibile eseguire la distribuzione in una sottoscrizione o un'area diversa.

Le uniche limitazioni sono che la nuova area deve supportare anche l'ottimizzazione e quando si distribuisce una sottoscrizione incrociata, l'account che genera il token di autorizzazione per la distribuzione deve avere accesso sia alle sottoscrizioni di origine che a quella di destinazione.

La distribuzione tra sottoscrizioni/aree può essere eseguita tramite Python o REST.

Usare un modello personalizzato distribuito

Dopo la distribuzione del modello personalizzato, è possibile usarlo come qualsiasi altro modello distribuito. È possibile usare Playgrounds in Azure OpenAI Studio per sperimentare la nuova distribuzione. È possibile continuare a usare gli stessi parametri con il modello personalizzato, ad esempio temperature e max_tokens, come è possibile usare altri modelli distribuiti. Per i modelli e davinci-002 ottimizzati babbage-002 si useranno il playground Completions e l'API Completions. Per i modelli ottimizzati gpt-35-turbo-0613 si useranno il playground chat e l'API di completamento della chat.

Screenshot del riquadro Playground in Azure OpenAI Studio con le sezioni evidenziate.

Analizzare il modello personalizzato

Azure OpenAI collega un file di risultato denominato results.csv a ogni processo di ottimizzazione al termine del processo. È possibile usare il file dei risultati per analizzare le prestazioni di training e convalida del modello personalizzato. L'ID file per il file di risultato è elencato per ogni modello personalizzato nella colonna ID file risultato nel riquadro Modelli per Azure OpenAI Studio. È possibile usare l'ID file per identificare e scaricare il file di risultato dal riquadro File di dati di Azure OpenAI Studio.

Il file di risultato è un file CSV che contiene una riga di intestazione e una riga per ogni passaggio di training eseguito dal processo di ottimizzazione. Il file dei risultati contiene le colonne seguenti:

Nome colonna Descrizione
step Numero del passaggio di training. Un passaggio di training rappresenta un singolo passaggio, avanti e indietro, in un batch di dati di training.
train_loss Perdita per il batch di training.
training_accuracy Percentuale di completamenti nel batch di training per cui i token stimati del modello corrispondono esattamente ai token di completamento reali.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,67 (2 di 3) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
train_mean_token_accuracy Percentuale di token nel batch di training stimata correttamente dal modello.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
valid_loss Perdita per il batch di convalida.
valid_accuracy Percentuale di completamenti nel batch di convalida per cui i token stimati del modello corrispondono esattamente ai token di completamento reali.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,67 (2 di 3) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
validation_mean_token_accuracy Percentuale di token nel batch di convalida stimata correttamente dal modello.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].

È anche possibile visualizzare i dati nel file results.csv come tracciati in Azure OpenAI Studio. Selezionare il collegamento per il modello sottoposto a training e verranno visualizzati tre grafici: perdita, accuratezza del token medio e accuratezza del token. Se sono stati forniti dati di convalida, entrambi i set di dati verranno visualizzati nello stesso tracciato.

Cercare la perdita per diminuire nel tempo e l'accuratezza da aumentare. Se viene visualizzata una divergenza tra i dati di training e di convalida, ciò potrebbe indicare che si esegue l'overfitting. Provare a eseguire il training con meno periodi o a un moltiplicatore di frequenza di apprendimento più piccolo.

Pulire le distribuzioni, i modelli personalizzati e i file di training

Al termine del modello personalizzato, è possibile eliminare la distribuzione e il modello. È anche possibile eliminare i file di training e convalida caricati nel servizio, se necessario.

Eliminare la distribuzione del modello

Importante

Dopo aver distribuito un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione viene eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni fa e non sono stati effettuati completamenti o chiamate di completamento della chat durante un periodo di 15 giorni continuo.

L'eliminazione di una distribuzione inattiva non elimina o influisce sul modello personalizzato sottostante e il modello personalizzato può essere ridistribuito in qualsiasi momento. Come descritto in Prezzi del servizio OpenAI di Azure, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario indipendentemente dal fatto che vengano effettuate chiamate di completamento o completamento della chat al modello. Per altre informazioni sulla pianificazione e la gestione dei costi con Azure OpenAI, vedere le linee guida in Pianificare la gestione dei costi per il servizio Azure OpenAI.

È possibile eliminare la distribuzione per il modello personalizzato nel riquadro Distribuzioni in Azure OpenAI Studio. Selezionare la distribuzione da eliminare, quindi selezionare Elimina per eliminare la distribuzione.

Eliminare il modello personalizzato

È possibile eliminare un modello personalizzato nel riquadro Modelli in Azure OpenAI Studio. Selezionare il modello personalizzato da eliminare dalla scheda Modelli personalizzati e quindi selezionare Elimina per eliminare il modello personalizzato.

Nota

Non è possibile eliminare un modello personalizzato se ha una distribuzione esistente. Prima di poter eliminare il modello personalizzato, è necessario eliminare la distribuzione del modello.

Eliminare i file di training

Facoltativamente, è possibile eliminare i file di training e convalida caricati per il training e i file di risultato generati durante il training nel riquadro File di dati di gestione>in Azure OpenAI Studio. Selezionare il file da eliminare, quindi selezionare Elimina per eliminare il file.

Ottimizzazione continua

Dopo aver creato un modello ottimizzato, è possibile continuare a perfezionare il modello nel tempo tramite un'ulteriore ottimizzazione. L'ottimizzazione continua è il processo iterativo per selezionare un modello già ottimizzato come modello di base e ottimizzarlo ulteriormente sui nuovi set di esempi di training.

Per eseguire l'ottimizzazione su un modello ottimizzato in precedenza, è necessario usare lo stesso processo descritto in Creare un modello personalizzato, ma invece di specificare il nome di un modello di base generico, è necessario specificare il modello già ottimizzato. Un modello personalizzato ottimizzato sarà simile al seguente gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

Screenshot dell'interfaccia utente crea un modello personalizzato con un modello ottimizzato evidenziato.

È anche consigliabile includere il suffix parametro per semplificare la distinzione tra iterazioni diverse del modello ottimizzato. suffix accetta una stringa e viene impostata per identificare il modello ottimizzato. Con l'API Python OpenAI è supportata una stringa di un massimo di 18 caratteri che verrà aggiunta al nome del modello ottimizzato.

Nota

Studio AI della piattaforma Azure è attualmente disponibile in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Prerequisiti

Nota

Attualmente, è necessario inviare un'applicazione per accedere al servizio Azure OpenAI. Per richiedere l'accesso, completare il modulo.

Modelli

I modelli seguenti supportano l'ottimizzazione:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)

Consultare la pagina dei modelli per verificare quali aree supportano attualmente l'ottimizzazione.

Esaminare il flusso di lavoro per Azure AI Studio

Esaminare il flusso di lavoro di ottimizzazione per l'uso di Azure AI Studio:

  1. Preparare i dati di training e convalida.
  2. Usare la procedura guidata Ottimizzare il modello in Azure AI Studio per eseguire il training del modello personalizzato.
    1. Selezionare un modello.
    2. Scegliere i dati di training.
    3. Facoltativamente, scegliere i dati di convalida.
    4. Facoltativamente, configurare i parametri per il processo di ottimizzazione.
    5. Esaminare le scelte ed eseguire il training del nuovo modello personalizzato.
  3. Controllare lo stato del modello ottimizzato.
  4. Facoltativamente, analizzare il modello ottimizzato per ottenere prestazioni e adattamento.
  5. Distribuire il modello ottimizzato per l'uso.
  6. Usare il modello ottimizzato.

Preparare i dati di training e convalida

I dati di training e i set di dati di convalida sono costituiti da esempi di input e output per il modo in cui si vuole eseguire il modello.

Diversi tipi di modello richiedono un formato diverso dei dati di training.

I dati di training e convalida usati devono essere formattati come documento JSON Lines (JSONL). Per gpt-35-turbo-0613 il set di dati di ottimizzazione fine deve essere formattato nel formato di conversazione usato dall'API completamento chat .

Per una procedura dettagliata sull'ottimizzazione di un gpt-35-turbo-0613 modello, vedere l'esercitazione sull'ottimizzazione guidata di Azure OpenAI.

Formato di file di esempio

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Formato di file chat a più turni

Sono supportati anche più turni di una conversazione in una singola riga del file di training jsonl. Per ignorare l'ottimizzazione su messaggi di assistente specifici, aggiungere la coppia di valori di chiave facoltativa weight . Attualmente weight può essere impostato su 0 o 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Oltre al formato JSONL, i file di dati di training e convalida devono essere codificati in UTF-8 e includere un indicatore di ordine byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Creare set di dati di training e convalida

Più esempi di training sono disponibili, meglio è. L'ottimizzazione dei processi non procederà senza almeno 10 esempi di training, ma un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. È consigliabile fornire centinaia, se non migliaia, di esempi di formazione per avere successo.

In generale, il raddoppio delle dimensioni del set di dati può comportare un aumento lineare della qualità del modello. Tenere tuttavia presente che gli esempi di bassa qualità possono influire negativamente sulle prestazioni. Se si esegue il training del modello su una grande quantità di dati interni, senza prima eliminare il set di dati solo per gli esempi di qualità più elevati, è possibile ottenere un modello che comporta prestazioni molto peggiori del previsto.

Creare il modello ottimizzato

Per ottimizzare un modello OpenAI di Azure in un progetto di Azure AI Studio esistente, seguire questa procedura:

  1. Accedere a Studio AI della piattaforma Azure e selezionare il progetto dalla pagina Compilazione. Se non si ha già un progetto, crearne prima di tutto uno.

  2. Dal menu a sinistra comprimibile selezionare Fine-tuning>+ Fine-tune model (Ottimizza modello).

    Screenshot dell'opzione per iniziare a creare un nuovo modello ottimizzato.

Selezionare il modello di base

  1. Selezionare un modello di base da ottimizzare. La scelta influisce sia sulle prestazioni che sul costo del modello. In questo esempio si sceglie il gpt-35-turbo modello. Selezionare quindi Conferma.

    Screenshot dell'opzione per selezionare un modello da ottimizzare.

  2. Per gpt-35-turbo le diverse versioni disponibili per l'ottimizzazione, scegliere la versione che si vuole ottimizzare. Sceglieremo (0125).

  3. È anche consigliabile includere il suffix parametro per semplificare la distinzione tra iterazioni diverse del modello ottimizzato. suffix accetta una stringa e viene impostata per identificare il modello ottimizzato. Con l'API Python OpenAI è supportata una stringa di un massimo di 18 caratteri che verrà aggiunta al nome del modello ottimizzato.

Se sono abilitate più connessioni OpenAI di Azure per l'ottimizzazione, scegliere la risorsa da usare. Si noti che tutti gli utenti con accesso alla risorsa OpenAI di Azure avranno accesso a questo modello ottimizzato.

  1. Quindi seleziona Avanti.

    Screenshot delle impostazioni di base per l'ottimizzazione di un modello.

Scegliere i dati del training

Il passaggio successivo consiste nella scelta dei dati di training preparati esistenti o nel caricamento di nuovi dati di training preparati da usare durante la personalizzazione del modello. Il riquadro Dati di training visualizza tutti i set di dati caricati in precedenza esistenti e offre anche opzioni per caricare nuovi dati di training.

Screenshot del riquadro Dati di training per la procedura guidata Ottimizzare il modello in Azure AI Studio.

  • Se i dati di training sono già presenti nel progetto, selezionare Dati in Azure AI Studio.

    • Selezionare il file dall'elenco visualizzato nel riquadro Dati di training.
  • Se i dati di training sono già stati caricati nel servizio Azure OpenAI, selezionare la connessione OpenAI di Azure in Azure OpenAI Connessione ion.

  • Per caricare i dati di training per ottimizzare il modello, selezionare Carica dati e quindi carica file.

    • Assicurarsi che tutti gli esempi di training seguano il formato previsto per l'inferenza. Per ottimizzare i modelli in modo efficace, assicurarsi di usare un set di dati bilanciato e diversificato. Ciò comporta mantenere un equilibrio dei dati, inclusi vari scenari, nonché affinare periodicamente i dati di training per allinearsi alle aspettative del mondo reale, portando infine a risposte del modello più accurate e bilanciate. Per altre informazioni, vedere Preparazione dei dati.
    • Per i file di dati di grandi dimensioni, è consigliabile importare da un archivio BLOB di Azure. I file di grandi dimensioni possono diventare instabili quando vengono caricati tramite moduli in più parti, perché le richieste sono atomiche e non possono essere ritentate o riprese. Per altre informazioni sulle Archiviazione BLOB di Azure, vedere Che cos'è Archiviazione BLOB di Azure?

Nota

I file di dati di training devono essere formattati come file JSONL, codificati in UTF-8 con un indicatore di ordine dei byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Screenshot dell'opzione per caricare i dati di training in locale.

Dopo il caricamento dei file, verrà visualizzata un'anteprima dei dati di training. Selezionare Avanti per continuare.

Screenshot dell'anteprima dei dati di training.

Scegliere i dati di convalida

Facoltativamente, è possibile scegliere di fornire dati di convalida per ottimizzare il modello. Se non si vogliono usare i dati di convalida, è possibile selezionare Nessuno e selezionare Avanti per continuare con le opzioni avanzate per il modello.

In caso contrario, se si dispone di un set di dati di convalida, è possibile scegliere tra i dati caricati in precedenza o caricare i dati di convalida appena preparati da usare per ottimizzare il modello.

Nota

Analogamente ai file di dati di training, i file di dati di convalida devono essere formattati come file JSONL, codificati in UTF-8 con un indicatore di ordine byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Configurare i parametri

Facoltativamente, configurare i parametri per il processo di ottimizzazione. Sono disponibili le funzioni seguenti:

Nome Tipo Descrizione
batch_size integer Dimensioni del batch da usare per il training. Le dimensioni del batch sono il numero di esempi di training usati per eseguire il training di un singolo passaggio avanti e indietro. In generale, è stato rilevato che le dimensioni dei batch più grandi tendono a funzionare meglio per set di dati di dimensioni maggiori. Il valore predefinito e il valore massimo per questa proprietà sono specifici di un modello di base. Una dimensione batch maggiore indica che i parametri del modello vengono aggiornati meno frequentemente, ma con varianza inferiore. Se impostato su -1, batch_size viene calcolato come 0,2% degli esempi nel set di training e il valore massimo è 256.
learning_rate_multiplier number Il moltiplicatore della frequenza di apprendimento da usare per il training. La frequenza di apprendimento di ottimizzazione è la velocità di apprendimento originale usata per il pre-training moltiplicato per questo valore. I tassi di apprendimento più elevati tendono a ottenere prestazioni migliori con dimensioni batch maggiori. È consigliabile provare con i valori compresi nell'intervallo da 0,02 a 0,2 per vedere quali risultati producono i risultati migliori. Una frequenza di apprendimento più piccola può essere utile per evitare l'overfitting.
n_epochs integer Numero di periodi per cui eseguire il training del modello. Un periodo fa riferimento a un ciclo completo attraverso il set di dati di training. Se impostato su -1, il numero di periodi viene determinato in modo dinamico in base ai dati di input.

È possibile scegliere di lasciare la configurazione predefinita o personalizzare i valori in base alle proprie preferenze. Al termine dell'esecuzione delle configurazioni, selezionare Avanti.

Esaminare le scelte ed eseguire il training del modello

Esaminare le scelte effettuate e selezionare Invia per avviare il training del nuovo modello ottimizzato.

Controllare lo stato del modello ottimizzato

Dopo aver inviato il processo di ottimizzazione, viene visualizzata una pagina con i dettagli sul modello ottimizzato. È possibile trovare lo stato e altre informazioni sul modello ottimizzato nella pagina Compilare>modelli di ottimizzazione>in Azure AI Studio.

Screenshot della pagina con lo stato del modello ottimizzato e altre informazioni.

Il processo potrebbe essere in coda dietro altri processi nel sistema. Il training del modello può richiedere minuti o ore a seconda delle dimensioni del modello e del set di dati.

Analizzare il modello ottimizzato

Al termine dell'ottimizzazione, è possibile scaricare un file di risultati denominato results.csv dalla pagina del modello ottimizzata nella scheda Dettagli . È possibile usare il file dei risultati per analizzare le prestazioni di training e convalida del modello personalizzato.

Il file di risultato è un file CSV che contiene una riga di intestazione e una riga per ogni passaggio di training eseguito dal processo di ottimizzazione. Il file dei risultati contiene le colonne seguenti:

Nome colonna Descrizione
step Numero del passaggio di training. Un passaggio di training rappresenta un singolo passaggio, avanti e indietro, in un batch di dati di training.
train_loss Perdita per il batch di training.
training_accuracy Percentuale di completamenti nel batch di training per cui i token stimati del modello corrispondono esattamente ai token di completamento reali.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,67 (2 di 3) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
train_mean_token_accuracy Percentuale di token nel batch di training stimata correttamente dal modello.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
valid_loss Perdita per il batch di convalida.
valid_accuracy Percentuale di completamenti nel batch di convalida per cui i token stimati del modello corrispondono esattamente ai token di completamento reali.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,67 (2 di 3) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
validation_mean_token_accuracy Percentuale di token nel batch di convalida stimata correttamente dal modello.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].

È anche possibile visualizzare i dati nel file results.csv come tracciati in Azure AI Studio nella scheda Metriche del modello ottimizzato. Selezionare il collegamento per il modello sottoposto a training e verranno visualizzati tre grafici: perdita, accuratezza del token medio e accuratezza del token. Se sono stati forniti dati di convalida, entrambi i set di dati verranno visualizzati nello stesso tracciato.

Cercare la perdita per diminuire nel tempo e l'accuratezza da aumentare. Se viene visualizzata una divergenza tra i dati di training e di convalida che potrebbero indicare l'overfitting. Provare a eseguire il training con meno periodi o a un moltiplicatore di frequenza di apprendimento più piccolo.

Distribuire un modello ottimizzato

Dopo aver ottimizzato il modello, è possibile distribuire il modello e usarlo nella propria applicazione. È possibile distribuire il modello ottimizzato dalla pagina Playground o Distribuzioni . Quando si distribuisce il modello, il modello viene reso disponibile per l'inferenza e viene addebitato un addebito orario per l'hosting. I modelli ottimizzati, tuttavia, possono essere archiviati in Azure AI Studio senza costi finché non si è pronti per usarli.

Importante

Dopo aver distribuito un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione viene eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni fa e non sono stati effettuati completamenti o chiamate di completamento della chat durante un periodo di 15 giorni continuo.

L'eliminazione di una distribuzione inattiva non elimina o influisce sul modello personalizzato sottostante e il modello personalizzato può essere ridistribuito in qualsiasi momento. Come descritto in Prezzi del servizio OpenAI di Azure, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario indipendentemente dal fatto che vengano effettuate chiamate di completamento o completamento della chat al modello. Per altre informazioni sulla pianificazione e la gestione dei costi con Azure OpenAI, vedere le linee guida in Pianificare la gestione dei costi per il servizio Azure OpenAI.

Nota

Per un modello ottimizzato è consentita una sola distribuzione. Se si seleziona un modello ottimizzato già distribuito, viene visualizzato un messaggio di errore.

È possibile monitorare lo stato di avanzamento della distribuzione nella pagina Distribuzioni in Azure AI Studio.

Usare un modello ottimizzato per la distribuzione

Dopo la distribuzione del modello ottimizzato, è possibile usarlo come qualsiasi altro modello distribuito. È possibile usare Playground in Azure AI Studio per sperimentare la nuova distribuzione. È anche possibile usare l'API REST per chiamare il modello ottimizzato dall'applicazione. È anche possibile iniziare a usare questo nuovo modello ottimizzato nel flusso di richiesta per compilare l'applicazione di intelligenza artificiale generativa.

Nota

Per i modelli di chat, il messaggio di sistema usato per guidare il modello ottimizzato (sia distribuito o disponibile per i test nel playground) deve corrispondere al messaggio di sistema usato per il training. Se si usa un messaggio di sistema diverso, il modello potrebbe non funzionare come previsto.

Pulire le distribuzioni, ottimizzare i modelli e i file di training

Al termine del modello ottimizzato, è possibile eliminare la distribuzione e il modello. È anche possibile eliminare i file di training e convalida caricati nel servizio, se necessario.

Eliminare la distribuzione del modello ottimizzata

Importante

Dopo aver distribuito un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione viene eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni fa e non sono stati effettuati completamenti o chiamate di completamento della chat durante un periodo di 15 giorni continuo.

L'eliminazione di una distribuzione inattiva non elimina o influisce sul modello personalizzato sottostante e il modello personalizzato può essere ridistribuito in qualsiasi momento. Come descritto in Prezzi del servizio OpenAI di Azure, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario indipendentemente dal fatto che vengano effettuate chiamate di completamento o completamento della chat al modello. Per altre informazioni sulla pianificazione e la gestione dei costi con Azure OpenAI, vedere le linee guida in Pianificare la gestione dei costi per il servizio Azure OpenAI.

È possibile eliminare la distribuzione per il modello ottimizzato nella pagina Distribuzioni in Azure AI Studio. Selezionare la distribuzione da eliminare, quindi selezionare Elimina per eliminare la distribuzione.

Eliminare il modello ottimizzato

È possibile eliminare un modello ottimizzato nella pagina Ottimizzazione in Azure AI Studio. Selezionare il modello ottimizzato per eliminare e quindi selezionare Elimina per eliminare il modello ottimizzato.

Nota

Non è possibile eliminare un modello ottimizzato se ha una distribuzione esistente. Prima di poter eliminare il modello ottimizzato, è necessario eliminare la distribuzione del modello.

Eliminare i file di training

Facoltativamente, è possibile eliminare i file di training e convalida caricati per il training e i file dei risultati generati durante il training. Per questo è necessario passare ad Azure OpenAI Studio e passare al riquadro File di dati di gestione>. Selezionare il file da eliminare, quindi selezionare Elimina per eliminare il file.

Prerequisiti

  • Leggere la guida all'ottimizzazione di Quando usare Azure OpenAI.
  • Una sottoscrizione di Azure. Crearne una gratuitamente.
  • Accesso concesso ad Azure OpenAI nella sottoscrizione di Azure desiderata.
  • Una risorsa OpenAI di Azure. Per altre informazioni, vedere Creare una risorsa e distribuire un modello con Azure OpenAI.
  • Le librerie Python seguenti: os, json, requests, openai.
  • La libreria Python OpenAI deve essere almeno la versione 0.28.1.
  • Per ottimizzare l'accesso è necessario il collaboratore OpenAI di Servizi cognitivi.
  • Se non si ha già accesso alla quota di visualizzazione e si distribuiscono modelli in Azure OpenAI Studio, saranno necessarie autorizzazioni aggiuntive.

Nota

Attualmente, è necessario inviare un'applicazione per accedere al servizio Azure OpenAI. Per richiedere l'accesso, completare il modulo.

Modelli

I modelli seguenti supportano l'ottimizzazione:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)

In alternativa, è possibile ottimizzare un modello ottimizzato in precedenza, formattato come base-model.ft-{jobid}.

Screenshot delle opzioni del modello con un modello personalizzato ottimizzato.

Consultare la pagina dei modelli per verificare quali aree supportano attualmente l'ottimizzazione.

Esaminare il flusso di lavoro per Python SDK

Esaminare il flusso di lavoro di ottimizzazione per l'uso di Python SDK con Azure OpenAI:

  1. Preparare i dati di training e convalida.
  2. Selezionare un modello di base.
  3. Caricare i dati di training.
  4. Eseguire il training del nuovo modello personalizzato.
  5. Controllare lo stato del modello personalizzato.
  6. Distribuire il modello personalizzato da usare.
  7. Usare il modello personalizzato.
  8. Facoltativamente, analizzare il modello personalizzato per ottenere prestazioni e adattamento.

Preparare i dati di training e convalida

I dati di training e i set di dati di convalida sono costituiti da esempi di input e output per il modo in cui si vuole eseguire il modello.

Diversi tipi di modello richiedono un formato diverso dei dati di training.

I dati di training e convalida usati devono essere formattati come documento JSON Lines (JSONL). Per gpt-35-turbo-0613 il set di dati di ottimizzazione fine deve essere formattato nel formato di conversazione usato dall'API completamento chat .

Per una procedura dettagliata sull'ottimizzazione, gpt-35-turbo-0613 vedere l'esercitazione sull'ottimizzazione di Azure OpenAI

Formato di file di esempio

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Formato di file chat a più turni

Sono supportati anche più turni di una conversazione in una singola riga del file di training jsonl. Per ignorare l'ottimizzazione su messaggi di assistente specifici, aggiungere la coppia di valori di chiave facoltativa weight . Attualmente weight può essere impostato su 0 o 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Oltre al formato JSONL, i file di dati di training e convalida devono essere codificati in UTF-8 e includere un indicatore di ordine byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Creare set di dati di training e convalida

Più esempi di training sono disponibili, meglio è. L'ottimizzazione dei processi non procederà senza almeno 10 esempi di training, ma un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. È consigliabile fornire centinaia, se non migliaia, di esempi di formazione per avere successo.

In generale, il raddoppio delle dimensioni del set di dati può comportare un aumento lineare della qualità del modello. Tenere tuttavia presente che gli esempi di bassa qualità possono influire negativamente sulle prestazioni. Se si esegue il training del modello su una grande quantità di dati interni, senza prima eliminare il set di dati solo per gli esempi di qualità più elevati, è possibile ottenere un modello che comporta prestazioni molto peggiori del previsto.

Caricare i dati di training

Il passaggio successivo consiste nella scelta dei dati di training preparati esistenti o nel caricamento di nuovi dati di training preparati da usare durante la personalizzazione del modello. Dopo aver preparato i dati di training, è possibile caricare i file nel servizio. Esistono due modi per caricare i dati di training:

Per i file di dati di grandi dimensioni, è consigliabile importare da un archivio BLOB di Azure. I file di grandi dimensioni possono diventare instabili quando vengono caricati tramite moduli in più parti, perché le richieste sono atomiche e non possono essere ritentate o riprese. Per altre informazioni su Archiviazione BLOB di Azure, vedere Che cos’è l’archiviazione BLOB di Azure?

Nota

I file di dati di training devono essere formattati come file JSONL, codificati in UTF-8 con un indicatore di ordine dei byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

L'esempio python seguente carica i file di training e convalida locali usando Python SDK e recupera gli ID file restituiti.

# Upload fine-tuning files

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"  # This API version or later is required to access fine-tuning for turbo/babbage-002/davinci-002
)

training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'

# Upload the training and validation dataset files to Azure OpenAI with the SDK.

training_response = client.files.create(
    file=open(training_file_name, "rb"), purpose="fine-tune"
)
training_file_id = training_response.id

validation_response = client.files.create(
    file=open(validation_file_name, "rb"), purpose="fine-tune"
)
validation_file_id = validation_response.id

print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)

Creare un modello personalizzato

Dopo aver caricato i file di training e convalida, si è pronti per avviare il processo di ottimizzazione.

Il codice Python seguente illustra un esempio di come creare un nuovo processo di ottimizzazione con Python SDK:

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613" # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

È anche possibile passare parametri facoltativi aggiuntivi, ad esempio gli iperparametri, per assumere un maggiore controllo del processo di ottimizzazione. Per il training iniziale, è consigliabile usare le impostazioni predefinite automatiche presenti senza specificare questi parametri.

Gli iperparametri attualmente supportati per l'ottimizzazione sono:

Nome Tipo Descrizione
batch_size integer Dimensioni del batch da usare per il training. Le dimensioni del batch sono il numero di esempi di training usati per eseguire il training di un singolo passaggio avanti e indietro. In generale, è stato rilevato che le dimensioni dei batch più grandi tendono a funzionare meglio per set di dati di dimensioni maggiori. Il valore predefinito e il valore massimo per questa proprietà sono specifici di un modello di base. Una dimensione batch maggiore indica che i parametri del modello vengono aggiornati meno frequentemente, ma con varianza inferiore.
learning_rate_multiplier number Il moltiplicatore della frequenza di apprendimento da usare per il training. La frequenza di apprendimento di ottimizzazione è la velocità di apprendimento originale usata per il pre-training moltiplicato per questo valore. I tassi di apprendimento più elevati tendono a ottenere prestazioni migliori con dimensioni batch maggiori. È consigliabile provare con i valori compresi nell'intervallo da 0,02 a 0,2 per vedere quali risultati producono i risultati migliori. Un tasso di apprendimento inferiore può essere utile per evitare l'overfitting.
n_epochs integer Numero di periodi per cui eseguire il training del modello. Un periodo fa riferimento a un ciclo completo attraverso il set di dati di training.

Per impostare iperparametri personalizzati con la versione 1.x dell'API Python OpenAI:

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"  # This API version or later is required to access fine-tuning for turbo/babbage-002/davinci-002
)

client.fine_tuning.jobs.create(
  training_file="file-abc123", 
  model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
  hyperparameters={
    "n_epochs":2
  }
)

Controllare lo stato del processo di ottimizzazione

response = client.fine_tuning.jobs.retrieve(job_id)

print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))

Distribuire un modello personalizzato

Quando il processo di ottimizzazione ha esito positivo, il valore della fine_tuned_model variabile nel corpo della risposta viene impostato sul nome del modello personalizzato. Il modello è ora disponibile anche per l'individuazione dall'API Modelli di elenco. Tuttavia, non è possibile eseguire chiamate di completamento al modello personalizzato finché non viene distribuito il modello personalizzato. È necessario distribuire il modello personalizzato per renderlo disponibile per l'uso con le chiamate di completamento.

Importante

Dopo aver distribuito un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione viene eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni fa e non sono stati effettuati completamenti o chiamate di completamento della chat durante un periodo di 15 giorni continuo.

L'eliminazione di una distribuzione inattiva non elimina o influisce sul modello personalizzato sottostante e il modello personalizzato può essere ridistribuito in qualsiasi momento. Come descritto in Prezzi del servizio OpenAI di Azure, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario indipendentemente dal fatto che vengano effettuate chiamate di completamento o completamento della chat al modello. Per altre informazioni sulla pianificazione e la gestione dei costi con Azure OpenAI, vedere le linee guida in Pianificare la gestione dei costi per il servizio Azure OpenAI.

È possibile usare Azure OpenAI o l'interfaccia della riga di comando di Azure per distribuire il modello personalizzato.

Nota

Per un modello personalizzato è consentita una sola distribuzione. Se si seleziona un modello personalizzato già distribuito, si verifica un errore.

Distribuire un modello ottimizzato

A differenza dei comandi DELL'SDK precedenti, la distribuzione deve essere eseguita usando l'API del piano di controllo che richiede un'autorizzazione separata, un percorso API diverso e una versione diversa dell'API.

Variabile Definizione
token Esistono diversi modi per generare un token di autorizzazione. Il metodo più semplice per i test iniziali consiste nell'avviare Cloud Shell dalla portale di Azure. Quindi eseguire az account get-access-token. È possibile usare questo token come token di autorizzazione temporaneo per il test dell'API. È consigliabile archiviare questo valore in una nuova variabile di ambiente
sottoscrizione ID sottoscrizione per la risorsa Azure OpenAI associata
resource_group Nome del gruppo di risorse per la risorsa OpenAI di Azure
resource_name Nome della risorsa OpenAI di Azure
model_deployment_name Nome personalizzato per la nuova distribuzione del modello ottimizzata. Questo è il nome a cui verrà fatto riferimento nel codice quando si effettuano chiamate di completamento della chat.
fine_tuned_model Recuperare questo valore dai risultati del processo di ottimizzazione nel passaggio precedente. Sarà simile a gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83. Sarà necessario aggiungere tale valore al deploy_data json.
import json
import os
import requests

token= os.getenv("<TOKEN>") 
subscription = "<YOUR_SUBSCRIPTION_ID>"  
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}

deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83
            "version": "1"
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

Distribuzione tra aree

L'ottimizzazione consente di distribuire un modello ottimizzato in un'area diversa da quella in cui il modello è stato originariamente ottimizzato. È anche possibile eseguire la distribuzione in una sottoscrizione o un'area diversa.

Le uniche limitazioni sono che la nuova area deve supportare anche l'ottimizzazione e quando si distribuisce una sottoscrizione incrociata, l'account che genera il token di autorizzazione per la distribuzione deve avere accesso sia alle sottoscrizioni di origine che a quella di destinazione.

Di seguito è riportato un esempio di distribuzione di un modello ottimizzato in una sottoscrizione/area in un'altra.

import json
import os
import requests

token= os.getenv("<TOKEN>") 

subscription = "<DESTINATION_SUBSCRIPTION_ID>"  
resource_group = "<DESTINATION_RESOURCE_GROUP_NAME>"
resource_name = "<DESTINATION_AZURE_OPENAI_RESOURCE_NAME>"

source_subscription = "<SOURCE_SUBSCRIPTION_ID>"
source_resource_group = "<SOURCE_RESOURCE_GROUP>"
source_resource = "<SOURCE_RESOURCE>"


source = f'/subscriptions/{source_subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_resource}'

model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}



deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"FINE_TUNED_MODEL_NAME">, # This value will look like gpt-35-turbo-0613.ft-0ab3f80e4f2242929258fff45b56a9ce 
            "version": "1",
            "source": source
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

Per eseguire la distribuzione tra la stessa sottoscrizione, ma le aree diverse includono solo gruppi di sottoscrizioni e risorse identiche per le variabili di origine e di destinazione e solo i nomi delle risorse di origine e di destinazione devono essere univoci.

Distribuire un modello con l’interfaccia della riga di comando di Azure

L'esempio seguente illustra come usare l'interfaccia della riga di comando di Azure per distribuire il modello personalizzato. Con l'interfaccia della riga di comando di Azure è necessario specificare un nome per la distribuzione del modello personalizzato. Per altre informazioni su come usare l'interfaccia della riga di comando di Azure per distribuire modelli personalizzati, vedere az cognitiveservices account deployment.

Per eseguire questo comando dell'interfaccia della riga di comando di Azure in una finestra della console, è necessario sostituire i segnaposto> seguenti <con i valori corrispondenti per il modello personalizzato:

Segnaposto Valore
<YOUR_AZURE_SUBSCRIPTION> Nome o ID della propria sottoscrizione di Azure.
<YOUR_RESOURCE_GROUP> Nome del gruppo di risorse di Azure.
<YOUR_RESOURCE_NAME> Nome della risorsa OpenAI di Azure.
<YOUR_DEPLOYMENT_NAME> Nome da usare per la distribuzione del modello.
<YOUR_FINE_TUNED_MODEL_ID> Nome del modello personalizzato.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

Usare un modello personalizzato distribuito

Dopo la distribuzione del modello personalizzato, è possibile usarlo come qualsiasi altro modello distribuito. È possibile usare Playgrounds in Azure OpenAI Studio per sperimentare la nuova distribuzione. È possibile continuare a usare gli stessi parametri con il modello personalizzato, ad esempio temperature e max_tokens, come è possibile usare altri modelli distribuiti. Per i modelli e davinci-002 ottimizzati babbage-002 si useranno il playground Completions e l'API Completions. Per i modelli ottimizzati gpt-35-turbo-0613 si useranno il playground chat e l'API di completamento della chat.

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-35-turbo-ft", # model = "Custom deployment name you chose for your fine-tuning model"
    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)

Analizzare il modello personalizzato

Azure OpenAI allega un file di risultati denominato results.csv a ogni processo di ottimizzazione dopo il completamento. È possibile usare il file dei risultati per analizzare le prestazioni del training e convalidare del modello personalizzato. L'ID file per il file dei risultati è elencato per ogni modello personalizzato ed è possibile usare Python SDK per recuperare l'ID file e scaricare il file di risultato per l'analisi.

L'esempio python seguente recupera l'ID file del primo file di risultato allegato al processo di ottimizzazione per il modello personalizzato e quindi usa Python SDK per scaricare il file nella directory di lavoro per l'analisi.

# Retrieve the file ID of the first result file from the fine-tuning job
# for the customized model.
response = client.fine_tuning.jobs.retrieve(job_id)
if response.status == 'succeeded':
    result_file_id = response.result_files[0]

retrieve = client.files.retrieve(result_file_id)

# Download the result file.
print(f'Downloading result file: {result_file_id}')

with open(retrieve.filename, "wb") as file:
    result = client.files.content(result_file_id).read()
    file.write(result)

Il file di risultato è un file CSV che contiene una riga di intestazione e una riga per ogni passaggio di training eseguito dal processo di ottimizzazione. Il file dei risultati contiene le colonne seguenti:

Nome colonna Descrizione
step Numero del passaggio di training. Un passaggio di training rappresenta un singolo passaggio, avanti e indietro, in un batch di dati di training.
train_loss Perdita per il batch di training.
training_accuracy Percentuale di completamenti nel batch di training per cui i token stimati del modello corrispondono esattamente ai token di completamento reali.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,67 (2 di 3) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
train_mean_token_accuracy Percentuale di token nel batch di training stimata correttamente dal modello.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
valid_loss Perdita per il batch di convalida.
valid_accuracy Percentuale di completamenti nel batch di convalida per cui i token stimati del modello corrispondono esattamente ai token di completamento reali.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,67 (2 di 3) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
validation_mean_token_accuracy Percentuale di token nel batch di convalida stimata correttamente dal modello.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].

È anche possibile visualizzare i dati nel file results.csv come tracciati in Azure OpenAI Studio. Selezionare il collegamento per il modello sottoposto a training e verranno visualizzati tre grafici: perdita, accuratezza del token medio e accuratezza del token. Se sono stati forniti dati di convalida, entrambi i set di dati verranno visualizzati nello stesso tracciato.

Cercare la perdita per diminuire nel tempo e l'accuratezza da aumentare. Se viene visualizzata una divergenza tra i dati di training e di convalida, ciò potrebbe indicare che si esegue l'overfitting. Provare a eseguire il training con meno periodi o a un moltiplicatore di frequenza di apprendimento più piccolo.

Pulire le distribuzioni, i modelli personalizzati e i file di training

Al termine del modello personalizzato, è possibile eliminare la distribuzione e il modello. È anche possibile eliminare i file di training e convalida caricati nel servizio, se necessario.

Eliminare la distribuzione del modello

Importante

Dopo aver distribuito un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione viene eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni fa e non sono stati effettuati completamenti o chiamate di completamento della chat durante un periodo di 15 giorni continuo.

L'eliminazione di una distribuzione inattiva non elimina o influisce sul modello personalizzato sottostante e il modello personalizzato può essere ridistribuito in qualsiasi momento. Come descritto in Prezzi del servizio OpenAI di Azure, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario indipendentemente dal fatto che vengano effettuate chiamate di completamento o completamento della chat al modello. Per altre informazioni sulla pianificazione e la gestione dei costi con Azure OpenAI, vedere le linee guida in Pianificare la gestione dei costi per il servizio Azure OpenAI.

È possibile usare vari metodi per eliminare la distribuzione per il modello personalizzato:

Eliminare il modello personalizzato

Analogamente, è possibile usare vari metodi per eliminare il modello personalizzato:

Nota

Non è possibile eliminare un modello personalizzato se ha una distribuzione esistente. Prima di poter eliminare il modello personalizzato, è necessario eliminare la distribuzione del modello.

Eliminare i file di training

Facoltativamente, è possibile eliminare i file di training e convalida caricati per il training e i file dei risultati generati durante il training dalla sottoscrizione di Azure OpenAI. È possibile usare i metodi seguenti per eliminare i file di training, convalida e risultato:

L'esempio python seguente usa Python SDK per eliminare i file di training, convalida e risultato per il modello personalizzato:

print('Checking for existing uploaded files.')
results = []

# Get the complete list of uploaded files in our subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')

# Enumerate all uploaded files, extracting the file IDs for the
# files with file names that match your training dataset file and
# validation dataset file names.
for item in files:
    if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
        results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')

# Enumerate the file IDs for our files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
    openai.File.delete(sid = id)

Ottimizzazione continua

Dopo aver creato un modello ottimizzato, è possibile continuare a perfezionare il modello nel tempo tramite un'ulteriore ottimizzazione. L'ottimizzazione continua è il processo iterativo per selezionare un modello già ottimizzato come modello di base e ottimizzarlo ulteriormente sui nuovi set di esempi di training.

Per eseguire l'ottimizzazione su un modello ottimizzato in precedenza, è necessario usare lo stesso processo descritto in Creare un modello personalizzato, ma invece di specificare il nome di un modello di base generico, è necessario specificare l'ID del modello già ottimizzato. L'ID modello ottimizzato è simile al seguente gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

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.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7" # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

È anche consigliabile includere il suffix parametro per semplificare la distinzione tra iterazioni diverse del modello ottimizzato. suffix accetta una stringa e viene impostata per identificare il modello ottimizzato. Con l'API Python OpenAI è supportata una stringa di un massimo di 18 caratteri che verrà aggiunta al nome del modello ottimizzato.

Se non si è certi dell'ID del modello ottimizzato esistente, queste informazioni sono disponibili nella pagina Modelli di Azure OpenAI Studio oppure è possibile generare un elenco di modelli per una determinata risorsa OpenAI di Azure usando l'API REST.

Prerequisiti

Nota

Attualmente, è necessario inviare un'applicazione per accedere al servizio Azure OpenAI. Per richiedere l'accesso, completare il modulo.

Modelli

I modelli seguenti supportano l'ottimizzazione:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)

Consultare la pagina dei modelli per verificare quali aree supportano attualmente l'ottimizzazione.

Esaminare il flusso di lavoro per l'API REST

Esaminare il flusso di lavoro di ottimizzazione per l'uso delle API REST e Python con Azure OpenAI:

  1. Preparare i dati di training e convalida.
  2. Selezionare un modello di base.
  3. Caricare i dati di training.
  4. Eseguire il training del nuovo modello personalizzato.
  5. Controllare lo stato del modello personalizzato.
  6. Distribuire il modello personalizzato da usare.
  7. Usare il modello personalizzato.
  8. Facoltativamente, analizzare il modello personalizzato per ottenere prestazioni e adattamento.

Preparare i dati di training e convalida

I dati di training e i set di dati di convalida sono costituiti da esempi di input e output per il modo in cui si vuole eseguire il modello.

Diversi tipi di modello richiedono un formato diverso dei dati di training.

I dati di training e convalida usati devono essere formattati come documento JSON Lines (JSONL). Per gpt-35-turbo-0613 e altri modelli correlati, il set di dati di ottimizzazione deve essere formattato nel formato di conversazione usato dall'API completamento chat.

Per una procedura dettagliata sull'ottimizzazione, gpt-35-turbo-0613 vedere l'esercitazione sull'ottimizzazione di Azure OpenAI

Formato di file di esempio

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Formato di file chat a più turni

Sono supportati anche più turni di una conversazione in una singola riga del file di training jsonl. Per ignorare l'ottimizzazione su messaggi di assistente specifici, aggiungere la coppia di valori di chiave facoltativa weight . Attualmente weight può essere impostato su 0 o 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

Oltre al formato JSONL, i file di dati di training e convalida devono essere codificati in UTF-8 e includere un indicatore di ordine byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Creare set di dati di training e convalida

Più esempi di training sono disponibili, meglio è. L'ottimizzazione dei processi non procederà senza almeno 10 esempi di training, ma un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. È consigliabile fornire centinaia, se non migliaia, di esempi di formazione per avere successo.

In generale, il raddoppio delle dimensioni del set di dati può comportare un aumento lineare della qualità del modello. Tenere tuttavia presente che gli esempi di bassa qualità possono influire negativamente sulle prestazioni. Se si esegue il training del modello su una grande quantità di dati interni senza prima eseguire l'eliminazione del set di dati solo per gli esempi di qualità più elevata, è possibile che si verifichi un modello molto peggiore del previsto.

Selezionare il modello di base

Il primo passaggio per la creazione di un modello personalizzato consiste nel scegliere un modello di base. Il riquadro Modello di base consente di scegliere un modello di base da usare per il modello personalizzato. La scelta influisce sia sulle prestazioni che sul costo del modello.

Selezionare il modello di base dall'elenco a discesa Tipo di modello di base e quindi selezionare Avanti per continuare.

È possibile creare un modello personalizzato da uno dei modelli di base disponibili seguenti:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)

In alternativa, è possibile ottimizzare un modello ottimizzato in precedenza, formattato come base-model.ft-{jobid}.

Screenshot delle opzioni del modello con un modello personalizzato ottimizzato.

Per altre informazioni sui modelli di base che possono essere ottimizzati, vedere Modelli.

Caricare i dati di training

Il passaggio successivo consiste nel scegliere i dati di training preparati esistenti o caricare nuovi dati di training preparati da usare durante l'ottimizzazione del modello. Dopo aver preparato i dati di training, è possibile caricare i file nel servizio. Esistono due modi per caricare i dati di training:

Per i file di dati di grandi dimensioni, è consigliabile importare da un archivio BLOB di Azure. I file di grandi dimensioni possono diventare instabili quando vengono caricati tramite moduli in più parti, perché le richieste sono atomiche e non possono essere ritentate o riprese. Per altre informazioni su Archiviazione BLOB di Azure, vedere Che cos’è l’archiviazione BLOB di Azure?

Nota

I file di dati di training devono essere formattati come file JSONL, codificati in UTF-8 con un indicatore di ordine dei byte (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Caricare i dati di training

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"

Caricare i dati di convalida

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"

Creare un modello personalizzato

Dopo aver caricato i file di training e convalida, si è pronti per avviare il processo di ottimizzazione. Il codice seguente illustra un esempio di come creare un nuovo processo di ottimizzazione con l'API REST:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "'<VALIDATION_FILE_ID>"
}'

È anche possibile passare parametri facoltativi aggiuntivi, ad esempio gli iperparametri, per assumere un maggiore controllo del processo di ottimizzazione. Per il training iniziale, è consigliabile usare le impostazioni predefinite automatiche presenti senza specificare questi parametri.

Gli iperparametri attualmente supportati per l'ottimizzazione sono:

Nome Tipo Descrizione
batch_size integer Dimensioni del batch da usare per il training. Le dimensioni del batch sono il numero di esempi di training usati per eseguire il training di un singolo passaggio avanti e indietro. In generale, è stato rilevato che le dimensioni dei batch più grandi tendono a funzionare meglio per set di dati di dimensioni maggiori. Il valore predefinito e il valore massimo per questa proprietà sono specifici di un modello di base. Una dimensione batch maggiore indica che i parametri del modello vengono aggiornati meno frequentemente, ma con varianza inferiore.
learning_rate_multiplier number Il moltiplicatore della frequenza di apprendimento da usare per il training. La frequenza di apprendimento di ottimizzazione è la velocità di apprendimento originale usata per il pre-training moltiplicato per questo valore. I tassi di apprendimento più elevati tendono a ottenere prestazioni migliori con dimensioni batch maggiori. È consigliabile provare con i valori compresi nell'intervallo da 0,02 a 0,2 per vedere quali risultati producono i risultati migliori. Un tasso di apprendimento inferiore può essere utile per evitare l'overfitting.
n_epochs integer Numero di periodi per cui eseguire il training del modello. Un periodo fa riferimento a un ciclo completo attraverso il set di dati di training.

Controllare lo stato del modello personalizzato

Dopo aver avviato un processo di ottimizzazione, il completamento può richiedere del tempo. Il processo potrebbe essere in coda dietro altri processi nel sistema. Il training del modello può richiedere minuti o ore a seconda delle dimensioni del modello e del set di dati. L'esempio seguente usa l'API REST per controllare lo stato del processo di ottimizzazione. L'esempio recupera informazioni sul processo usando l'ID processo restituito dall'esempio precedente:

curl -X GET $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<YOUR-JOB-ID>?api-version=2023-12-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Distribuire un modello personalizzato

Importante

Dopo aver distribuito un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione viene eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni fa e non sono stati effettuati completamenti o chiamate di completamento della chat durante un periodo di 15 giorni continuo.

L'eliminazione di una distribuzione inattiva non elimina o influisce sul modello personalizzato sottostante e il modello personalizzato può essere ridistribuito in qualsiasi momento. Come descritto in Prezzi del servizio OpenAI di Azure, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario indipendentemente dal fatto che vengano effettuate chiamate di completamento o completamento della chat al modello. Per altre informazioni sulla pianificazione e la gestione dei costi con Azure OpenAI, vedere le linee guida in Pianificare la gestione dei costi per il servizio Azure OpenAI.

L'esempio Python seguente illustra come usare l'API REST per creare una distribuzione del modello per il modello personalizzato. L'API REST genera un nome per la distribuzione del modello personalizzato.

Variabile Definizione
token Esistono diversi modi per generare un token di autorizzazione. Il metodo più semplice per i test iniziali consiste nell'avviare Cloud Shell dalla portale di Azure. Quindi eseguire az account get-access-token. È possibile usare questo token come token di autorizzazione temporaneo per il test dell'API. È consigliabile archiviare questo valore in una nuova variabile di ambiente
sottoscrizione ID sottoscrizione per la risorsa Azure OpenAI associata
resource_group Nome del gruppo di risorse per la risorsa OpenAI di Azure
resource_name Nome della risorsa OpenAI di Azure
model_deployment_name Nome personalizzato per la nuova distribuzione del modello ottimizzata. Questo è il nome a cui verrà fatto riferimento nel codice quando si effettuano chiamate di completamento della chat.
fine_tuned_model Recuperare questo valore dai risultati del processo di ottimizzazione nel passaggio precedente. Sarà simile a gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83. È necessario aggiungere tale valore al deploy_data json.
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>",
            "version": "1"
        }
    }
}'

Distribuzione tra aree

L'ottimizzazione consente di distribuire un modello ottimizzato in un'area diversa da quella in cui il modello è stato originariamente ottimizzato. È anche possibile eseguire la distribuzione in una sottoscrizione o un'area diversa.

Le uniche limitazioni sono che la nuova area deve supportare anche l'ottimizzazione e quando si distribuisce una sottoscrizione incrociata, l'account che genera il token di autorizzazione per la distribuzione deve avere accesso sia alle sottoscrizioni di origine che a quella di destinazione.

Di seguito è riportato un esempio di distribuzione di un modello ottimizzato in una sottoscrizione/area in un'altra.

curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>", 
            "version": "1",
            "source": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}" 
        }
    }
}'

Per eseguire la distribuzione tra la stessa sottoscrizione, ma aree diverse, è sufficiente disporre di sottoscrizioni e gruppi di risorse identici per le variabili di origine e di destinazione e solo i nomi delle risorse di origine e di destinazione devono essere univoci.

Distribuire un modello con l’interfaccia della riga di comando di Azure

L'esempio seguente illustra come usare l'interfaccia della riga di comando di Azure per distribuire il modello personalizzato. Con l'interfaccia della riga di comando di Azure è necessario specificare un nome per la distribuzione del modello personalizzato. Per altre informazioni su come usare l'interfaccia della riga di comando di Azure per distribuire modelli personalizzati, vedere az cognitiveservices account deployment.

Per eseguire questo comando dell'interfaccia della riga di comando di Azure in una finestra della console, è necessario sostituire i segnaposto> seguenti <con i valori corrispondenti per il modello personalizzato:

Segnaposto Valore
<YOUR_AZURE_SUBSCRIPTION> Nome o ID della propria sottoscrizione di Azure.
<YOUR_RESOURCE_GROUP> Nome del gruppo di risorse di Azure.
<YOUR_RESOURCE_NAME> Nome della risorsa OpenAI di Azure.
<YOUR_DEPLOYMENT_NAME> Nome da usare per la distribuzione del modello.
<YOUR_FINE_TUNED_MODEL_ID> Nome del modello personalizzato.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

Usare un modello personalizzato distribuito

Dopo la distribuzione del modello personalizzato, è possibile usarlo come qualsiasi altro modello distribuito. È possibile usare Playgrounds in Azure OpenAI Studio per sperimentare la nuova distribuzione. È possibile continuare a usare gli stessi parametri con il modello personalizzato, ad esempio temperature e max_tokens, come è possibile usare altri modelli distribuiti. Per i modelli e davinci-002 ottimizzati babbage-002 si useranno il playground Completions e l'API Completions. Per i modelli ottimizzati gpt-35-turbo-0613 si useranno il playground chat e l'API di completamento della chat.

curl $AZURE_OPENAI_ENDPOINT/openai/deployments/<deployment_name>/chat/completions?api-version=2023-05-15 \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{"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?"}]}'

Analizzare il modello personalizzato

Azure OpenAI allega un file di risultati denominato results.csv a ogni processo di ottimizzazione dopo il completamento. È possibile usare il file dei risultati per analizzare le prestazioni del training e convalidare del modello personalizzato. L'ID file per il file dei risultati è elencato per ogni modello personalizzato ed è possibile usare l’API REST per recuperare l'ID file e scaricare il file di risultato per l'analisi.

L'esempio di Python seguente usa l'API REST per recuperare l'ID file del primo file di risultato allegato al processo di ottimizzazione per il modello personalizzato e quindi scarica il file nella directory di lavoro per l'analisi.

curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<JOB_ID>?api-version=2023-12-01-preview" \
  -H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/files/<RESULT_FILE_ID>/content?api-version=2023-12-01-preview" \
    -H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>

Il file di risultato è un file CSV che contiene una riga di intestazione e una riga per ogni passaggio di training eseguito dal processo di ottimizzazione. Il file dei risultati contiene le colonne seguenti:

Nome colonna Descrizione
step Numero del passaggio di training. Un passaggio di training rappresenta un singolo passaggio, avanti e indietro, in un batch di dati di training.
train_loss Perdita per il batch di training.
training_accuracy Percentuale di completamenti nel batch di training per cui i token stimati del modello corrispondono esattamente ai token di completamento reali.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,67 (2 di 3) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
train_mean_token_accuracy Percentuale di token nel batch di training stimata correttamente dal modello.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
valid_loss Perdita per il batch di convalida.
valid_accuracy Percentuale di completamenti nel batch di convalida per cui i token stimati del modello corrispondono esattamente ai token di completamento reali.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,67 (2 di 3) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].
validation_mean_token_accuracy Percentuale di token nel batch di convalida stimata correttamente dal modello.
Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0,83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]].

È anche possibile visualizzare i dati nel file results.csv come tracciati in Azure OpenAI Studio. Selezionare il collegamento per il modello sottoposto a training e verranno visualizzati tre grafici: perdita, accuratezza del token medio e accuratezza del token. Se sono stati forniti dati di convalida, entrambi i set di dati verranno visualizzati nello stesso tracciato.

Cercare la perdita per diminuire nel tempo e l'accuratezza da aumentare. Se viene visualizzata una divergenza tra i dati di training e di convalida, ciò potrebbe indicare che si esegue l'overfitting. Provare a eseguire il training con meno periodi o a un moltiplicatore di frequenza di apprendimento più piccolo.

Pulire le distribuzioni, i modelli personalizzati e i file di training

Al termine del modello personalizzato, è possibile eliminare la distribuzione e il modello. È anche possibile eliminare i file di training e convalida caricati nel servizio, se necessario.

Eliminare la distribuzione del modello

È possibile usare vari metodi per eliminare la distribuzione per il modello personalizzato:

Eliminare il modello personalizzato

Analogamente, è possibile usare vari metodi per eliminare il modello personalizzato:

Nota

Non è possibile eliminare un modello personalizzato se ha una distribuzione esistente. Prima di poter eliminare il modello personalizzato, è necessario eliminare la distribuzione del modello.

Eliminare i file di training

Facoltativamente, è possibile eliminare i file di training e convalida caricati per il training e i file dei risultati generati durante il training dalla sottoscrizione di Azure OpenAI. È possibile usare i metodi seguenti per eliminare i file di training, convalida e risultato:

Ottimizzazione continua

Dopo aver creato un modello ottimizzato, è possibile continuare a perfezionare il modello nel tempo tramite un'ulteriore ottimizzazione. L'ottimizzazione continua è il processo iterativo per selezionare un modello già ottimizzato come modello di base e ottimizzarlo ulteriormente sui nuovi set di esempi di training.

Per eseguire l'ottimizzazione su un modello ottimizzato in precedenza, è necessario usare lo stesso processo descritto in Creare un modello personalizzato, ma invece di specificare il nome di un modello di base generico, è necessario specificare l'ID del modello già ottimizzato. L'ID modello ottimizzato è simile al seguente gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "suffix": "<additional text used to help identify fine-tuned models>"
}'

È anche consigliabile includere il suffix parametro per semplificare la distinzione tra iterazioni diverse del modello ottimizzato. suffix accetta una stringa e viene impostata per identificare il modello ottimizzato. Il suffisso può contenere fino a 40 caratteri (a-z, A-Z, 0-9 e _) che verranno aggiunti al nome del modello ottimizzato.

Se non si è certi dell'ID del modello ottimizzato, queste informazioni sono disponibili nella pagina Modelli di Azure OpenAI Studio oppure è possibile generare un elenco di modelli per una determinata risorsa OpenAI di Azure usando l'API REST.

Risoluzione dei problemi

Ricerca per categorie abilitare l'ottimizzazione? La creazione di un modello personalizzato è disattivata in Azure OpenAI Studio?

Per accedere correttamente all'ottimizzazione, è necessario assegnare Il collaboratore OpenAI di Servizi cognitivi. Anche un utente con autorizzazioni di Amministrazione istrator di alto livello richiederebbe comunque che questo account sia impostato in modo esplicito per accedere all'ottimizzazione. Per altre informazioni, vedere le linee guida per il controllo degli accessi in base al ruolo.

Perché il caricamento non è riuscito?

Se il caricamento del file non riesce, è possibile visualizzare il messaggio di errore in "file di dati" in Azure OpenAI Studio. Passare il puntatore del mouse su dove viene visualizzato "error" (sotto la colonna stato) e verrà visualizzata una spiegazione dell'errore.

Screenshot del messaggio di errore di ottimizzazione.

Il mio modello ottimizzato non sembra aver migliorato

  • Messaggio di sistema mancante: è necessario fornire un messaggio di sistema durante l'ottimizzazione. È necessario fornire lo stesso messaggio di sistema quando si usa il modello ottimizzato. Se si specifica un messaggio di sistema diverso, è possibile che vengano visualizzati risultati diversi rispetto a quelli ottimizzati.

  • Dati non sufficienti: mentre 10 è il minimo per l'esecuzione della pipeline, sono necessarie centinaia a migliaia di punti dati per insegnare al modello una nuova competenza. Troppi punti dati rischia di sovrafitting e scarsa generalizzazione. Il modello ottimizzato può essere efficace sui dati di training, ma scarsamente su altri dati perché ha memorizzato gli esempi di training anziché i modelli di apprendimento. Per ottenere risultati ottimali, pianificare la preparazione di un set di dati con centinaia o migliaia di punti dati.

  • Dati non valido: un set di dati non accurato o non rappresentativo produrrà un modello di bassa qualità. Il modello può apprendere modelli non accurati o distorti dal set di dati. Ad esempio, se si esegue il training di un chatbot per il servizio clienti, ma si forniscono solo i dati di training per uno scenario (ad esempio, restituisce un elemento) non saprà come rispondere ad altri scenari. In alternativa, se i dati di training non sono corretti (contengono risposte non corrette), il modello imparerà a fornire risultati non corretti.

Passaggi successivi

  • Esplorare le funzionalità di ottimizzazione nell'esercitazione sull'ottimizzazione di Azure OpenAI.
  • Esaminare la disponibilità a livello di area del modello di ottimizzazione
  • Altre informazioni sulle quote OpenAI di Azure