Share via


Personalizzare un modello con l'ottimizzazione

Il servizio Azure OpenAI consente di personalizzare i modelli in base ai set di dati personali usando il processo di 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 del 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 a 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. Verrà inviato meno testo e verranno elaborati meno token su ogni chiamata API, potenzialmente risparmiando costi e migliorando la 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 processo 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 questo modulo.

Modelli

I modelli seguenti supportano l'ottimizzazione:

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

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

Se si prevede di usare gpt-4 per l'ottimizzazione, vedere le linee guida per la valutazione della sicurezza dell'anteprima pubblica GPT-4

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 del training.
    3. Facoltativamente, scegliere i dati di convalida.
    4. Facoltativamente, configurare 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 prestazioni e adattamento del modello personalizzato.

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 dei dati di training differente.

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

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

Formato 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 multiturn

Sono inoltre supportati diversi turn 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 weight facoltativa. Attualmente è possibile impostare weight 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 byte order mark (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Creare i 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; tuttavia, un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. È consigliabile fornire centinaia, se non migliaia, di esempi di training 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 degli esempi di qualità più elevati, è possibile ottenere un modello che comporta prestazioni molto peggiori del previsto.

Usare la procedura guidata Crea modello personalizzato

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

  1. Aprire Azure OpenAI Studio in https://oai.azure.com/e accedere con le credenziali di accesso alla risorsa Azure OpenAI. 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 andare 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 nella scelta di 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 un modello di base dall'elenco a discesa Tipo di modello di base, 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)

  • gpt-35-turbo (0125)

  • gpt-4 (0613)

  • 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 esistenti caricati in precedenza e fornisce opzioni in base alle quali è possibile 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 eseguire l'importazione 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 byte order mark (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Caricare i dati di training da un 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, 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 procedura guidata Crea modello personalizzato con opzioni sui file locali.

Importare dati di training da un 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 del file specificare l'URL del BLOB di Azure, la firma di accesso condiviso di Archiviazione di Azure 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 procedura guidata Crea 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 desidera usare i dati di convalida, è possibile scegliere Avanti per andare alle 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 esistenti caricati in precedenza e fornisce opzioni in base alle quali è possibile caricare nuovi dati di convalida.

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

Per i file di dati di grandi dimensioni, è consigliabile eseguire l'importazione 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

Come i file di dati di training, anche i file di dati di convalida devono essere formattati come file JSONL, codificati in UTF-8 con un byte order mark (BOM) e devono avere dimensioni inferiori a 200 MB. Il file deve avere dimensioni inferiori a 512 MB.

Caricare i dati di convalida da un 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, 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 procedura guidata Crea modello personalizzato con opzioni sui file locali.

Importare dati di convalida da un 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 del file specificare l'URL del BLOB di Azure, la firma di accesso condiviso di Archiviazione di Azure 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 procedura guidata Crea modello personalizzato, con le opzioni BLOB di Azure e percorso Web condiviso.

Configurare le opzioni avanzate

La procedura guidata Crea modello personalizzato mostra i parametri per il training del modello ottimizzato nel riquadro Opzioni avanzate . Sono disponibili i parametri 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 velocità di apprendimento di ottimizzazione è la velocità di apprendimento originale usata per il training preliminare moltiplicata 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 tra 0,02 e 0,2 per vedere cosa produce 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.
seed integer Il valore di inizializzazione controlla la riproducibilità del processo. Il passaggio degli stessi parametri di inizializzazione e processo dovrebbe produrre gli stessi risultati, ma può differire in rari casi. Se non viene specificato un valore di inizializzazione, ne verrà generato uno automaticamente

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

Selezionare Predefinito per usare i valori predefiniti per il processo di ottimizzazione, oppure selezionare Avanzate per visualizzare e modificare i valori degli iperparametri. Quando si selezionano 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 Revisione della procedura guidata sono 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 sono 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 uno stato aggiornato del 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.

Di seguito sono elencate alcune delle attività disponibili 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 di risultato allegato al processo di ottimizzazione per il modello e analizzare il modello personalizzato per ottenere le prestazioni del training e della convalida.

  • Selezionare Aggiorna per aggiornare le informazioni sulla pagina.

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

Cassaforte ty evaluation GPT-4 fine-tuning - Public Preview

GPT-4 è il nostro modello più avanzato che può essere ottimizzato in base alle proprie esigenze. Come per i modelli OpenAI di Azure, in genere, le funzionalità avanzate dei modelli ottimizzati offrono maggiori problemi di intelligenza artificiale responsabili correlati a contenuti dannosi, manipolazione, comportamento simile a quello umano, problemi di privacy e altro ancora. Altre informazioni su rischi, funzionalità e limitazioni sono disponibili in Panoramica delle procedure di IA responsabili e della nota sulla trasparenza. Per attenuare i rischi associati ai modelli ottimizzati per GPT-4, sono stati implementati passaggi di valutazione aggiuntivi per rilevare e prevenire contenuti dannosi nel training e negli output dei modelli ottimizzati. Questi passaggi sono basati sul filtro del contenuto del servizio Azure OpenAI e standard di intelligenza artificiale responsabile Microsoft.

  • Le valutazioni vengono eseguite in aree di lavoro dedicate, specifiche del cliente e private;
  • Gli endpoint di valutazione si trovano nella stessa area geografica della risorsa OpenAI di Azure;
  • I dati di training non vengono archiviati in relazione all'esecuzione di valutazioni; solo la valutazione finale del modello (distribuibile o non distribuibile) è persistente; E

I filtri di valutazione dei modelli ottimizzati per GPT-4 sono impostati su soglie predefinite e non possono essere modificati dai clienti; non sono associati a alcuna configurazione di filtro del contenuto personalizzata creata.

Valutazione dei dati

Prima dell'inizio del training, i dati vengono valutati per contenuti potenzialmente dannosi (violenza, violenza, odio e equità, autolesionismo– vedere le definizioni di categoria qui). Se viene rilevato contenuto dannoso al di sopra del livello di gravità specificato, il processo di training avrà esito negativo e verrà visualizzato un messaggio che informa le categorie di errori.

Messaggio di esempio:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

I dati di training vengono valutati automaticamente all'interno del processo di importazione dei dati nell'ambito della funzionalità di ottimizzazione.

Se il processo di ottimizzazione non riesce a causa del rilevamento di contenuto dannoso nei dati di training, non verrà addebitato alcun addebito.

Valutazione del modello

Al termine del training, ma prima che il modello ottimizzato sia disponibile per la distribuzione, il modello risultante viene valutato per le risposte potenzialmente dannose usando le metriche di rischio e sicurezza predefinite di Azure. Usando lo stesso approccio ai test usati per i modelli linguistici di base di grandi dimensioni, la funzionalità di valutazione simula una conversazione con il modello ottimizzato per valutare il potenziale di output di contenuti dannosi, usando di nuovo categorie di contenuto dannoso specificate (violenza, sesso, odio e equità, autolesionismo).

Se viene trovato un modello per generare l'output contenente contenuto rilevato come dannoso al di sopra di una frequenza accettabile, si verrà informati che il modello non è disponibile per la distribuzione, con informazioni sulle categorie specifiche di danni rilevati:

Messaggio di esempio:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Screenshot di un processo di ottimizzazione non riuscito a causa della valutazione della sicurezza

Come per la valutazione dei dati, il modello viene valutato automaticamente all'interno del processo di ottimizzazione come parte della funzionalità di ottimizzazione. Solo la valutazione risultante (distribuibile o non distribuibile) viene registrata dal servizio. Se la distribuzione del modello ottimizzato non riesce a causa del rilevamento di contenuto dannoso negli output del modello, non verrà addebitato alcun addebito per l'esecuzione del training.

Distribuire un modello personalizzato

Quando il processo di ottimizzazione va a buon fine, è 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 la distribuzione di un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione verrà eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni prima e non sono stati effettuati completamenti o chiamate di completamento della chat per un periodo continuativo di 15 giorni.

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 nei prezzi del servizio Azure OpenAI, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario, indipendentemente dal fatto che vengano effettuate chiamate di completamento o di completamento delle chat al modello. Per ulteriori 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, selezionarlo, 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 un nome in Nome distribuzione, 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 di 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 con altri modelli distribuiti. Per i modelli babbage-002 e davinci-002 ottimizzati si useranno il playground Completamenti e l'API Completamenti. Per i modelli ottimizzati gpt-35-turbo-0613 si useranno il playground Chat e l'API 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 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 di risultato è elencato per ogni modello personalizzato nella colonna ID file dei risultati del riquadro Modelli per Azure OpenAI Studio. È possibile usare l'ID file per identificare e scaricare il file dei risultati dal riquadro File di dati di Azure OpenAI Studio.

Il file dei risultati è un file CSV contenente 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.
train_mean_token_accuracy Percentuale di token nel batch di training stimati 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.
validation_mean_token_accuracy Percentuale di token nel batch di convalida stimati 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]].
full_valid_loss Perdita di convalida calcolata alla fine di ogni periodo. Quando il training va bene, la perdita dovrebbe diminuire.
full_valid_mean_token_accuracy Accuratezza del token media valida calcolata alla fine di ogni periodo. Quando il training va bene, l'accuratezza del token dovrebbe aumentare.

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

Cercare la perdita da ridurre nel tempo e l'accuratezza da aumentare. Se viene visualizzata una divergenza tra i dati di training e di convalida, ciò potrebbe indicare un overfitting. Provare a eseguire il training con meno periodi o a un moltiplicatore di frequenza di trading 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 la distribuzione di un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione verrà eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni prima e non sono stati effettuati completamenti o chiamate di completamento della chat per un periodo continuativo di 15 giorni.

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 nei prezzi del servizio Azure OpenAI, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario, indipendentemente dal fatto che vengano effettuate chiamate di completamento o di completamento delle chat al modello. Per ulteriori 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 per 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, 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 Gestione>File di dati 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 Creare un modello personalizzato con un modello ottimizzato evidenziato.

È anche consigliabile includere il parametro suffix per semplificare la distinzione tra iterazioni differenti del modello ottimizzato. suffix accetta una stringa ed è impostato 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.

Importante

Alcune funzionalità descritte in questo articolo potrebbero essere disponibili solo in anteprima. 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 questo modulo.

Modelli

I modelli seguenti supportano l'ottimizzazione:

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

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

Se si prevede di usare gpt-4 per l'ottimizzazione, vedere le linee guida per la valutazione della sicurezza dell'anteprima pubblica GPT-4

Esaminare il flusso di lavoro per Studio AI della piattaforma Azure

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

  1. Preparare i dati di training e convalida.
  2. Usare la procedura guidata Ottimizza modello in Studio AI della piattaforma Azure per eseguire il training del modello personalizzato.
    1. Selezionare un modello.
    2. Scegliere i dati del 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 prestazioni e adattamento del modello ottimizzato.
  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 dei dati di training differente.

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

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

Formato 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 multiturn

Sono inoltre supportati diversi turn 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 weight facoltativa. Attualmente è possibile impostare weight 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 byte order mark (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Creare i 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; tuttavia, un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. È consigliabile fornire centinaia, se non migliaia, di esempi di training 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 degli esempi di qualità più elevati, è possibile ottenere un modello che comporta prestazioni molto peggiori del previsto.

Creare il modello ottimizzato

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

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

  2. Nel menu a scomparsa a sinistra selezionare Ottimizzazione>+ 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 modello gpt-35-turbo. Selezionare quindi Conferma.

    Screenshot dell'opzione per selezionare un modello da ottimizzare.

  2. Per gpt-35-turbo sono disponibili diverse versioni per l'ottimizzazione; scegliere la versione che si desidera ottimizzare. Sceglieremo (0301).

  3. È anche consigliabile includere il parametro suffix per semplificare la distinzione tra iterazioni differenti del modello ottimizzato. suffix accetta una stringa ed è impostato 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 Azure OpenAI per l'ottimizzazione, scegliere la risorsa da usare. Si noti che tutti gli utenti con accesso alla risorsa Azure OpenAI 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 esistenti caricati in precedenza e fornisce opzioni in base alle quali è possibile caricare nuovi dati di training.

Screenshot del riquadro Dati di training per la procedura guidata Ottimizza in Studio AI della piattaforma Azure.

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

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

  • Per caricare i dati di training per ottimizzare il modello, selezionare Carica dati seguito da 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 eseguire l'importazione 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 byte order mark (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 desidera 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 dai dati caricati in precedenza o caricare dati di convalida appena preparati da usare per l'ottimizzazione del modello.

Nota

Come i file di dati di training, anche i file di dati di convalida devono essere formattati come file JSONL, codificati in UTF-8 con un byte order mark (BOM) e devono avere dimensioni inferiori a 200 MB. 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 velocità di apprendimento di ottimizzazione è la velocità di apprendimento originale usata per il training preliminare moltiplicata 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 tra 0,02 e 0,2 per vedere cosa produce 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 è determinato in modo dinamico in base ai dati di input.
seed integer Il valore di inizializzazione controlla la riproducibilità del processo. Il passaggio degli stessi parametri di inizializzazione e processo dovrebbe produrre gli stessi risultati, ma può differire in rari casi. Se non viene specificato un valore di inizializzazione, ne verrà generato uno automaticamente.

È possibile scegliere di lasciare la configurazione predefinita o personalizzare i valori in base alle 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 Ottimizzazione>Modelli in Studio AI della piattaforma Azure.

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 ottimizzato nella scheda Dettagli. È possibile usare il file dei risultati per analizzare le prestazioni del training e convalidare del modello personalizzato.

Il file dei risultati è un file CSV contenente 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.
train_mean_token_accuracy Percentuale di token nel batch di training stimati 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.
validation_mean_token_accuracy Percentuale di token nel batch di convalida stimati 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]].
full_valid_loss Perdita di convalida calcolata alla fine di ogni periodo. Quando il training va bene, la perdita dovrebbe diminuire.
full_valid_mean_token_accuracy Accuratezza del token media valida calcolata alla fine di ogni periodo. Quando il training va bene, l'accuratezza del token dovrebbe aumentare.

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

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

Cassaforte ty evaluation GPT-4 fine-tuning - Public Preview

GPT-4 è il nostro modello più avanzato che può essere ottimizzato in base alle proprie esigenze. Come per i modelli OpenAI di Azure, in genere, le funzionalità avanzate dei modelli ottimizzati offrono maggiori problemi di intelligenza artificiale responsabili correlati a contenuti dannosi, manipolazione, comportamento simile a quello umano, problemi di privacy e altro ancora. Altre informazioni su rischi, funzionalità e limitazioni sono disponibili in Panoramica delle procedure di IA responsabili e della nota sulla trasparenza. Per attenuare i rischi associati ai modelli ottimizzati per GPT-4, sono stati implementati passaggi di valutazione aggiuntivi per rilevare e prevenire contenuti dannosi nel training e negli output dei modelli ottimizzati. Questi passaggi sono basati sul filtro del contenuto del servizio Azure OpenAI e standard di intelligenza artificiale responsabile Microsoft.

  • Le valutazioni vengono eseguite in aree di lavoro dedicate, specifiche del cliente e private;
  • Gli endpoint di valutazione si trovano nella stessa area geografica della risorsa OpenAI di Azure;
  • I dati di training non vengono archiviati in relazione all'esecuzione di valutazioni; solo la valutazione finale del modello (distribuibile o non distribuibile) è persistente; E

I filtri di valutazione dei modelli ottimizzati per GPT-4 sono impostati su soglie predefinite e non possono essere modificati dai clienti; non sono associati a alcuna configurazione di filtro del contenuto personalizzata creata.

Valutazione dei dati

Prima dell'inizio del training, i dati vengono valutati per contenuti potenzialmente dannosi (violenza, violenza, odio e equità, autolesionismo– vedere le definizioni di categoria qui). Se viene rilevato contenuto dannoso al di sopra del livello di gravità specificato, il processo di training avrà esito negativo e verrà visualizzato un messaggio che informa le categorie di errori.

Messaggio di esempio:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

I dati di training vengono valutati automaticamente all'interno del processo di importazione dei dati nell'ambito della funzionalità di ottimizzazione.

Se il processo di ottimizzazione non riesce a causa del rilevamento di contenuto dannoso nei dati di training, non verrà addebitato alcun addebito.

Valutazione del modello

Al termine del training, ma prima che il modello ottimizzato sia disponibile per la distribuzione, il modello risultante viene valutato per le risposte potenzialmente dannose usando le metriche di rischio e sicurezza predefinite di Azure. Usando lo stesso approccio ai test usati per i modelli linguistici di base di grandi dimensioni, la funzionalità di valutazione simula una conversazione con il modello ottimizzato per valutare il potenziale di output di contenuti dannosi, usando di nuovo categorie di contenuto dannoso specificate (violenza, sesso, odio e equità, autolesionismo).

Se viene trovato un modello per generare l'output contenente contenuto rilevato come dannoso al di sopra di una frequenza accettabile, si verrà informati che il modello non è disponibile per la distribuzione, con informazioni sulle categorie specifiche di danni rilevati:

Messaggio di esempio:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Screenshot di un processo di ottimizzazione non riuscito a causa della valutazione della sicurezza

Come per la valutazione dei dati, il modello viene valutato automaticamente all'interno del processo di ottimizzazione come parte della funzionalità di ottimizzazione. Solo la valutazione risultante (distribuibile o non distribuibile) viene registrata dal servizio. Se la distribuzione del modello ottimizzato non riesce a causa del rilevamento di contenuto dannoso negli output del modello, non verrà addebitato alcun addebito per l'esecuzione del training.

Distribuire un modello ottimizzato

Dopo aver ottimizzato il modello, è possibile distribuirlo e usarlo nella propria applicazione. Non è possibile distribuire un modello ottimizzato dalla pagina delle distribuzioni o del playground in Studio AI della piattaforma Azure. L'unico modo attualmente disponibile per distribuire un modello ottimizzato è dalla pagina dei dettagli del modello in questione.

Quando si distribuisce il modello, il suddetto viene reso disponibile per l'inferenza e viene addebitato un addebito orario per l'hosting. Tuttavia, è possibile archiviare i modelli ottimizzati in Studio AI della piattaforma Azure senza costi finché non si è pronti per usarli.

Importante

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

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 nei prezzi del servizio Azure OpenAI, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario, indipendentemente dal fatto che vengano effettuate chiamate di completamento o di completamento delle chat al modello. Per ulteriori 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 di Studio AI della piattaforma Azure.

Usare un modello ottimizzato per la distribuzione

Dopo la distribuzione del modello ottimizzato, è possibile usarlo come qualsiasi altro modello distribuito. È possibile usare Playground in Studio AI della piattaforma Azure 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 prompt flow per compilare l'applicazione di intelligenza artificiale generativa.

Nota

Per i modelli di chat, il messaggio di sistema usato per guidare il modello ottimizzato ( 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 differente, il modello potrebbe non funzionare come previsto.

Pulire le distribuzioni, i modelli ottimizzati 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 ottimizzato

Importante

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

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 nei prezzi del servizio Azure OpenAI, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario, indipendentemente dal fatto che vengano effettuate chiamate di completamento o di completamento delle chat al modello. Per ulteriori 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 per Studio AI della piattaforma Azure. 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 studio AI della piattaforma Azure. Selezionare il modello ottimizzato da eliminare, quindi selezionare Elimina per eliminarlo.

Nota

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

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. Per questo è necessario andare a Azure OpenAI Studio e al riquadro Gestione>File di dati. Selezionare il file da eliminare, quindi selezionare Elimina per eliminare il file.

Prerequisiti

Nota

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

Modelli

I modelli seguenti supportano l'ottimizzazione:

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

Se si prevede di usare gpt-4 per l'ottimizzazione, vedere le linee guida per la valutazione della sicurezza dell'anteprima pubblica GPT-4

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 per l'uso.
  7. Usare il modello personalizzato.
  8. Facoltativamente, analizzare prestazioni e adattamento del modello personalizzato.

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 dei dati di training differente.

I dati di training e convalida usati devono essere formattati come documento JSON Lines (JSONL). Per gpt-35-turbo-0613 l'ottimizzazione il set di dati 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 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 multiturn

Sono inoltre supportati diversi turn 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 weight facoltativa. Attualmente è possibile impostare weight 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 byte order mark (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Creare i 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; tuttavia, un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. È consigliabile fornire centinaia, se non migliaia, di esempi di training 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 degli 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. Sono disponibili due modi per caricare i dati di training:

Per i file di dati di grandi dimensioni, è consigliabile eseguire l'importazione 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 byte order mark (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-05-01-preview"  # This API version or later is required to access seed/events/checkpoint capabilities
)

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:

In questo esempio viene passato anche il parametro di inizializzazione. Il valore di inizializzazione controlla la riproducibilità del processo. Il passaggio degli stessi parametri di inizializzazione e processo dovrebbe produrre gli stessi risultati, ma può differire in rari casi. Se non viene specificato un valore di inizializzazione, ne verrà generato uno automaticamente.

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. 
    seed = 105  # seed parameter controls reproducibility of the fine-tuning job. If no seed is specified one will be generated automatically.
)

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 velocità di apprendimento di ottimizzazione è la velocità di apprendimento originale usata per il training preliminare moltiplicata 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 tra 0,02 e 0,2 per vedere cosa produce 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 OpenAI Python:

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))

Elencare gli eventi di ottimizzazione

Per esaminare i singoli eventi di ottimizzazione generati durante il training:

Potrebbe essere necessario aggiornare la libreria client OpenAI alla versione più recente con per pip install openai --upgrade eseguire questo comando.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

Checkpoint

Quando ogni periodo di training completa un checkpoint viene generato. Un checkpoint è una versione completamente funzionale di un modello che può essere distribuita e usata come modello di destinazione per i successivi processi di ottimizzazione. I checkpoint possono essere particolarmente utili, in quanto possono fornire uno snapshot del modello prima che si sia verificato l'overfitting. Al termine di un processo di ottimizzazione, saranno disponibili le tre versioni più recenti del modello da distribuire. Il periodo finale sarà rappresentato dal modello ottimizzato, i due periodi precedenti saranno disponibili come checkpoint.

È possibile eseguire il comando list checkpoints per recuperare l'elenco di checkpoint associati a un singolo processo di ottimizzazione:

Potrebbe essere necessario aggiornare la libreria client OpenAI alla versione più recente con per pip install openai --upgrade eseguire questo comando.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

Cassaforte ty evaluation GPT-4 fine-tuning - Public Preview

GPT-4 è il nostro modello più avanzato che può essere ottimizzato in base alle proprie esigenze. Come per i modelli OpenAI di Azure, in genere, le funzionalità avanzate dei modelli ottimizzati offrono maggiori problemi di intelligenza artificiale responsabili correlati a contenuti dannosi, manipolazione, comportamento simile a quello umano, problemi di privacy e altro ancora. Altre informazioni su rischi, funzionalità e limitazioni sono disponibili in Panoramica delle procedure di IA responsabili e della nota sulla trasparenza. Per attenuare i rischi associati ai modelli ottimizzati per GPT-4, sono stati implementati passaggi di valutazione aggiuntivi per rilevare e prevenire contenuti dannosi nel training e negli output dei modelli ottimizzati. Questi passaggi sono basati sul filtro del contenuto del servizio Azure OpenAI e standard di intelligenza artificiale responsabile Microsoft.

  • Le valutazioni vengono eseguite in aree di lavoro dedicate, specifiche del cliente e private;
  • Gli endpoint di valutazione si trovano nella stessa area geografica della risorsa OpenAI di Azure;
  • I dati di training non vengono archiviati in relazione all'esecuzione di valutazioni; solo la valutazione finale del modello (distribuibile o non distribuibile) è persistente; E

I filtri di valutazione dei modelli ottimizzati per GPT-4 sono impostati su soglie predefinite e non possono essere modificati dai clienti; non sono associati a alcuna configurazione di filtro del contenuto personalizzata creata.

Valutazione dei dati

Prima dell'inizio del training, i dati vengono valutati per contenuti potenzialmente dannosi (violenza, violenza, odio e equità, autolesionismo– vedere le definizioni di categoria qui). Se viene rilevato contenuto dannoso al di sopra del livello di gravità specificato, il processo di training avrà esito negativo e verrà visualizzato un messaggio che informa le categorie di errori.

Messaggio di esempio:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

I dati di training vengono valutati automaticamente all'interno del processo di importazione dei dati nell'ambito della funzionalità di ottimizzazione.

Se il processo di ottimizzazione non riesce a causa del rilevamento di contenuto dannoso nei dati di training, non verrà addebitato alcun addebito.

Valutazione del modello

Al termine del training, ma prima che il modello ottimizzato sia disponibile per la distribuzione, il modello risultante viene valutato per le risposte potenzialmente dannose usando le metriche di rischio e sicurezza predefinite di Azure. Usando lo stesso approccio ai test usati per i modelli linguistici di base di grandi dimensioni, la funzionalità di valutazione simula una conversazione con il modello ottimizzato per valutare il potenziale di output di contenuti dannosi, usando di nuovo categorie di contenuto dannoso specificate (violenza, sesso, odio e equità, autolesionismo).

Se viene trovato un modello per generare l'output contenente contenuto rilevato come dannoso al di sopra di una frequenza accettabile, si verrà informati che il modello non è disponibile per la distribuzione, con informazioni sulle categorie specifiche di danni rilevati:

Messaggio di esempio:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Screenshot di un processo di ottimizzazione non riuscito a causa della valutazione della sicurezza

Come per la valutazione dei dati, il modello viene valutato automaticamente all'interno del processo di ottimizzazione come parte della funzionalità di ottimizzazione. Solo la valutazione risultante (distribuibile o non distribuibile) viene registrata dal servizio. Se la distribuzione del modello ottimizzato non riesce a causa del rilevamento di contenuto dannoso negli output del modello, non verrà addebitato alcun addebito per l'esecuzione del training.

Distribuire un modello personalizzato

Quando il processo di ottimizzazione ha esito positivo, il valore della variabilefine_tuned_model 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 la distribuzione di un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione verrà eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni prima e non sono stati effettuati completamenti o chiamate di completamento della chat per un periodo continuativo di 15 giorni.

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 nei prezzi del servizio Azure OpenAI, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario, indipendentemente dal fatto che vengano effettuate chiamate di completamento o di completamento delle chat al modello. Per ulteriori 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 il modello ottimizzato

A differenza dei comandi 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 differente 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 dal 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 Azure OpenAI
resource_name Nome della risorsa Azure OpenAI
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. In alternativa, è anche possibile distribuire un checkpoint passando l'ID del checkpoint che verrà visualizzato nel formato ftchkpt-e559c011ecc04fc68eaa339d8227d02d
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 aree differenti, basta che i gruppi di sottoscrizioni e risorse siano identici per le variabili di origine e di destinazione e che solo i nomi delle risorse di origine e di destinazione siano 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 con altri modelli distribuiti. Per i modelli babbage-002 e davinci-002 ottimizzati si useranno il playground Completamenti e l'API Completamenti. Per i modelli ottimizzati gpt-35-turbo-0613 si useranno il playground Chat e l'API 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 collega un file di risultato, 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 dei risultati allegato al processo di ottimizzazione per il modello personalizzato, 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 dei risultati è un file CSV contenente 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.
train_mean_token_accuracy Percentuale di token nel batch di training stimati 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.
validation_mean_token_accuracy Percentuale di token nel batch di convalida stimati 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]].
full_valid_loss Perdita di convalida calcolata alla fine di ogni periodo. Quando il training va bene, la perdita dovrebbe diminuire.
full_valid_mean_token_accuracy Accuratezza del token media valida calcolata alla fine di ogni periodo. Quando il training va bene, l'accuratezza del token dovrebbe aumentare.

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

Cercare la perdita da ridurre nel tempo e l'accuratezza da aumentare. Se viene visualizzata una divergenza tra i dati di training e di convalida che possono indicare l'overfitting. Provare a eseguire il training con meno periodi o a un moltiplicatore di frequenza di trading 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 la distribuzione di un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di quindici (15) giorni, la distribuzione verrà eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di quindici (15) giorni prima e non sono stati effettuati completamenti o chiamate di completamento della chat per un periodo continuativo di 15 giorni.

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 nei prezzi del servizio Azure OpenAI, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario, indipendentemente dal fatto che vengano effettuate chiamate di completamento o di completamento delle chat al modello. Per ulteriori 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 di risultato generati durante il training dall'abbonamento a 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, si può desiderare di 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 parametro suffix per semplificare la distinzione tra iterazioni differenti del modello ottimizzato. suffix accetta una stringa ed è impostato 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 Azure OpenAI usando l'API REST.

Prerequisiti

Nota

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

Modelli

I modelli seguenti supportano l'ottimizzazione:

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

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

Se si prevede di usare gpt-4 per l'ottimizzazione, vedere le linee guida per la valutazione della sicurezza dell'anteprima pubblica GPT-4.

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 per l'uso.
  7. Usare il modello personalizzato.
  8. Facoltativamente, analizzare prestazioni e adattamento del modello personalizzato.

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 dei dati di training differente.

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 di ottimizzazione, gpt-35-turbo-0613 vedere l'esercitazione sull'ottimizzazione di Azure OpenAI.

Formato 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 multiturn

Sono inoltre supportati diversi turn 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 weight facoltativa. Attualmente è possibile impostare weight 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 byte order mark (BOM). Il file deve avere dimensioni inferiori a 512 MB.

Creare i 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; tuttavia, un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. È consigliabile fornire centinaia, se non migliaia, di esempi di training 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 degli esempi di qualità più elevati, è possibile ottenere un modello che comporta prestazioni molto peggiori del previsto.

Selezionare il modello di base

Il primo passaggio per la creazione di un modello personalizzato consiste nella scelta di 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 un modello di base dall'elenco a discesa Tipo di modello di base, 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)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)

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 nella scelta dei dati di training preparati esistenti o nel caricamento di 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. Sono disponibili due modi per caricare i dati di training:

Per i file di dati di grandi dimensioni, è consigliabile eseguire l'importazione 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 byte order mark (BOM). Il file deve avere dimensioni inferiori a 512 MB.

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

In questo esempio viene passato anche il parametro di inizializzazione. Il valore di inizializzazione controlla la riproducibilità del processo. Il passaggio degli stessi parametri di inizializzazione e processo deve produrre gli stessi risultati, ma può differire in rari casi. Se non viene specificato un valore di inizializzazione, ne verrà generato uno automaticamente.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2024-05-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>",
    "seed": 105
}'

È 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 velocità di apprendimento di ottimizzazione è la velocità di apprendimento originale usata per il training preliminare moltiplicata 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 tra 0,02 e 0,2 per vedere cosa produce 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=2024-05-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Elencare gli eventi di ottimizzazione

Per esaminare i singoli eventi di ottimizzazione generati durante il training:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/events?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Checkpoint

Quando ogni periodo di training completa un checkpoint viene generato. Un checkpoint è una versione completamente funzionale di un modello che può essere distribuita e usata come modello di destinazione per i successivi processi di ottimizzazione. I checkpoint possono essere particolarmente utili, in quanto possono fornire uno snapshot del modello prima che si sia verificato l'overfitting. Al termine di un processo di ottimizzazione, saranno disponibili le tre versioni più recenti del modello da distribuire. Il periodo finale sarà rappresentato dal modello ottimizzato, i due periodi precedenti saranno disponibili come checkpoint.

È possibile eseguire il comando list checkpoints per recuperare l'elenco di checkpoint associati a un singolo processo di ottimizzazione:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Cassaforte ty evaluation GPT-4 fine-tuning - Public Preview

GPT-4 è il nostro modello più avanzato che può essere ottimizzato in base alle proprie esigenze. Come per i modelli OpenAI di Azure, in genere, le funzionalità avanzate dei modelli ottimizzati offrono maggiori problemi di intelligenza artificiale responsabili correlati a contenuti dannosi, manipolazione, comportamento simile a quello umano, problemi di privacy e altro ancora. Altre informazioni su rischi, funzionalità e limitazioni sono disponibili in Panoramica delle procedure di IA responsabili e della nota sulla trasparenza. Per attenuare i rischi associati ai modelli ottimizzati per GPT-4, sono stati implementati passaggi di valutazione aggiuntivi per rilevare e prevenire contenuti dannosi nel training e negli output dei modelli ottimizzati. Questi passaggi sono basati sul filtro del contenuto del servizio Azure OpenAI e standard di intelligenza artificiale responsabile Microsoft.

  • Le valutazioni vengono eseguite in aree di lavoro dedicate, specifiche del cliente e private;
  • Gli endpoint di valutazione si trovano nella stessa area geografica della risorsa OpenAI di Azure;
  • I dati di training non vengono archiviati in relazione all'esecuzione di valutazioni; solo la valutazione finale del modello (distribuibile o non distribuibile) è persistente; E

I filtri di valutazione dei modelli ottimizzati per GPT-4 sono impostati su soglie predefinite e non possono essere modificati dai clienti; non sono associati a alcuna configurazione di filtro del contenuto personalizzata creata.

Valutazione dei dati

Prima dell'inizio del training, i dati vengono valutati per contenuti potenzialmente dannosi (violenza, violenza, odio e equità, autolesionismo– vedere le definizioni di categoria qui). Se viene rilevato contenuto dannoso al di sopra del livello di gravità specificato, il processo di training avrà esito negativo e verrà visualizzato un messaggio che informa le categorie di errori.

Messaggio di esempio:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

I dati di training vengono valutati automaticamente all'interno del processo di importazione dei dati nell'ambito della funzionalità di ottimizzazione.

Se il processo di ottimizzazione non riesce a causa del rilevamento di contenuto dannoso nei dati di training, non verrà addebitato alcun addebito.

Valutazione del modello

Al termine del training, ma prima che il modello ottimizzato sia disponibile per la distribuzione, il modello risultante viene valutato per le risposte potenzialmente dannose usando le metriche di rischio e sicurezza predefinite di Azure. Usando lo stesso approccio ai test usati per i modelli linguistici di base di grandi dimensioni, la funzionalità di valutazione simula una conversazione con il modello ottimizzato per valutare il potenziale di output di contenuti dannosi, usando di nuovo categorie di contenuto dannoso specificate (violenza, sesso, odio e equità, autolesionismo).

Se viene trovato un modello per generare l'output contenente contenuto rilevato come dannoso al di sopra di una frequenza accettabile, si verrà informati che il modello non è disponibile per la distribuzione, con informazioni sulle categorie specifiche di danni rilevati:

Messaggio di esempio:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Screenshot di un processo di ottimizzazione non riuscito a causa della valutazione della sicurezza

Come per la valutazione dei dati, il modello viene valutato automaticamente all'interno del processo di ottimizzazione come parte della funzionalità di ottimizzazione. Solo la valutazione risultante (distribuibile o non distribuibile) viene registrata dal servizio. Se la distribuzione del modello ottimizzato non riesce a causa del rilevamento di contenuto dannoso negli output del modello, non verrà addebitato alcun addebito per l'esecuzione del training.

Distribuire un modello personalizzato

Importante

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

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 nei prezzi del servizio Azure OpenAI, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario, indipendentemente dal fatto che vengano effettuate chiamate di completamento o di completamento delle chat al modello. Per ulteriori 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 dal 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 Azure OpenAI
resource_name Nome della risorsa Azure OpenAI
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. In alternativa, è anche possibile distribuire un checkpoint passando l'ID del checkpoint che verrà visualizzato nel formato ftchkpt-e559c011ecc04fc68eaa339d8227d02d
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 differenti, basta che i gruppi di sottoscrizioni e risorse siano identici per le variabili di origine e di destinazione e che solo i nomi delle risorse di origine e di destinazione siano 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 con altri modelli distribuiti. Per i modelli babbage-002 e davinci-002 ottimizzati si useranno il playground Completamenti e l'API Completamenti. Per i modelli ottimizzati gpt-35-turbo-0613 si useranno il playground Chat e l'API 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 collega un file di risultato, 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 Python seguente usa l'API REST per recuperare l'ID file del primo file dei risultati allegato al processo di ottimizzazione per il modello personalizzato e quindi scaricare 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 dei risultati è un file CSV contenente 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.
train_mean_token_accuracy Percentuale di token nel batch di training stimati 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.
validation_mean_token_accuracy Percentuale di token nel batch di convalida stimati 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]].
full_valid_loss Perdita di convalida calcolata alla fine di ogni periodo. Quando il training va bene, la perdita dovrebbe diminuire.
full_valid_mean_token_accuracy Accuratezza del token media valida calcolata alla fine di ogni periodo. Quando il training va bene, l'accuratezza del token dovrebbe aumentare.

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

Cercare la perdita da ridurre nel tempo e l'accuratezza da aumentare. Se viene visualizzata una divergenza tra i dati di training e di convalida, ciò potrebbe indicare un overfitting. Provare a eseguire il training con meno periodi o a un moltiplicatore di frequenza di trading 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 di risultato generati durante il training dall'abbonamento a Azure OpenAI. È possibile usare i metodi seguenti per eliminare i file di training, convalida e risultato:

Ottimizzazione continua

Dopo aver creato un modello ottimizzato, si può desiderare di 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 parametro suffix per semplificare la distinzione tra iterazioni differenti del modello ottimizzato. suffix accetta una stringa ed è impostato 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 Azure OpenAI usando l'API REST.

Risoluzione dei problemi

Come si abilita l'ottimizzazione? La creazione di un modello personalizzato è disattivata in Azure OpenAI Studio?

Per accedere correttamente all'ottimizzazione, è necessario ricoprire il ruolo di Collaboratore OpenAI di Servizi cognitivi. Persino un utente con autorizzazioni di Amministratore del servizio di alto livello avrebbe comunque bisogno di questo account 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 in Azure OpenAI Studio, è possibile visualizzare il messaggio di errore in "file di dati" in Azure OpenAI Studio. Passare il puntatore del mouse su dove viene visualizzato "errore" (sotto la colonna dello stato) per visualizzare 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 differenti rispetto a quelli ottimizzati.

  • Dati non sufficienti: anche se 10 rappresenta il valore minimo per l'esecuzione della pipeline, sono necessarie centinaia a migliaia di punti dati per insegnare al modello una nuova competenza. Un numero di punti dati troppo basso comporta il rischio di overfitting e scarsa generalizzazione. Il modello ottimizzato potrebbe performare bene sui dati di training, ma male 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 validi: 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, resi di articoli), il suddetto 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 inesatti.

Passaggi successivi